如何设置 Linux 登录失败次数限制防止暴力破解密码?

文章导读
防止暴力破解最稳妥的方式是结合 PAM 模块锁定策略与 SSH 连接限制,生产环境建议优先配置 pam_faillock 并保留应急登录通道。
📋 目录
  1. 1. 前置准备与备份
  2. 2. 配置 PAM 登录失败锁定
  3. 3. 配置 SSH 连接限制
  4. 4. 验证配置是否生效
  5. 5. 常见风险与回滚方案
A A

防止暴力破解最稳妥的方式是结合 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.bak

2. 配置 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 模块加载(关键)

如何设置 Linux 登录失败次数限制防止暴力破解密码?

若系统未默认启用,需手动编辑 `/etc/pam.d/system-auth` 和 `/etc/pam.d/password-auth`。在 auth 段落中添加或确认存在以下行:

vi /etc/pam.d/system-auth
auth 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 无输出则表示配置正确;若有报错,请立即还原备份文件。

如何设置 Linux 登录失败次数限制防止暴力破解密码?

4. 验证配置是否生效

1. 检查账户锁定状态

使用 faillock 命令查看指定用户的失败记录:

faillock `--user` 用户名

如果看到失败次数超过设定值,且显示锁定状态,说明配置生效。

2. 实际测试

打开一个新的终端窗口(不要关闭当前已登录的 root 会话),尝试使用错误密码登录该用户。连续失败达到设定次数后,再次尝试应被拒绝或提示账户锁定。

3. 查看日志

检查安全日志确认记录:

tail -f /var/log/secure
# 或 Ubuntu/Debian 系统
tail -f /var/log/auth.log

5. 常见风险与回滚方案

1. 把自己锁在外面

如何设置 Linux 登录失败次数限制防止暴力破解密码?

若不幸被锁且无控制台权限,需通过云服务商控制台重置密码或进入单用户模式修复。务必在操作前保留一个活跃会话。

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 sshd

4. 与 Fail2Ban 冲突

如果同时安装了 Fail2ban 等外部防护工具,需注意策略重叠。Fail2ban 是通过防火墙封禁 IP,PAM 是锁定账户,两者可共存,但日志分析可能变复杂。