首页/系统/信创系统运维速查/影子口令状态与哈希算法检查
安全加固65 条

影子口令状态与哈希算法检查

影子口令第二列承载锁定标记与哈希算法:! 与 !! 表示锁定、空字段表示无口令、$6$ 代表 SHA-512;巡检时抽样核对,处置用标准工具。

信创系统运维速查系统更新于 2026-10-13

shadow 第二列在说什么

/etc/shadow 每行是『账户:口令字段:时效字段…』。第二列承载两类信息:口令哈希与状态标记。以 $6$ 开头是 SHA-512 哈希,$5$ 是 SHA-256,$1$ 是较弱的 MD5;以 ! 或 !! 开头表示该账户被锁定;字段为空表示无口令。巡检时看这一列的形态就能判断账户是否存在弱口令或空口令风险。

基本信息

文件位置/etc/shadow(仅 root 可读)
字段结构账户:哈希与状态:最后修改:最短:最长:警告:宽限:失效
哈希标识$6$ SHA-512、$5$ SHA-256、$1$ MD5
锁定标记前缀 ! 或 !! 表示已锁定、无可用口令
空字段第二列为空表示该账户无口令即可登录
读取权限root;普通用户读取会提示权限不足

典型使用场景

  • 安全巡检时批量识别锁定账户与异常状态账户
  • 迎检前确认没有空口令账户
  • 排查登录失败时判断账户是被锁定还是口令过期
  • 确认系统账户(daemon、bin 等)处于锁定状态
  • 核对哈希算法是否已从弱算法升级

巡检命令(root)

巡检命令(root)
awk -F: '{print $1, substr($2,1,3)}' /etc/shadow | head -30    # 账户与哈希前缀
awk -F: '$2=="" {print "空口令账户:", $1}' /etc/shadow            # 找出无口令账户,重点关注
awk -F: '{print substr($2,1,3)}' /etc/shadow | sort | uniq -c | sort -rn   # 哈希与状态分布统计
awk -F: '$2 ~ /^\$/ {print $1}' /etc/shadow | wc -l               # 统计有哈希的账户数量
passwd -S root                                                   # 单账户状态(P 有口令、L 锁定、NP 无口令)

处置与核对

处置与核对
passwd -l olduser                  # 锁定账户(标准工具,会写入 ! 前缀)
passwd -u olduser                  # 解锁,仅在确认需要恢复时执行
usermod -L -s /sbin/nologin svcacct # 服务账户:锁定口令并禁止交互登录
awk -F: '$2 !~ /^[!*]/ && $2 != "" {print $1}' /etc/shadow   # 列出当前可用口令登录的账户
ls -l /etc/shadow /etc/passwd      # 确认文件权限与属主符合基线(shadow 应为 000 或 400)

字段形态与含义

第二列形态含义是否可登录
$6$开头的一长串SHA-512 哈希,账户可正常登录可以(口令正确即可)
!$6$…已锁定(passwd -l 写入)不可以
!! 或 *从未设置或系统账户占位不可以
空字段无口令,认证直接通过可以,最高风险项
$1$ 开头MD5 弱算法哈希可以,建议升级算法
锁定标记的语义随实现略有差异:! 与 !! 代表不同来源的锁定,判断时结合 passwd -S 的结果一起看,不要只看前缀。
变更账户状态统一用 passwd、usermod 这类标准工具,不要手工编辑 /etc/shadow:字段位置与格式一旦写错,登录相关的行为会变得难以预测。

易错点

  • 巡检只看得到前几行就下结论,深层系统账户的状态没看全,遗留空口令或弱算法账户
  • 第二列为空代表无口令可直接登录,这类账户若出现在人工账号上是严重风险,必须优先处置
  • 手工编辑 /etc/shadow 修改状态或哈希,字段错位后账户行为异常且难以回滚
  • 备份还原时把旧的 shadow 一并恢复,已被锁定的账户与新增的口令策略被旧状态覆盖
  • 只统计哈希前缀不结合 passwd -S,把已锁定的账户误判为可登录账户,徒增排查工作量

数据来源与参考

  • man 5 shadow
  • man 8 pam_unix
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌