一眼判断是pam_faillock锁的:passwd -s username显示第二列为ps(非lk),faillock --user username有带时间戳和ip的非空输出,日志含pam_faillock记录,登录提示“account lockout due to too many failed logins”。

直接用 faillock --user username --reset,但必须先确认是 pam_faillock 锁的,不是 passwd -l 或 /sbin/nologin 锁的——三者互不兼容,搞错就白操作。
怎么一眼判断是防爆破策略(pam_faillock)锁的?
防爆破锁定是动态计数型的,只在用户输错密码达到阈值后自动触发,和手动锁账户完全无关。关键特征如下:
- 执行
passwd -S username输出第二列为PS(不是LK),说明密码本身没被禁用 - 执行
faillock --user username有非空输出,含时间戳和 IP,例如:2026-09-30 14:22:05 UTC 192.168.1.100 - 登录时提示类似
Account lockout due to too many failed logins或直接拒绝,但不报密码错误 -
/var/log/secure或/var/log/auth.log里有pam_faillock相关记录,比如user unknown or account locked
为什么 passwd -u 对这种锁完全无效?
passwd -u 只处理 /etc/shadow 中密码字段带 !! 前缀的情况,而 pam_faillock 根本不碰 shadow 文件——它把失败记录存在 /var/run/faillock/username(内存文件)或 /var/log/faillog(旧版)。所以:
-
passwd -u username执行后,faillock --user username仍显示计数,登录照样被拒 -
usermod -U同理,只是重置 shadow 字段,对 pam_faillock 的状态零影响 - 真正有效的只有
faillock --user username --reset(或pam_tally2 --user username --reset,仅限老系统)
解锁前必须检查 PAM 配置是否真在生效
有些系统虽然装了 pam_faillock.so,但配置文件里没启用,或者规则顺序写错了,导致“锁了也像没锁”。排查要点:
- 确认配置位置:
RHEL/CentOS看/etc/pam.d/system-auth,Debian/Ubuntu看/etc/pam.d/common-auth - 搜索是否存在三行关键规则(顺序不能乱):
auth [default=ignore] pam_faillock.so preauth ...auth [default=die] pam_faillock.so authfail ...auth [default=ok] pam_faillock.so authsucc - 如果只看到
pam_tally2相关行,说明用的是旧模块,该用pam_tally2 --user username --reset - 如果配置被注释或路径写错(如
pam_faillock.so拼成pam_faillock),faillock命令能运行,但实际不生效
root 被锁住又没其他管理员账号怎么办?
这是最棘手的真实场景:SSH 连不上,faillock 命令用不了,连 su 都被拦在门外。此时唯一可靠路径是进单用户模式:
- 重启服务器,在 GRUB 菜单按
e编辑启动项 - 找到以
linux开头的行,在末尾加rd.break(RHEL/CentOS)或init=/bin/bash(多数 Debian/Ubuntu) - 按
Ctrl+X启动,挂载根分区为可写:mount -o remount,rw /sysroot,然后chroot /sysroot - 执行
faillock --user root --reset;若命令不存在,改用passwd -u root(防爆破锁失效时 fallback) - 退出 chroot,执行
exec /sbin/init正常启动
注意:faillock 在单用户模式下可能因缺少 PAM 上下文而报错,这时别硬试,优先确认 root 是否被 passwd -l 锁了——查 /etc/shadow 里 root 行开头是不是 !!,是就直接 passwd -u root。











