centos控制台登录报错Permission-denied
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 | cat /etc/security/limits.conf |
报错截图:
出现上述问题,是因为在优化内核参数时数值过大
问题解决
进单用户模式将/etc/security/limits.conf 中的参数改为系统可承受的值,经过多次测验,最大可允许的数值为1000009。
问题发现及排查
问题发现
Centos系统部署完成,并进行系统内核调优,重启系统后,发现账户无法登录。确定输入的密码肯定正确,但是报错Permission denied。
解决
加载内核时按e键进入单用户模式
按方向键下键↓,找到设置语言的地方,如LANG=en\_US.UTF-8
,在后面追加rw single init=/bin/bash
,然后按ctrl+x
重启系统
进入后就出现此报错
修改内核参数为系统可以承受的范围
1 | cat /etc/security/limits.conf |
或修改为
1 | cat >> /etc/security/limits.conf <<EOF |
按Ctrl+D,执行reboot重启生效。
输入账户密码,成功登录。
至此,问题成功定位并解决。
输入exec /sbin/init
命令重启系统
参数解释:
以下是你提供的 /etc/security/limits.conf
配置的详细说明表格:
用户/组 | 类型 | 项目 | 限制值 | 说明 |
---|---|---|---|---|
* | soft | nofile | 1000000 | 每个进程可打开的最大文件数(软限制) |
* | hard | nofile | 1000000 | 每个进程可打开的最大文件数(硬限制) |
* | hard | nproc | 10000000 | 每个用户可创建的最大进程数(硬限制) |
* | soft | nproc | 1000000 | 每个用户可创建的最大进程数(软限制) |
/etc/security/limits.conf 设置内容解析
用户/组 | 类型 | 项目 | 限制值 | 说明 |
---|---|---|---|---|
* | - | nofile | 65535 | 所有用户最大可打开文件数(软硬限制都设置) |
* | - | nproc | 65535 | 所有用户最大可创建进程数(软硬限制都设置) |
root | - | nofile | 65535 | root 用户最大可打开文件数(软硬限制都设置) |
root | - | nproc | 65535 | root 用户最大可创建进程数(软硬限制都设置) |
注:
-
表示同时设置软限制(soft)和硬限制(hard)
1 | * hard nofile 1000000 |
- 含义:所有用户的 hard(硬限制) 的
nofile
为1000000
。 - 硬限制 是系统强制施加的上限,不能被非特权用户提升。
1 | * hard nproc 10000000 |
- 含义:所有用户的 硬限制 的
nproc
(每个用户能创建的最大进程数)为10000000
。
1 | * soft nproc 1000000 |
- 含义:所有用户的 软限制 的
nproc
为1000000
。
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 queues | POSIX 消息队列可用的最大内存 |
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
:最大进程数,影响用户能同时运行多少进程或线程。
你是在哪种场景下需要设这么高的 nofile
和 nproc
?是做高并发服务(如 Nginx、Redis、Kafka)还是 AI 模型计算类任务?
注意事项:
这些限制只会在使用 PAM 登录时生效(如 SSH、su、login 等)。
要让它生效,还要确保
/etc/pam.d/common-session
或/etc/pam.d/sshd
中有如下配置:1
2session required pam_limits.so
设置过高的值(比如
nproc
设到千万级)如果没有必要,可能导致系统资源耗尽或被滥用,建议根据实际情况设置。
你是为哪类应用或服务配置这么大的资源限制?