存量口令抽查
口令策略落到基线之后,还要能一键抽查存量现状:哪些账号永不过期、哪些长期未改密、哪些仍然是弱口令。抽查的价值在于发现策略之外的历史遗留——策略改好了,老账号并不会自动合规。弱口令自查应在本地用自建字典做碰撞,字典文件用完即删,避免自己留下可疑文件。
基本信息
| 适用平台 | Linux |
|---|---|
| 风险等级 | 中 |
| 基线要求 | 无永不过期账号、无弱口令 |
| 核查文件 | /etc/shadow 与 /etc/passwd |
| 相关工具 | pwscore、chage |
典型使用场景
- 等保测评前的口令策略抽查
- 排查口令永不过期的账号
- 定位长期未改密的账号
- 用自建字典做弱口令碰撞自查
- 与服务账号清单核对时效设置
- 生成可直接留档的抽查结果
永不过期与超期账号
永不过期与超期账号
awk -F: '($1!="root") && ($5==""||$5=="-1"||$5==99999) {print $1}' /etc/shadow # $5 为最大天数列
awk -F: '$5 < 90 && $5 != "" {print $1, $5}' /etc/shadow # 有效期短于 90 天的账号
chage -l <账号> # 单个账号的时效详情
awk -F: '($3>=1000 && $3<65534) {print $1}' /etc/passwd # 普通用户账号清单弱口令自查(仅限本机)
弱口令自查(仅限本机)
for p in $(cat /etc/security/wordlist.check); do echo "$p" | pwscore >/dev/null 2>&1 || echo "weak: $p"; done # 逐条与自建字典碰撞
rm -f /etc/security/wordlist.check # 用完立即删除字典文件检查项与判读
| 检查项 | 含义 | 判读 |
|---|---|---|
| shadow 最大天数列 | 口令有效期设置 | 空值与 99999 表示永不过期 |
| 最近改密日期 | 上次修改口令的时间 | 长期未改需要关注 |
| 账号有效期 | 是否设置了整体到期 | 与前一项配合看 |
| 弱口令碰撞结果 | 字典中命中的口令 | 命中即需要立即更换 |
| 抽查记录 | 本次核查的结论 | 留档用于合规举证 |
等保测评现场常查 root 与管理员账号的口令策略与更换记录:把抽查脚本和结果一起留档最省事。
自定义字典不要以明文常用口令清单的形式长期留在服务器上:用完即删,避免给自己留下可疑文件。
pwscore 来自 pwquality 工具包:极简系统上先确认命令存在,否则脚本会静默失败,看起来一切正常其实什么都没查。