Linux账户锁定策略需手动配置PAM模块,核心是按序添加三行auth规则和一行account规则到对应PAM文件,并通过faillock命令管理状态。

Linux 账户锁定策略不是开箱即用的功能,必须手动配置 PAM 模块才能生效。全局设置影响所有启用 PAM 认证的登录方式(如本地 tty、SSH、图形界面),而局部设置可针对特定服务(如仅 SSH)或特定用户做差异化控制。关键在于理解“全局由 PAM 配置文件决定,局部靠条件判断和模块参数实现”这一逻辑。
全局锁定:统一配置 PAM 主配置文件
全局策略通过修改发行版对应的主 PAM 认证文件实现,所有调用该文件的服务自动继承规则:
- Debian/Ubuntu 系统编辑 /etc/pam.d/common-auth
- RHEL/CentOS/Rocky/AlmaLinux 编辑 /etc/pam.d/system-auth 或 /etc/pam.d/password-auth
- 三行 auth 规则必须严格按顺序添加在文件开头附近:
auth [default=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
auth [default=ok] pam_faillock.so authsucc
这三行分别完成预检、失败计数与成功清零,缺一不可。同时必须添加一行 account 规则:
account required pam_faillock.so
否则锁定状态不会被校验,策略形同虚设。
局部锁定:按服务或用户精细化控制
全局配置生效后,可通过以下方式做局部调整:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- 仅限 SSH 生效:在 /etc/pam.d/sshd 中单独添加上述三行(推荐),避免影响 console 登录;若已全局配置且 sshd 引用了 password-auth,则无需重复
-
跳过特定用户:在 pam_faillock.so 行末加 silent,再配合 pam_succeed_if.so 判断,例如:
auth [success=1 default=ignore] pam_succeed_if.so user in root:backup:nginx
auth [default=ignore] pam_faillock.so preauth silent ... - 允许 root 被锁或豁免:默认 root 不计入失败统计;加 even_deny_root 可启用锁定;加 deny_root 显式禁用(不推荐)
状态管理与例外处理
锁定状态独立存储于 /var/run/faillock/,重启不丢失,与 /etc/shadow 无关:
- 查状态:faillock --user username
- 单用户解锁:faillock --user username --reset
- 临时锁定某用户(绕过失败次数):faillock --user username --lock
- 对已停用的服务账号(如 nginx、redis),建议直接改 shell 为 /usr/sbin/nologin,从源头禁止交互登录
验证与日志定位
配置后务必验证,避免误锁运维账户:
- 用非 root 账户连续输错密码,第 5 次后应拒绝登录,并确认 faillock --user xxx 输出含 “Lock currently held”
- 检查日志:/var/log/auth.log(Debian系)或 /var/log/secure(RHEL系),搜索 Authentication failure 和 pam_faillock
- 等待 unlock_time 后重试,确认自动恢复;切换其他账户验证互不影响

















