linux默认不启用账户锁定,必须通过pam手动配置pam_faillock.so模块,在对应配置文件auth段开头严格按序添加三行规则:preauth silent、authfail、authsucc,并设置deny、unlock_time和fail_interval参数,再用faillock命令管理状态。

直接在 PAM 配置文件中添加三行 pam_faillock.so 规则即可实现——这是当前主流发行版(RHEL 8+/CentOS Stream/Ubuntu 22.04+/Debian 12+)的官方推荐方式,比已废弃的 pam_tally2 更可靠、功能更完整。
确认系统使用的锁定模块
先检查是否已启用 pam_faillock:
grep -r "pam_faillock" /etc/pam.d/
如果有输出(如出现在 system-auth 或 common-auth 中),说明已在使用;若无输出,则需手动配置。不建议混用 pam_tally2 和 pam_faillock,避免策略冲突。
编辑对应 PAM 配置文件
根据你的系统选择文件:
- Ubuntu/Debian:编辑
/etc/pam.d/common-auth - RHEL/CentOS/AlmaLinux:编辑
/etc/pam.d/system-auth - 兼顾 SSH 登录:也可统一配在
/etc/pam.d/password-auth(推荐)
在文件 auth 段开头附近 插入以下三行(顺序不可颠倒):
auth [default=ignore] pam_faillock.so preauth silent deny=3 unlock_time=600 fail_interval=600 auth [default=die] pam_faillock.so authfail deny=3 unlock_time=600 fail_interval=600 auth [default=ok] pam_faillock.so authsucc
参数说明:
-
deny=3:600 秒(10 分钟)内输错 3 次即触发锁定 -
unlock_time=600:锁定持续 600 秒(10 分钟),超时后自动解锁 -
fail_interval=600:仅统计最近 10 分钟内的失败记录,过期计数自动清零 -
silent:登录失败时不提示“账户被锁”,提升安全性
验证与管理锁定状态
配置保存后无需重启服务,立即生效(新登录会话即适用):
- 查看用户失败记录:
faillock --user username - 手动重置某用户计数(如测试后解锁):
faillock --user username --reset - 临时锁定某用户(绕过输错):
faillock --user username --lock - 强制解锁已被锁用户:
faillock --user username --unlock
注意:该策略默认对 root 用户同样生效。如需排除 root,可加 even_deny_root 参数控制,但生产环境一般建议一视同仁。
补充提醒
配置前建议:
- 确保你有其他可用的管理员登录途径(如另一 tty、console 或已有 root 会话),避免把自己锁在外面
- 先用普通用户测试,确认行为符合预期再应用到 root 或关键账户
- 日志记录在
/var/log/secure或/var/log/auth.log,可通过journalctl -u sshd查看实时认证事件











