pam_tally2已被弃用,必须迁移到pam_faillock以满足合规要求并提升可靠性;需检查配置、停用旧模块、按序添加新规则、迁移计数状态并验证行为一致性。

Linux 系统中,pam_tally2 已被正式弃用(自 systemd 240+ 和多数主流发行版 PAM 模块更新后),不再维护,存在功能缺失和兼容性风险。迁移到 pam_faillock 不仅是合规要求(如 CIS、RHEL SSP),更是提升账户锁定机制可靠性与可审计性的必要步骤。
确认当前使用的是 pam_tally2
检查系统是否仍在依赖 pam_tally2:
- 运行
grep -r "pam_tally2" /etc/pam.d/,查看是否有配置行(如auth [default=bad success=ok user_unknown=ignore] pam_tally2.so ...) - 检查是否存在遗留计数文件:
ls -l /var/log/tallylog(pam_faillock默认使用/var/run/faillock/下的独立文件) - 注意:某些旧脚本或自定义策略可能仍调用
pam_tally2 --user xxx,需一并识别
停用 pam_tally2 并启用 pam_faillock 的最小安全配置
以 RHEL/CentOS 8+ 或 Debian 11+ 为例,在 /etc/pam.d/common-auth(Debian)或 /etc/pam.d/system-auth(RHEL)中:
- 注释或删除所有含
pam_tally2.so的行 - 添加两行(顺序关键):
auth [default=bad success=ok user_unknown=ignore] pam_faillock.so preauth silent deny=5 unlock_time=900 fail_interval=60 auth [default=die] pam_faillock.so authfail deny=5 unlock_time=900 fail_interval=60
- 说明:
deny=5表示 5 次失败后锁定;unlock_time=900(秒)为自动解锁时长;fail_interval=60要求连续失败在 60 秒内才计入同一窗口——防止慢速暴力试探
迁移失败计数状态(可选但推荐)
pam_faillock 不兼容 /var/log/tallylog,原有计数不会自动继承。若需保留历史失败记录:
- 手动导出旧计数:
cut -d: -f1 /var/log/tallylog | xargs -I{} pam_tally2 --user {} --show 2>/dev/null | grep -E '^\w+.*[0-9]+$' - 对每个已超限用户,用
pam_faillock --user username --lock主动锁定 - 清空旧 tallylog:
truncate -s 0 /var/log/tallylog(确保无服务仍在写入) - 后续统一通过
pam_faillock --user xxx --reset或--unlock管理
验证与日常运维要点
迁移后必须验证行为一致性:
- 用错误密码反复登录某用户(如
ssh -o ConnectTimeout=5 fake@localhost),观察第 5 次后是否拒绝认证(Authentication failure),且pam_faillock --user xxx --info显示Failures: 5和Lock currently held - 确认 root 用户是否受控:默认
pam_faillock对 root 生效,如需排除,加even_deny_root或root_unlock参数控制 - 日志位置:
pam_faillock事件记录在/var/log/secure(RHEL)或/var/log/auth.log(Debian),关键词为pam_faillock
迁移本身不复杂,但容易忽略模块加载顺序、fail_interval 语义变化和 root 特殊处理。一次干净切换,能避免未来因 PAM 升级导致认证链中断。










