最直接的办法是运行 passwd -S username,输出第二字段为L表示锁定、P表示正常;需root权限查他人,Alpine等系统可能不支持-S;/etc/shadow中密码字段以!或*开头也表明锁定;chage -l可查过期式锁定;faillock --user可查PAM失败计数锁定。
用 passwd -S 看一眼就明白
最直接的办法就是运行 passwd -s username,输出里第二个字段就是锁定状态标识。比如显示 username l 03/15/2026 0 99999 7 -1,那个 l 就代表 locked;如果是 p,说明密码正常、账户可用。
注意:普通用户查自己可以不加 sudo,但查别人必须有 root 权限,否则会提示 Permission denied。另外,有些精简系统(如 Alpine)可能没装 passwd 的完整版,-S 选项不可用。
- 输出中字段顺序固定:用户名、状态码、上次改密日期、最小天数、最大天数、警告天数、不活动天数、过期日期
-
L和NP都表示锁定:NP是 “No Password”,常见于仅用于服务的账户(如www-data),它没设密码,也登不了录 - 别只看有没有报错——没报错但返回了
L,才是真被锁了
盯紧 /etc/shadow 密码字段的开头符号
/etc/shadow 是唯一权威来源,其他命令底层都读它。查 grep username /etc/shadow,重点看第二列(密码哈希字段):
如果以 ! 开头(如 !$6$abc...),账户被 usermod -L 锁定;如果以 * 开头(如 *LK* 或 *),一般是被 passwd -l 锁定,或手动编辑过 shadow 文件。
-
!和*效果一样:系统拒绝用密码认证,但 SSH 密钥、sudo 免密等其他机制仍可能生效(取决于 PAM 配置) - 别误把注释行当结果——
/etc/shadow里以#开头的是注释,不是用户记录 - 用
sudo查,否则普通用户无权读取该文件,会返回空或报错
用 chage -l 判断是否“过期式锁定”
chage -l username 不直接说“locked”,但它能暴露一种隐性锁定:账户过期(Account expires)或密码过期后未重置(Password inactive)。这两种情况都会导致登录失败,现象和锁定一模一样。
例如输出里出现 Account expires : Jan 01, 2025,而今天是 2026 年,那账户早就不可用了;又或者 Password inactive : 14 days after password expires,但用户一直没改密,也会进不去。
- 这个命令对 LDAP 或 NIS 用户无效,只适用于本地 shadow 账户
- 如果看到
Never却还是登不上,别在这儿耗时间——问题大概率出在 PAM、SSH 配置或 shell 被设为/sbin/nologin -
chage本身不修改状态,只是“读取器”,放心执行
别漏掉 PAM 登录失败计数导致的临时锁定
很多系统启用了 pam_faillock(取代老的 pam_tally2),账户可能没被管理员锁,而是被连续输错密码触发了自动锁定。这时候 passwd -S 和 /etc/shadow 都显示正常,但就是登不进去。
查这个得用 faillock --user username。如果有输出,且 Failures 不为 0,再看 Latest failure 时间——如果离现在很近,基本就是它干的。
- 解锁方式不是改 shadow,而是
faillock --user username --reset(需 root) - 有些发行版默认不启用 faillock,所以查不到输出 ≠ 没锁定,只是机制不同
- 这个锁定是按“认证尝试”计数的,包括 su、sudo -i、SSH 密码登录等,不光是 console login
passwd -S,再扫一眼 /etc/shadow 密码字段,三步看 chage -l,最后补一手 faillock --user。四条路径覆盖了所有常见锁定类型,但每条背后的机制完全不同——混淆它们,就会在错误的地方反复折腾。

















