问题概述及解决

问题描述

Centos 7 系统 优化系统内核后,账户无法登录(输入的账号和密码均正确,绝对没有错误!!,也没有禁止登录!!)。 报错为:Permission denied。

优化内核内容为:

centos7 mysql无法登录 centos7无法登陆_重启

cat /etc/security/limits.conf
* soft nofile 10000000  #错的,千万别用
* hard nofile 10000000 #错的,千万别用
* hard nproc 10000000 #错的,千万别用
* soft nproc 10000000 #错的,千万别用

报错截图:

centos7 mysql无法登录 centos7无法登陆_重启_02

出现上述问题,是因为在优化内核参数时多输入了一个0。

centos7 mysql无法登录 centos7无法登陆_重启_03

 问题解决

进单用户模式将/etc/security/limits.conf 中的参数改为系统可承受的值,经过多次测验,最大可允许的数值为1000009。

 

问题发现及排查

问题发现

公司视频项目在建设开始,对Centos系统部署完成,并进行系统内核调优,重启系统后,发现账户无法登录。确定输入的密码肯定正确,但是报错Permission denied。

centos7 mysql无法登录 centos7无法登陆_重启_02

问题排查

第一次尝试

进入单用户模式,修改账户密码。

在启动页面,按键 ‘e' 进入编辑

centos7 mysql无法登录 centos7无法登陆_重启_05

 按向下移动光标,跳转到最后,找到’ro‘ 修改为 'rw init=/sysroot/bin/sh' 【注意,输入时没有引号】

centos7 mysql无法登录 centos7无法登陆_重启_06

如下图

centos7 mysql无法登录 centos7无法登陆_单用户模式_07

按Ctrl-x 进行重启进入单用户模式

centos7 mysql无法登录 centos7无法登陆_centos7 mysql无法登录_08

 输入执行 chroot /sysroot 

centos7 mysql无法登录 centos7无法登陆_centos7 mysql无法登录_09

 

 执行passwd root 修改密码【此处截图,中文显示异常,请忽略】

centos7 mysql无法登录 centos7无法登陆_问题排查_10

 执行touch /.autorelabel 

如果不执行,密码不会生效。

按Ctrl+D,执行reboot重启生效。

输入账户密码,依旧失败 ,报错依旧为 Permission denied。

至此第一次尝试失败

第二次尝试

依旧进入单用户模式,具体过程不重复描述;进入系统,查看/var/log/secure

centos7 mysql无法登录 centos7无法登陆_centos7 mysql无法登录_11

如上图,报错内容中有一条很明显:Could not set limit for 'nofile' Operation not permitted 【我英语很烂,就不妄加翻译了】。

通过以上报错,我们定位到问题出在/etc/security/limits.conf  中配置的 nofile打开数限制值太大。

cat /etc/security/limits.conf
* soft nofile 10000000  #错的,千万别用
* hard nofile 10000000 #错的,千万别用
* hard nproc 10000000 #错的,千万别用
* soft nproc 10000000 #错的,千万别用

于是对上述配置进行修改【去掉一个0】

cat /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
* hard nproc 10000000
* soft nproc 1000000

按Ctrl+D,执行reboot重启生效。

输入账户密码,成功登录。

至此,问题成功定位并解决。

总结

回看问题排查的过程,我们走了一些弯路。其实我们在尝试排错的时候,应该首先想到去查看日志,看一下具体报错内容。

补充

1、如果是账户密码错误 报错信息其实是 Login incorrect

centos7 mysql无法登录 centos7无法登陆_centos7 mysql无法登录_12

 2、在写下这篇总结的时候,我特意尝试去查询 nofile 能够设置的最大值究竟是多少,但是并没有查到结果。于是我尝试去测试这个值最大限度。经过多次尝试 发现 该值最大能设置为1000009,我推测nproc最大应该也是1000009。对此,我这种半路出家的门外汉真的是不清楚,如果有大佬了解这其中的缘由,还请能够在评论区给予解答。在此,非常感谢!