Linux pam_tally2 的遗留迁移到 pam_faillock 的安全路径

1次阅读

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

Linux 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/tallylogpam_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: 5Lock currently held
  • 确认 root 用户是否受控:默认 pam_faillock 对 root 生效,如需排除,加 even_deny_rootroot_unlock 参数控制
  • 日志位置:pam_faillock 事件记录在 /var/log/secure(RHEL)或 /var/log/auth.log(Debian),关键词为 pam_faillock

迁移本身不复杂,但容易忽略模块加载顺序、fail_interval 语义变化和 root 特殊处理。一次干净切换,能避免未来因 PAM 升级导致认证链中断。

text=ZqhQzanResources