原因:项目需要,修改了linux的最大打开文件描述符,修改后对应用户就无法登录了。。。
/etc/security/limits.conf,配置内容如下:
root soft nofile 2048000
root hard nofile 2048000
root soft nproc 2048000
root hard nproc 2048000
liyu soft nofile 102400
liyu hard nofile 102400
liyu soft nproc 102400
liyu hard nproc 102400
改完上述配置。重新连接后,root无法登录,用liyu普通账号可以登录,但su root也无法登录。
(还好本次改的东西不多,只是改了一个配置文件,如果改多个配置文件,这问题就尴尬了)
解决之前先搞清楚原因比较妥善:
用户参数:文章提到的 /etc/security/limits.conf 中可以设置系统资源。很多网上文章只提到了修改这个文件。然而仅修改这个文件会导致容易踩坑。
ulimit设置的参数(/etc/security/limits.conf),其实是对单一程序的限制,进程级别。
软限制(soft nofile),程序可动态调整至硬限制,只会做出warnning。硬限制(hard limit)无法突破。
注意:hard limit值设置受限于nr_open。
内核参数:单个进程可分配的最大文件数: /proc/sys/fs/nr_open。单个进程可分配的最大文件句柄数。
cat /proc/sys/fs/nr_open
1048576
centos7默认的最大句柄数1048576<2048000(root配置的句柄数大于nr_open,而用户liyu比较幸运小于nr_open。这就是为何root用户无法登录而普通用户可以登录的原因)。
现在想修改/proc/sys/fs/nr_open已经无济于事,因为root用户无法登录,普通用户没权限更改该配置文件。。。
解决方案:
进入单用户系统,更改响应配置文件
1.重启系统(重启虚拟机)。
2.进入到如下界面,立即键入(防止系统5秒后自启)
3.在上述界面中,按e键出现下面界面:
4.走到最后找到“ro”一行,将“ro”替换成 rw init=/sysroot/bin/sh,如下:
5.按Ctrl+x 进行重启进入单用户模式,最关键一步,执行chroot /sysroot,获取root权限,如下:
6.输入命令ls,确认是否是自己的根目录
7.确认完成后开始修复操作,将root用户句柄数进行修改。
8.修复完成后,输入两次命令exit,执行命令reboot,重启系统。
9.重启后发现用户root可以登录(好开心)。
10.别开心太早,试试用ssh工具是否可以登录,如果可以登录那就真结束了,反之请继续往下看…
网上上述操作一大把。千篇一律都是写到这里就结束了,真的结束了吗?
当然没有,否则就没有我这篇文章了
centos7单用户系统修改配置文件,导致ssh无法登录:入口