首页/安全/安全加固速查/空口令账号核查(shadow 第二字段)
主机加固基线90 条

空口令账号核查(shadow 第二字段)

检查 /etc/shadow 第二字段为空的账号:空口令账号无需任何凭据即可登录,属于最危险的历史遗留问题,发现后必须立即设置口令或锁定。

安全加固速查安全更新于 2026-10-13

空口令为什么最危险

shadow 文件第二字段存放口令哈希:字段为空串表示该账号根本没有口令,任何人只要知道账号名就能直接登录,连猜口令这一步都省了。这不是理论风险,老设备、救援镜像、误操作留下的空口令账号长期存在,扫描器与蠕虫会直接识别并利用。锁定状态(字段以感叹号或星号开头)与空字段是两回事,必须分开判断。

基本信息

加固项禁止存在空口令账号
适用平台Linux(RHEL/CentOS/Debian/Ubuntu)
风险等级高
判定标准/etc/shadow 第二字段为空串即空口令
区分要点以感叹号或星号开头表示已锁定,不属于空口令

典型使用场景

  • 基线核查:给出「不存在空口令账号」的结论与证据
  • 接手存量机器时摸底:老系统里空口令账号出现概率明显更高
  • 应急响应排查:攻击者把账号口令清空以维持访问是常见手法
  • 批量整改前后的对照:整改前记录清单,整改后复核清零
  • 合规测评:身份鉴别条款明确要求不存在无口令账号

核查命令

核查命令
awk -F: '($2 == "") { print $1 }' /etc/shadow      # 空口令账号,预期无输出
awk -F: '($2 ~ /^[!*]/) { print $1 }' /etc/shadow | head   # 已锁定账号,属正常
passwd -S -a 2>/dev/null | head -30                 # P 有口令 L 锁定 NP 无口令可登录
awk -F: '($2 == "") { print $1 }' /etc/shadow | wc -l   # 空口令账号数量

shadow 第二字段判读

字段内容含义处置
空串无口令,可直接登录最高优先级,立即设置口令或锁定
感叹号开头口令被锁定正常,服务账号常见的状态
星号开头无有效哈希,不可登录正常,多为系统账号占位
美元符开头的哈希存在加密口令正常,继续核查强度与有效期
双感叹号从未设置过口令且已锁定确认该账号是否仍需交互登录

处置

处置
passwd someone          # 交互式设置强口令(推荐,立即生效)
passwd -l someone       # 或直接锁定,用于确认不再使用的账号
chage -l someone        # 查看口令有效期,确认策略是否覆盖该账号
awk -F: '($2 == "") { print $1 }' /etc/shadow   # 复核,应无输出
不要直接编辑 /etc/shadow,也不要用 echo 追加写入:文件被并发写坏会导致所有账号无法登录。统一用 passwd、usermod、chage 这类带锁机制的命令操作,改完立即复核。
passwd -S 的 NP 状态表示无口令可登录,比空字段更隐蔽,容易被只查字段的脚本漏掉;救援模式与部分容器基础镜像里 root 的字段是星号或感叹号,那属于锁定而非空口令,核查结论里要写清区分口径。

与口令策略联动

清空一个空口令账号只是止血。更完整的做法是同时确认三件事:口令复杂度策略已配置、失败锁定已启用、账号口令有效期已设置,并且存量账号也被 chage 覆盖到。否则清理完一批,下一批仍会因策略缺失而出现。

易错点

  • 把空字段与锁定状态混为一谈:前者无需凭据即可登录,核查脚本要把两种情形分开统计,否则结论失真
  • 直接编辑 shadow 或用重定向追加:并发写入可能损坏文件导致全员无法登录,必须使用专用命令
  • 只检查交互账号:服务账号若有空口令且带可登录 shell,等同于开放入口,需一并纳入清单
  • 只处理发现的那一个账号:应同时抽查全部账号的口令有效期与失败锁定策略,避免按下葫芦浮起瓢
  • 把容器或救援环境里的锁定字段误报成空口令:判断前先确认字段实际内容与所属环境

数据来源与参考

  • CIS Linux Benchmark:Ensure no accounts have empty password fields
  • shadow(5) 手册

相关工具

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