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

登录异常现象

1、ssh登录成功后,会立即退出。

输入错误密码正常报错

Theme My Login 教程 themis login_文件句柄


     

输入正确密码立即退出

Theme My Login 教程 themis login_Theme My Login 教程_02


     

2、vnc本地登录,一直在login界面。

输入错误密码正常报错

Theme My Login 教程 themis login_重启_03


     

输入正确密码回到login

Theme My Login 教程 themis login_Theme My Login 教程_04


     

以上现象说明输入的密码是正确的,登录到系统后,立即被系统强制退出了。

     

异常原因排查

这个时候已经无法正常登录机器了,那就只能用单用户登录机器进行排查。

查看/var/log/secure日志

Theme My Login 教程 themis login_文件句柄_05


发现有很多pam_limits 相关的报错:Could not set limit for 'nofile':Operation not permitted,猜想可能是 /etc/security/limits.conf 文件设置有问题。

     

查看/etc/security/limits.conf

Theme My Login 教程 themis login_Theme My Login 教程_06


     

初看设置是没有什么问题的。

再排查系统内核文件/etc/sysctl.conf

Theme My Login 教程 themis login_Theme My Login 教程_07


发现对内核参数fs.file-max 进行了设置。

fs.file-max:表示系统级别的能够打开的文件句柄的数,是对整个系统的限制。

/etc/security/limit.conf:设置用户能打开的文件句柄数,提供对shell及其启动的进程的可用文件句柄的控制。该文件的设置是进程级别的,可以控制进程级别(比如Nginx进程、MySQL进程)能够打开的文件句柄数。

对比发现:用户能打开的文件句柄数比系统级别的文件句柄数还大,所以登录shell终端时报错,导致无法登录到shell终端。

     

异常问题解决

修改/etc/security/limits.conf

Theme My Login 教程 themis login_无法登录_08


     

重启机器登录,发现还是一样的无法登录。

好吧,那就继续分析吧。

     

发现还有一个/etc/security/limits.d/root.conf文件

Theme My Login 教程 themis login_文件句柄_09


     

修改/etc/security/limits.d/root.conf文件

Theme My Login 教程 themis login_文件句柄_10


     

再次重启,登录解决。

Theme My Login 教程 themis login_Theme My Login 教程_11


     

Theme My Login 教程 themis login_Theme My Login 教程_12


     

异常问题总结

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查看。
实际的排障过程是很花费时间的,可能并不像总结的这么容易,就能发现问题原因。