需结合密码策略检查、强度验证和弱口令比对三方面识别弱密码账号:检查pam_pwquality启用状态及pwquality.conf配置;导出UID≥1000账号哈希并用john离线爆破;筛空密码、用户名同密码、永不过期等高危账号。

在Linux系统中识别当前存在弱密码的账号,需要结合密码策略检查、密码强度验证和已知弱口令比对三方面操作,不能仅依赖单一命令得出结论。
确认系统是否启用PAM密码强度校验
执行 grep -r "pam_pwquality" /etc/pam.d/,若返回空结果,说明系统未强制密码复杂度要求,所有新设密码都可能为弱密码。
检查 /etc/security/pwquality.conf 文件是否存在且非空:若该文件缺失或其中 minlen 小于8、minclass 小于3,【当前策略无法阻止弱密码设置】。
提取所有非系统账号的密码哈希并离线检测
第一步:导出非系统账号列表(UID ≥1000)及其密码哈希字段:awk -F: '$3>=1000 && $2!~/^\*|!$/ {print $1 ":" $2}' /etc/shadow > userhash.txt
第二步:使用john工具进行弱密码爆破(需提前安装john):john --wordlist=/usr/share/wordlists/rockyou.txt --format=sha512crypt userhash.txt
注意:此操作必须在离线环境运行,且【不可在生产服务器直接执行,会触发PAM锁定或日志告警】;输出结果中显示“1 password hash cracked”即代表对应账号使用了字典内弱密码。
快速筛查明文可猜解的账号(无需破解)
方法一:检查密码为空的账号awk -F: '$2=="" {print $1}' /etc/shadow
方法二:检查密码与用户名完全相同的账号(需临时启用shell登录验证)
对每个非空密码账号,用 su -c 'echo test' - $USER 并输入用户名作为密码尝试,成功即判定为弱密码。
方法三:用chage批量查看密码过期状态chage -l $(cut -d: -f1 /etc/passwd | grep -E '^[a-z]') 2>/dev/null | awk '/Password expires|Never/{if(/Never/)print $1}'——输出用户名表示其密码永不过期,长期未改易成弱密码目标。


















