CentOS 7 配置用户资源限制(nofile / nproc)
目标:
- 提升文件句柄数(nofile)
- 提升进程数(nproc)
- 避免启用 UsePAM 后"密码正确却登录失败"的坑
一、临时生效(立即生效,无需重启服务)
使用 prlimit 强制修改当前 Shell
适合:
- 立即排障
- 临时调优
- 不想重启服务
bash
prlimit --pid $$ --nofile=65535:65535 --nproc=65535:65535
参数说明
--pid $$:当前 Shell 进程nofile:最大文件句柄数nproc:最大进程数
验证
bash
ulimit -n
输出应为:
text
65535
⚠️ 注意 :
该方式 仅对当前 Shell 有效,重新登录即失效。
二、永久生效(推荐生产环境使用)
1️⃣ 修改 limits.conf
bash
vim /etc/security/limits.conf
追加:
ini
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
2️⃣ 启用 PAM(关键步骤)
编辑 SSH 配置:
bash
vim /etc/ssh/sshd_config
确保存在并且未注释:
ini
UsePAM yes
PasswordAuthentication yes
修改后重启 SSH:
bash
systemctl restart sshd
三、【非常关键】否则会出现"密码正确但登录失败"
很多人卡在这里
👉 只开了
UsePAM yes,但 PAM 认证链不完整
必须正确配置 /etc/pam.d/sshd
直接覆盖(最稳妥方式):
bash
cat > /etc/pam.d/sshd <<'EOF'
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# ★ 关键:资源限制生效必须有它
session required pam_limits.so
EOF
⭐ 核心点说明
pam_limits.so
👉 没有这一行,limits.conf 完全不生效password-auth
👉 决定"密码是否正确"的真正模块- 缺失或顺序错误
👉 100% 导致密码登录失败
四、验证是否真正生效(一定要重新登录)
⚠️ 重要 :
已登录的 SSH 会话 不会继承新 limits
新开一个 SSH 会话后执行:
bash
ulimit -n
ulimit -u
期望输出:
text
65535
五、常见故障自检(备用)
1️⃣ 检查 sshd 实际配置
bash
sshd -T | egrep 'usepam|passwordauthentication'
2️⃣ 查看认证失败原因
bash
tail -n 50 /var/log/secure
3️⃣ 用户是否被 PAM 锁定
bash
pam_tally2 --user 用户名
解锁:
bash
pam_tally2 --user 用户名 --reset
六、一句话总结(给以后自己看的)
- 临时调试 :
prlimit- 永久生效 :
limits.conf + pam_limits.so- UsePAM yes 必须配合完整 PAM 文件
- 否则就是"密码正确但登录失败"