linux默认不启用输错密码自动锁定,必须通过pam手动配置pam_faillock.so模块,严格按序添加三行auth规则(preauth、authfail、authsucc)和一行account required规则,并用faillock命令管理状态。

Linux 默认不启用输错密码自动锁定,必须通过 PAM 模块手动配置 pam_faillock.so 才能生效。核心是三行顺序固定的 auth 规则 + 一行 account 检查,并配合 faillock 命令管理状态。
确认模块支持并选择配置文件
先检查系统是否已启用新标准模块:
- 运行
grep -r "pam_faillock" /etc/pam.d/,若无输出,说明需从头配置 - Debian/Ubuntu 系统编辑
/etc/pam.d/common-auth - RHEL/CentOS/Rocky 8+ 或 Fedora 编辑
/etc/pam.d/system-auth或/etc/pam.d/password-auth - 如需同时覆盖 SSH、图形登录和本地终端,推荐改
password-auth(因其被多个服务引用)
添加四行关键 PAM 规则(顺序不可调)
在所选文件的 auth 段开头附近,严格按以下顺序插入:
auth [default=ignore] pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=60auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=60auth [default=ok] pam_faillock.so authsucc-
必须补上这行:
account required pam_faillock.so
参数说明:deny=5 表示 60 秒内连续输错 5 次即锁;unlock_time=900 即 15 分钟后自动解锁;fail_interval=60 定义“连续失败”的时间窗口。漏掉 account 行会导致锁定完全不生效。
验证与应急解封操作
配置后立即测试,避免自身被锁:
- 用非 root 账户反复输错密码,第 5 次应直接拒绝登录
- 查状态:
sudo faillock --user username,看到Lock currently held和时间戳即成功 - 手动解锁(PAM 自动锁):
sudo faillock --user username --reset - 若显示
LK(如passwd -S username输出第二列为 LK),则是passwd -l手动锁,需用sudo passwd -u username解锁 - 日志位置:
/var/log/auth.log(Debian系)或/var/log/secure(RHEL系),搜索pam_faillock或Authentication failure
注意事项与常见误区
配置不是一劳永逸,几个关键点容易出错:
- 规则必须加在
auth段**开头附近**,靠后可能被其他模块绕过 - 不要混用
pam_tally2.so(旧模块,RHEL 8+/Debian 12+ 已弃用),否则冲突失效 - 锁定状态保存在
/run/faillock/(或/var/run/faillock/),重启不丢失 - SSH 登录、图形界面、本地 tty 都要生效?确保修改的是被它们共同引用的文件(如
password-auth) - 测试时别用当前 SSH 会话直接输错——建议开新终端或用另一用户测试











