本周遇到了一个很奇葩的问题,客户的一台服务器无论如何都无法登录到机器系统里面去。可以肯定的是输入的登录密码是完全正确的,但是输入密码后,总在login登录界面无限循环。
     今天抽空总结下这个问题的前因后果。
     

登录异常现象

1、ssh登录成功后,会立即退出。
输入错误密码正常报错
在这里插入图片描述
     
输入正确密码立即退出
请添加图片描述
     
2、vnc本地登录,一直在login界面。
输入错误密码正常报错
在这里插入图片描述
     
输入正确密码回到login
在这里插入图片描述
以上现象说明输入的密码是正确的,登录到系统后,立即被系统强制退出了。
     

异常原因排查

这个时候已经无法正常登录机器了,那就只能用单用户登录机器进行排查。
查看/var/log/secure日志
在这里插入图片描述
发现有很多pam_limits 相关的报错:Could not set limit for ‘nofile’:Operation not permitted,猜想可能是 /etc/security/limits.conf 文件设置有问题。
     
查看/etc/security/limits.conf
在这里插入图片描述
     
初看设置是没有什么问题的。
再排查系统内核文件/etc/sysctl.conf
在这里插入图片描述
发现对内核参数fs.file-max 进行了设置。
fs.file-max:表示系统级别的能够打开的文件句柄的数,是对整个系统的限制。
/etc/security/limit.conf:设置用户能打开的文件句柄数,提供对shell及其启动的进程的可用文件句柄的控制。该文件的设置是进程级别的,可以控制进程级别(比如Nginx进程、MySQL进程)能够打开的文件句柄数。
对比发现:用户能打开的文件句柄数比系统级别的文件句柄数还大,所以登录shell终端时报错,导致无法登录到shell终端。
     

异常问题解决

修改/etc/security/limits.conf
在这里插入图片描述
     
重启机器登录,发现还是一样的无法登录。
好吧,那就继续分析吧。
     
发现还有一个/etc/security/limits.d/root.conf文件
在这里插入图片描述
     
修改/etc/security/limits.d/root.conf文件
在这里插入图片描述

     
再次重启,登录解决。
在这里插入图片描述
     
在这里插入图片描述
     

异常问题总结

1、/etc/security/limits.conf是linux资源使用配置文件,用来限制用户对系统资源的使用。limits.conf文件实际是linux PAM(插入式认证模块,Pluggable Authentication Modules)中pam_limits.so的配置文件,而且只针对于单个会话。
2、/etc/security/limits.d/文件夹下定义的文件内容和limits.conf格式一样,但优先级更高,系统默认该目录下面是没有root.conf文件的。。所以排错过程中,只修改了limit.conf仍然无法登录。
3、fs.file-max是系统级别的能够打开的文件句柄的数量,是对整个系统的限制,所有进程打开的文件描述符数不能超过该文件的值。系统内可以通过/proc/sys/fs/file-max查看。
实际的排障过程是很花费时间的,可能并不像总结的这么容易,就能发现问题原因。

Logo

更多推荐