腾讯云cvm-linux登录不上: PAM模块问题(案例篇)–云惠网

avatar
avatar
云惠网小编
2129
文章
0
评论
2020年11月12日17:27:23 评论 13 次浏览 4488字阅读14分57秒
摘要

CVM云服务器通过VNC输入正确的密码后无法正常登录,报错Module is unknown

案例一

CVM云服务器通过VNC输入正确的密码后无法正常登录,报错Module is unknown

排查思路:

1.在vnc无法正常登录时可以先尝试ssh能否正常登录进系统,如果ssh也不行就需要进单用户模式,通过控制台进入linux单用户模式可参考:

https://cloud.tencent.com/developer/article/1731813

2.进入系统后通过vim /var/log/secure查看日志,该文件一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志,核实到有/lib/security/pam_limits.so的报错信息

3.进入/etc/pam.d后通过以下命令搜索日志中报错的pam模块的关键字/lib/security/pam_limits.so,就找到了是system-auth文件中配置了这个参数

find . | xargs grep -ri "/lib/security/pam_limits.so" -l

原因分析:

由于VNC登录会调用/etc/pam.d/login这个pam模块进行校验,而这个模块会将/etc/pam.d/system-auth这个模块引入进行校验,如下图是/etc/pam.d/login配置文件的内容:

导致登录失败的原因是system-auth配置文件中的pam_limits.so模块的模块路径写错了,pam_limits.so模块的主要功能是限制用户会话过程中对各种系统资源的使用情况,这里如果是64位的系统可以写成绝对路径/lib64/security/pam_limits.so,也可以直接写成相对路径pam_limits.so,写错路径的话会导致找不到对应的认证模块,导致登录认证报错。

解决方案

在vnc登录不上的时候可以尝试通过ssh远程登录实例,登录上之后修改pam_limits.so模块的模块路径即可,如果ssh也无法正常登录,此时就需要通过单用户模式或者救援模式进入系统后再修改配置,如仍无法登录可以提交工单解决

案例二

CVM云服务器通过VNC无法正常登录,输入密码之前就报错Account locked due to XXX failed logins

排查思路:

1.在vnc无法正常登录时可以先尝试ssh能否正常登录进系统,如果ssh也不行就需要进单用户模式,通过控制台进入linux单用户模式可参考:

https://cloud.tencent.com/developer/article/1731813

2.进入系统后通过vim /var/log/secure查看日志,该文件一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志,核实到有pam_tally2的报错信息

3.进入/etc/pam.d后通过以下命令搜索日志中报错的pam模块的关键字pam_tally2,就找到了是login文件中配置了这个参数

find . | xargs grep -ri "pam_tally2" -l

原因分析

由于VNC登录会调用/etc/pam.d/login这个pam模块进行校验,而在login这个配置文件中有加入了pam_tally2.so模块进行认证,如下图所示,如果登录失败超过配置的尝试次数登录账户就会被锁定一段时间,如果是因为被暴力破解也有可能导致账户被锁定从而无法登录

pam_tally2.so模块的功能是设置Linux用户连续N次输入错误密码进行登陆时,自动锁定X分钟或永久锁定(这里的永久锁定指除非进行手工解锁,否则会一直锁定)

pam_tally2模块参数详解:

deny=n              失败登录次数超过n次后拒绝访问

lock_time=n         失败登录后锁定的时间(秒数)

un lock_time=n       超出失败登录次数限制后,解锁的时间

no_lock_time        不在日志文件/var/log/faillog 中记录.fail_locktime字段

magic_root          root用户(uid=0)调用该模块时,计数器不会递增

even_deny_root      root用户失败登录次数超过deny=n次后拒绝访问

root_unlock_time=n  与even_deny_root相对应的选项,如果配置该选项,则root用户在登录失败次数超出限制后被锁定指定时间

解决方案

在vnc登录不上的时候可以尝试通过ssh远程登录实例,登录上之后临时注释掉pam_tally2.so模块的模块路径即可,如果ssh也无法正常登录,此时就需要通过单用户模式或者救援模式进入系统后再修改配置,如仍无法登录可以提交工单解决

在临时注释掉pam_tally2.so模块的配置之后需要核实账户锁定的根本原因是暴力破解还是因为人为误操作导致的登录失败,如果是被暴力破解导致的,建议可以参考如下方案加固安全策略:

1.修改服务器密码,密码设置大写、小写、特殊字符、数字组成的12-16位的复杂随机密码

2.删除服务器上设置的不需要的用户

3.将sshd的默认端口22改为其他1024-65535之间的非常用端口,避免因暴力破解导致用户被锁定,造成无法登录

Windows远程端口修改参考文档:https://cloud.tencent.com/developer/article/1052163

Linux远程端口修改参考文档:https://cloud.tencent.com/developer/article/1124500

4.腾讯云平台有安全组功能,里面您只需要放行业务协议和端口,不建议放行所有协议所有端口,参考文档: https://cloud.tencent.com/document/product/215/20398

5.安装防护软件(云镜、云锁),并添加实时告警,有异常登录时,及时反馈到您

6.不建议向公网开放核心应用服务端口访问,例如mysql、redis等,您可修改为本地访问或禁止外网访问

案例三

CVM云服务器在VNC登录的时候,输入正确的密码后无法登录,卡在输入完密码的地方,过一会直接报错Hint:Caps Lock on

并且ssh远程登录会报错

排查思路:

1.由于vnc和ssh都无法登录,需要进单用户模式,通过控制台进入linux单用户模式可参考:

https://cloud.tencent.com/developer/article/1731813

2.进入系统后通过vim /var/log/secure查看日志,该文件一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志,发现没有异常日志,说明登录信息并未被记录到日志,可能是日志记录这一块有问题

3.进入/var/log,看到btmp日志过大

原因分析

可能是因为被频繁暴力破解,导致/var/log/btmp日志过大,该文件是记录错误登录的日志,该文件过大会导致登录的时候写入日志异常,所以无法正常登录

解决方案

在vnc登录不上的时候可以尝试通过ssh远程登录实例,登录上之后通过命令cat /dev/null > /var/log/btmp

清除btmp日志文件内容即可,如果ssh也无法正常登录,此时就需要通过单用户模式或者救援模式进入系统后再修改配置,如仍无法登录可以提交工单解决

案例四

ssh远程登录和vnc登录都报错Permission denied

排查思路:

1.由于vnc和ssh都无法登录,需要进单用户模式,通过控制台进入linux单用户模式可参考:

https://cloud.tencent.com/developer/article/1731813

2.进入系统后通过vim /var/log/secure查看日志,该文件一般用来记录安全相关的信息,记录最多的是哪些用户登录服务器的相关日志,核实到有pam_limits的报错信息

3.缺省情况下pam_limits.so该模块的配置文件是/etc/security/limits.conf,核实该文件发现root的soft nofile和hard nofile分别设置为3000001和3000002,由于在单用户模式下无法通过sysctl -a命令看到内核参数,可以通过查看/etc/sysctl.conf文件来核实fs.nr_open和fs.file-max是否有特殊配置

原因分析

由于在/etc/pam.d/login配置中默认会引入system-auth模块进行认证,而该模块默认会引入pam_limits.so模块进行认证,如下图是system-auth的默认配置

pam_limits.so模块的主要功能是限制用户会话过程中对各种系统资源的使用情况。缺省情况下该模块的配置文件是/etc/security/limits.conf,导致无法正常登录的原因是该文件中关于root用户最大能打开的文件描述符个数配置错误,应满足如下关系:soft nofile <= hard nofile <= fs.nr_open

内核参数

/etc/security/limits.conf文件限制着用户可以使用的最大文件数,最大线程数,最大内存等资源使用量。

① soft nofile表示可打开的文件描述符的最大数(软限制)。

② hard nofile表示可打开的文件描述符的最大数(硬限制),必定不能超过这个设定的值。

fs.file-max 表示系统级别的能够打开的文件句柄(内核中struct file)的数量。是对整个系统的限制,并不是针对用户的。

fs.nr_open是单个进程可分配的最大文件描述符数目(fd 个数)

这个案例中soft nofile是3000001,hard nofile是3000002,它们都大于file-max,所以才会导致配置错误,从而无法正常登录

要满足如下的大小关系:

soft nofile<=hard nofile<=fs.nr_open

解决方案

在vnc登录不上的时候可以尝试通过ssh远程登录实例,登录上之后通过命令cat /dev/null > /var/log/btmp

如果ssh也无法正常登录,此时就需要通过单用户模式或者救援模式进入系统后再修改如下配置,如仍无法登录可以提交工单解决

(1)修改 /etc/security/limits.conf 文件,在最后添加(或修改)如下两行:

root soft nofile 100001

root hard nofile 100002

(2)修改/etc/sysctl.conf文件,在最后添加一行(非必须,在系统最大限制不够时再调整):

fs.file-max = 2000000

fs.nr_open = 2000000

(3)修改完毕后,执行 sysctl -p 使之生效

参考资料:

腾讯云cvm-linux登录不上: PAM模块问题(原理篇):https://cloud.tencent.com/developer/article/1729015

腾讯云cvm-如何在控制台进入linux单用户模式:https://cloud.tencent.com/developer/article/1731813

腾讯云618
avatar
一个基础的SpringBoot项目该包含哪些–云惠网 腾讯云

一个基础的SpringBoot项目该包含哪些–云惠网

  建立一个全新的项目,或者把旧的庞大的项目,进行拆分成多个项目。在建立新的项目中,经常需要做一些重复的工作,比如说拷贝一下常用的工具类,通用代码等等。所以就可以做一个基础的项目方...
腾讯云618
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: