应使用pam_faillock.so:centos/rhel 7.6+、ubuntu 20.04+、debian 11+已弃用pam_tally2,需通过grep和find确认模块存在性,配置5次失败锁定15分钟须在auth段开头添加三行规则,并包含account required pam_faillock.so。

确认该用 pam_tally2 还是 pam_faillock
别直接改配置——先看系统版本和模块存在性。CentOS/RHEL 7.6+、Ubuntu 20.04+、Debian 11+ 已弃用 pam_tally2.so,强制使用 pam_faillock.so;老系统(如 CentOS 6、Ubuntu 16.04)才可能还依赖 pam_tally2。
执行这两条命令快速判断:
-
grep -r "pam_faillock" /etc/pam.d/:有输出说明系统已启用或支持pam_faillock -
find /lib* -name "pam_faillock.so":有路径返回即模块可用
两个都无结果?再查 pam_tally2:ls /lib/security/pam_tally2.so(Debian/Ubuntu)或 ls /lib64/security/pam_tally2.so(RHEL/CentOS)。没这个文件就别硬配 pam_tally2,直接切 pam_faillock。
用 pam_faillock 配置“5次失败锁定15分钟”
这是当前主流方案,规则必须加在 PAM 配置文件的 auth 段开头,顺序错或位置靠后会导致失效。
根据发行版选主配置文件:
- Ubuntu/Debian:编辑
/etc/pam.d/common-auth - RHEL/CentOS/Alma/Rocky:编辑
/etc/pam.d/system-auth
在文件顶部空白处插入以下三行(注意换行,不可合并):
auth [default=ignore] pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=600 auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=600 account required pam_faillock.so
关键参数说明:
-
deny=5:5 次失败触发锁定 -
unlock_time=900:锁定 900 秒(15 分钟),超时自动解锁 -
fail_interval=600:只统计最近 10 分钟内的失败记录,避免历史误操作累积 -
preauth silent:静默计数,不向用户暴露“还剩几次”的提示 -
account required:必须存在,否则锁定逻辑不生效
改完保存即可,sshd 或 login 不需要重启。
用 pam_tally2 配置“5次失败锁定15分钟”(仅限老系统)
仅当确认系统仍支持 pam_tally2 且无法升级时使用。配置同样要加在 /etc/pam.d/system-auth(RHEL系)或 /etc/pam.d/common-auth(Debian系)的 auth 和 account 段开头。
添加两行:
auth [default=1 success=ok user_unknown=ignore] pam_tally2.so onerr=fail deny=5 unlock_time=900 even_deny_root account required pam_tally2.so
注意点:
-
onerr=fail:模块出错时拒绝认证,增强安全性 -
even_deny_root:root 用户也受限制,生产环境慎用;如需跳过 root,删掉此项即可 -
account required pam_tally2.so这一行不能少,否则账户阶段不检查计数,等于没锁
计数文件是二进制的 /var/log/tallylog,不可手动编辑。
验证和日常管理命令别漏掉
配置完立刻测试,但别登出当前会话——用新终端对非 root 用户反复输错密码,观察第 5 次是否被拒。
常用命令:
- 查某用户失败记录:
faillock --user username(pam_faillock)或pam_tally2 --user=username(pam_tally2) - 清空指定用户计数:
faillock --user username --reset或pam_tally2 --user=username --reset - 临时禁用锁定(调试用):
faillock --set-locktime=0
最容易被忽略的是 account required pam_faillock.so 这一行——很多人只加了 auth 规则,忘了 account 检查,结果策略形同虚设。另外,fail_interval 和 unlock_time 单位都是秒,写错成分钟会导致策略完全失灵。











