首页/安全/应急响应速查/检查 /etc/shadow 空口令与锁定状态

检查 /etc/shadow 空口令与锁定状态

/etc/shadow 第二字段是口令哈希:为空即空口令可直接登录,感叹号或星号表示锁定,异常哈希格式同样要警觉。

应急响应速查安全更新于 2026-10-13

shadow 空口令与锁定状态检查

口令哈希存放在 /etc/shadow,每一行第二个字段就是关键信息:为空表示该账号不需要口令即可登录;以感叹号或星号开头表示口令被禁用或不接受口令认证;以美元符号开头则是各类加密算法的哈希。把这三类区分清楚,就能在账号排查时快速找出「看起来禁用了、实际还能用」的账号——尤其要留意星号,它只是不接受口令认证,账号本身仍可被密钥登录。

基本信息

文件与权限/etc/shadow,通常为 600 且属主 root:shadow,普通用户不可读
第二字段含义空表示无口令;感叹号或星号表示禁用;美元符号开头为哈希
哈希前缀$1$ MD5、$5$ SHA-256、$6$ SHA-512、$y$ yescrypt 等
检查方式按冒号分列过滤第二字段;passwd -S 查看单个账号状态
权限要求读取需 root;修改必须通过 passwd、usermod 等命令
对比线索Debian 系可用 /etc/shadow- 上一版备份做差异比对

典型使用场景

  • 排查存在空口令的账号,这是最直接的登录风险
  • 确认后门账号是否配置了口令、口令是新设还是历史遗留
  • 核对系统账号是否处于不可登录状态
  • 清理账号后验证其口令确实已失效
  • 做合规检查时确认没有可密码登录的高权限账号

找空口令与锁定状态

找空口令与锁定状态
sudo awk -F: '($2=="") {print $1, "空口令"}' /etc/shadow          # 空口令账号
sudo awk -F: '($2 ~ /^[!*]/) {print $1, "已禁用/不接受口令"}' /etc/shadow | head -n 20
sudo awk -F: 'length($2)>0 && $2 !~ /^[!*]/ {print $1, substr($2,1,3)}' /etc/shadow | head -n 20   # 哈希算法
sudo passwd -S root; sudo passwd -S 某个账号                        # 单账号状态
sudo ls -l --time-style=full-iso /etc/shadow /etc/shadow-           # 改动时间与备份对比
sudo diff /etc/shadow- /etc/shadow 2>/dev/null | head -n 20         # Debian 系看差异行

第二字段读法

取值含义风险提示
为空不需要口令即可登录最高风险,等同于公开入口
以 ! 开头账号口令被锁定常见于系统账号,但仍可被其他方式登录
以 * 开头不接受口令认证并非万能锁:配置了公钥仍可登录
$1$MD5 口令哈希算法过旧,建议升级为更强的哈希
$5$ 或 $6$SHA-256 或 SHA-512 哈希较新的常见取值
$y$yescrypt 哈希部分新发行版的默认算法
不要手工编辑 shadow 文件:格式或字段顺序写错会导致账号无法登录,甚至整个认证体系异常。修改口令与锁定状态一律使用 passwd、usermod、chage 这类命令,并保留改动前的备份。
不同发行版对锁定记号的语义略有差异:判断某个账号是否真的无法登录,最好用 passwd -S 的输出确认,而不是只看字段第一个字符,避免把「不接受口令」误当作「完全不可登录」。

易错点

  • 把星号一律当安全状态:星号只是不接受口令认证,配置了公钥仍然可以登录
  • 直接编辑 shadow 文件改密:容易破坏格式导致认证异常,应使用标准命令
  • 只查空口令不看哈希算法:使用过旧算法的账号在口令被抓取后更容易被破解
  • 忽略备份文件:/etc/shadow- 与 /etc/passwd- 能直接暴露改动行,是快速定位后门的捷径
  • 检查完不做验证:变更后应确认目标账号确实无法再登录,并记录验证结果

数据来源与参考

  • shadow(5) 手册
  • CIS 基准:无空口令账号

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌