这条命令在查什么
空口令账号是最容易被自动化扫描识别的高危状态:shadow 第二字段为空串意味着无需任何凭据即可登录。这条核查同时回答两件事:有没有空口令账号,以及每个账号当前处于什么口令状态。第二条信息常被忽略,但「无口令可登录」这个状态比空字段更隐蔽,必须逐行看完。
基本信息
| 加固项 | 口令状态核查 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 高 |
| 判读 | 空字段等于空口令;L 表示锁定;NP 表示无口令可登录 |
| 检查范围 | /etc/shadow 全部账号,含系统账号 |
典型使用场景
- 交付核查:一次给出「无空口令账号」的结论与原始输出
- 存量摸底:接手老系统与自建设备时优先跑这一条
- 应急响应:攻击者清空口令以维持访问是常见手法,属必查项
- 整改复核:处置完空口令账号后重跑确认清零
- 周期巡检:纳入固定检查脚本,与口令策略核查一并执行
核查命令
核查命令
awk -F: '($2 == "") { print $1 " EMPTY!" }' /etc/shadow # 空口令,预期无输出
awk -F: '($2 ~ /^!|^\*/) { print $1 " locked" }' /etc/shadow | head # 已锁定,正常
passwd -S -a 2>/dev/null | head -30 # 人类可读的账号状态清单
passwd -S -a 2>/dev/null | awk '$2 == "NP" { print $1 }' # 直接筛出无口令账号状态码读法
| 状态 | 含义 | 处置 |
|---|---|---|
| P | 存在可用口令 | 正常,继续看有效期与强度 |
| L | 口令已锁定 | 正常,服务账号常见 |
| NP | 无口令,可直接登录 | 高危,立即设置口令或锁定 |
| 空字段 | shadow 第二列为空 | 最高优先级处置项 |
| PS 等其他取值 | 部分发行版的额外状态字 | 以本机 passwd 手册为准,避免误判 |
服务账号(daemon、bin 等)用感叹号或星号锁定属正常,交互账号出现空的第二字段必须立即处置。区分口径要写进报告,否则同一个输出在不同人手里会得出相反结论。
awk 里匹配星号要转义,写成裸星号含义完全不同,会匹配到意外内容;NP 状态比空字段更隐蔽,只查字段的脚本会漏掉,逐行看完再用状态筛选交叉验证。
与相邻条目联动
这条命令的结论很少单独使用:空口令要结合 shadow 权限(是否还有人能取走哈希)、口令策略(新口令是否受约束)、失败锁定(能否被暴力尝试)一起看。四项都达标才算口令这条线收口,只清掉空口令账号属于止血而非整改。