linux系统默认不启用账号锁定,必须通过pam手动配置pam_faillock.so模块并添加三行顺序严格的auth规则(preauth、authfail、authsucc)和一行account required规则,再配合faillock命令管理状态,才能实现60秒内输错5次即锁、15分钟自动解锁的防护机制。

Linux系统默认不启用账号锁定,必须通过PAM模块手动配置才能实现自动防护与可控解封。核心是用pam_faillock.so设失败阈值,再配合faillock命令做状态管理,两者缺一不可。
配置自动锁定策略(PAM三行规则)
编辑对应PAM文件(Debian/Ubuntu用/etc/pam.d/common-auth,RHEL/CentOS用/etc/pam.d/system-auth),在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
参数含义:deny=5表示60秒内连续输错5次即触发锁定;unlock_time=900为15分钟自动解锁时长;fail_interval=60定义“连续失败”的时间窗口。三行顺序不可交换,否则逻辑失效。
启用账户状态检查(关键一步)
仅加auth规则还不够,必须启用account层检查,否则锁定不生效。在同一个PAM文件中添加:
account required pam_faillock.so
该行确保每次登录前校验用户是否处于锁定状态。若遗漏,即使失败次数达标,用户仍可正常登录。
手动应急解封操作流程
被锁后不能靠“输对密码”恢复,必须先判断锁定类型再选命令:
- 查状态:
sudo passwd -S username—— 第二列为LK说明是passwd -l手动锁;为PS但登录失败,则大概率是PAM自动锁 - PAM自动锁(新版系统):
sudo faillock --user username --reset立即清空计数并解锁 - 手动锁(
passwd -l):sudo passwd -u username还原shadow密码字段 - Shell禁用导致无法登录:
sudo usermod -s /bin/bash username恢复标准shell
所有操作均需root权限,普通用户无权执行。
验证与日志追踪
配置完成后务必实测,避免误锁自己:
- 用非root账户反复输错密码,第5次后应拒绝登录
- 运行
sudo faillock --user username确认输出含“Lock currently held”及失败时间戳 - 检查
/var/log/auth.log(Debian)或/var/log/secure(RHEL),搜索pam_faillock或Authentication failure条目 - 等待15分钟后重试,验证是否自动恢复
锁定状态文件存于/var/run/faillock/(部分系统为/run/faillock/),重启不丢失。











