centos7账户名和密码都正确-却怎么都登录失败

参考:https://wn.zznnwn.cloudns.biz/2023/08/09/ubuntu18-04%E9%80%9A%E7%94%A8%E5%88%9D%E5%A7%8B%E5%8C%96/

问题概述及解决

问题描述

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

优化内核内容为:

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

报错截图:

出现上述问题,是因为在优化内核参数时数值过大

问题解决

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

问题发现及排查

问题发现

Centos系统部署完成,并进行系统内核调优,重启系统后,发现账户无法登录。确定输入的密码肯定正确,但是报错Permission denied。

解决

加载内核时按e键进入单用户模式

按方向键下键↓,找到设置语言的地方,如LANG=en\_US.UTF-8,在后面追加rw single init=/bin/bash,然后按ctrl+x重启系统

进入后就出现此报错

修改内核参数为系统可以承受的范围

1
2
3
4
5
6
cat /etc/security/limits.conf
* soft nofile 1000000
* hard nofile 1000000
* hard nproc 10000000
* soft nproc 1000000

或修改为

1
2
3
4
5
6
7
8
9
cat >> /etc/security/limits.conf <<EOF
* - nofile 65535
* - nproc 65535
root - nofile 65535
root - nproc 65535
EOF

ulimit -HSn 65535
ulimit -a

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

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

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

输入exec /sbin/init命令重启系统

参数解释:

以下是你提供的 /etc/security/limits.conf 配置的详细说明表格:

用户/组类型项目限制值说明
*softnofile1000000每个进程可打开的最大文件数(软限制)
*hardnofile1000000每个进程可打开的最大文件数(硬限制)
*hardnproc10000000每个用户可创建的最大进程数(硬限制)
*softnproc1000000每个用户可创建的最大进程数(软限制)

/etc/security/limits.conf 设置内容解析

用户/组类型项目限制值说明
*-nofile65535所有用户最大可打开文件数(软硬限制都设置)
*-nproc65535所有用户最大可创建进程数(软硬限制都设置)
root-nofile65535root 用户最大可打开文件数(软硬限制都设置)
root-nproc65535root 用户最大可创建进程数(软硬限制都设置)

注:- 表示同时设置软限制(soft)和硬限制(hard)

1
* hard nofile 1000000
  • 含义:所有用户的 hard(硬限制)nofile1000000
  • 硬限制 是系统强制施加的上限,不能被非特权用户提升。
1
* hard nproc 10000000
  • 含义:所有用户的 硬限制nproc(每个用户能创建的最大进程数)为 10000000
1
2
* soft nproc 1000000

  • 含义:所有用户的 软限制nproc1000000

Shell 命令解析

命令作用说明
ulimit -HSn 65535设置当前 shell 会话的文件描述符软硬限制为 65535
ulimit -a查看当前 shell 会话的所有资源限制

ulimit -a 输出参数解释表(含常见字段)

以下是 ulimit -a 可能输出的项目及含义(具体输出会因系统而异):

参数名称说明
core file size生成 core dump 文件的最大大小(单位 blocks)
data seg size数据段的最大大小(进程可用的数据空间)
scheduling priority进程调度优先级
file size单个文件的最大可写入大小
open files (nofile)每个进程最大可打开的文件描述符数
pipe size管道缓冲区大小
POSIX message queuesPOSIX 消息队列可用的最大内存
real-time priority实时调度策略的优先级
stack size线程栈大小限制
cpu time单个进程可使用的 CPU 时间限制(单位秒)
max user processes (nproc)每个用户允许的最大进程数(包括线程)
virtual memory可用的虚拟内存总量(地址空间)
locked-in-memory size允许锁定到 RAM 的内存最大值

补充说明

  • * 表示对所有用户生效。
  • soft(软限制)可以由用户自己临时提高到 hard 限值以下。
  • hard(硬限制)是系统施加的最大限制,不能被非 root 用户提高。
  • nofile:最大文件描述符数量,影响网络连接、文件打开等。
  • nproc:最大进程数,影响用户能同时运行多少进程或线程。

你是在哪种场景下需要设这么高的 nofilenproc?是做高并发服务(如 Nginx、Redis、Kafka)还是 AI 模型计算类任务?

注意事项:

  1. 这些限制只会在使用 PAM 登录时生效(如 SSH、su、login 等)。

  2. 要让它生效,还要确保 /etc/pam.d/common-session/etc/pam.d/sshd 中有如下配置:

    1
    2
    session required pam_limits.so

  3. 设置过高的值(比如 nproc 设到千万级)如果没有必要,可能导致系统资源耗尽或被滥用,建议根据实际情况设置。

你是为哪类应用或服务配置这么大的资源限制?