防止暴力破解最稳妥的方式是结合 PAM 模块锁定策略与 SSH 连接限制,生产环境建议优先配置 pam_faillock 并保留应急登录通道。
先说结论:Linux 默认允许无限次密码尝试,需通过 PAM 模块或 SSH 配置主动限制,但务必先确认系统版本避免配置失效。
- 先判断:确认系统是 RHEL 8/CentOS 8 以上还是旧版本,决定用 pam_faillock 还是 pam_tally2。
- 优先做:修改 PAM 配置文件设置失败锁定阈值,同时调整 sshd_config 限制单次连接尝试次数。
- 再验证:使用错误密码测试账户是否被锁,并确认 root 或应急账户未被误锁。
1. 前置准备与备份
在修改任何认证相关文件前,务必备份,防止配置错误导致无法登录。重要:操作期间请保持至少一个已登录的 root 会话不要关闭,并确保拥有控制台(VNC/物理机)访问权限,以防 SSH 配置错误导致被锁在外面。
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
cp /etc/pam.d/password-auth /etc/pam.d/password-auth.bak
cp /etc/security/faillock.conf /etc/security/faillock.conf.bak
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak2. 配置 PAM 登录失败锁定
现代发行版(如 CentOS 8/RHEL 8/Ubuntu 20.04+)通常使用 pam_faillock 模块。仅修改配置文件可能无效,需确保 PAM 栈已加载对应模块。
步骤 1:编辑全局配置文件
编辑 `/etc/security/faillock.conf`,确保以下行未被注释:
vi /etc/security/faillock.conf调整参数(数值根据安全策略调整):
deny = 5
unlock_time = 900
fail_interval = 900说明:deny 为允许失败次数,unlock_time 为锁定秒数,fail_interval 为计数时间窗口。
步骤 2:确认 PAM 模块加载(关键)
若系统未默认启用,需手动编辑 `/etc/pam.d/system-auth` 和 `/etc/pam.d/password-auth`。在 auth 段落中添加或确认存在以下行:
vi /etc/pam.d/system-authauth required pam_faillock.so preauth silent deny=5 unlock_time=900
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900
auth sufficient pam_faillock.so authsucc deny=5 unlock_time=900注意:旧系统(如 CentOS 7)可能使用 pam_tally2,该模块在新系统中已废弃,请勿混用。
3. 配置 SSH 连接限制
编辑 SSH 服务端配置,限制单次连接内的尝试次数,增加暴力破解难度。
vi /etc/ssh/sshd_config找到或添加 MaxAuthTries,建议设置为 3 到 6 之间:
MaxAuthTries 4步骤 3:语法检查与重启(防锁死)
重启前必须验证配置语法,防止服务启动失败导致无法远程连接:
sshd -t && systemctl restart sshd若 sshd -t 无输出则表示配置正确;若有报错,请立即还原备份文件。
4. 验证配置是否生效
1. 检查账户锁定状态
使用 faillock 命令查看指定用户的失败记录:
faillock `--user` 用户名如果看到失败次数超过设定值,且显示锁定状态,说明配置生效。
2. 实际测试
打开一个新的终端窗口(不要关闭当前已登录的 root 会话),尝试使用错误密码登录该用户。连续失败达到设定次数后,再次尝试应被拒绝或提示账户锁定。
3. 查看日志
检查安全日志确认记录:
tail -f /var/log/secure
# 或 Ubuntu/Debian 系统
tail -f /var/log/auth.log5. 常见风险与回滚方案
1. 把自己锁在外面
若不幸被锁且无控制台权限,需通过云服务商控制台重置密码或进入单用户模式修复。务必在操作前保留一个活跃会话。
2. Root 账户被锁
部分配置默认也会对 root 生效。建议通过 even_deny_root 参数谨慎控制,或确保有另一个 sudo 用户可用。
3. 配置回滚
若修改后出现异常,立即使用备份文件还原:
cp /etc/pam.d/system-auth.bak /etc/pam.d/system-auth
cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
systemctl restart sshd4. 与 Fail2Ban 冲突
如果同时安装了 Fail2ban 等外部防护工具,需注意策略重叠。Fail2ban 是通过防火墙封禁 IP,PAM 是锁定账户,两者可共存,但日志分析可能变复杂。