密码过期、账户锁定、pam失败计数超限、/etc/shadow中!!或*标记、account expires过期均会导致正确密码也无法登录,需用chage -l、passwd -s、faillock/pam_tally2、grep /etc/shadow等命令直查策略源头。

密码策略太严,常让正确密码也登不进去。问题不在输错,而在系统主动拒绝——比如过期、锁定、超限、禁用或账户失效。排查要直奔策略源头,而不是反复重设密码。
查密码状态和过期时间
用 chage -l username 查完整生命周期:密码上次修改日、最大有效期、宽限期、账户到期日。重点看两行:
- Password expires:如果日期已过,密码实际失效,输入再对也进不去
- Account expires:若显示具体日期且已过,整个账户被系统停用
快速验证是否过期,可运行 passwd -S username,输出中若含 Password expired 或状态为 LK(locked),就是策略拦截了登录。
看 shadow 文件里的“静默开关”
/etc/shadow 第二字段不是密码本身,而是策略执行器:
- !!:密码被锁定(如用 passwd -l 执行),即使密码对也不认证
- *:密码被禁用,认证直接跳过,返回失败
- 正常哈希值(如 $6$...)才表示密码可用
别只信 passwd 提示“修改成功”,它只管写哈希,不管字段前缀。用 sudo grep ^username /etc/shadow 直接看原始字段最准。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
检查 PAM 登录失败锁定机制
连续输错触发的锁定,不会提示“已锁定”,只报“Authentication failure”。用对应命令确认:
- 新系统(RHEL/CentOS 7+、Ubuntu 18.04+):pam_faillock --user username --show,看 Failures count 和 fail_lock 是否为 yes
- 旧系统(CentOS 6):pam_tally2 --user username,非零计数即被锁
注意:root 默认可能不受锁定保护,普通用户登不上但 root 还能进,往往说明是 PAM 的普通账户策略生效了。
核对 SSH 服务是否绕过了密码策略
即使本地控制台能登录,SSH 却失败,很可能是 sshd 绕过了部分策略或加了额外限制:
- 检查 /etc/ssh/sshd_config:确保 PasswordAuthentication yes 且未被注释
- 确认 PermitRootLogin 设置符合当前需求(yes/no/prohibit-password)
- 查看 /etc/pam.d/sshd 是否加载了 pam_securetty.so 或 pam_time.so 等模块,它们可能按终端类型或时间段限制登录
改完配置记得 sudo systemctl restart sshd,不要只 reload,避免策略未完全生效。










