Linux密码合规审计需三方面验证:策略启用(检查PAM配置与pwquality.conf)、策略遵守(chage/awk批量检测+人工抽检)、自动化报告(Shell脚本+John爆破测试),并闭环加固与监控。

Linux系统账户密码的强一致性校验与合规性审计,核心在于结合系统配置、密码策略执行、用户实际密码状态三方面进行验证,而非仅依赖单一工具或命令。重点是确认“策略已启用”、“策略被遵守”、“违规账户可定位可修复”。
一、检查PAM密码策略是否启用并生效
大多数Linux发行版(如RHEL/CentOS 7+/Ubuntu 18.04+)使用pam_pwquality.so(旧版为pam_cracklib.so)控制密码复杂度。需确认以下三点:
- 检查/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS)中是否包含有效行,例如:
password requisite pam_pwquality.so retry=3 minlen=12 difok=4 maxrepeat=2 reject_username dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 - 确认/etc/security/pwquality.conf中参数未被注释且值合理(如minlen = 12、dcredit = -1等),避免PAM配置与conf文件冲突
- 运行pam_pwquality --test --verbose手动测试策略是否解析正常(需安装libpwquality-utils包)
二、批量验证现有账户是否符合当前策略
策略启用≠所有用户密码已达标。需识别“策略生效后新设/修改的密码”是否合规,以及“历史遗留弱口令”是否仍存在:
- 用chage -l username查看各账户密码过期时间、最近修改时间,筛选出长期未更新(如>90天)的账户重点审计
- 借助awk -F: '$2 != "*" && $2 != "!" {print $1}' /etc/shadow提取有密码哈希的活跃账户,再用sudo passwd -S username确认其密码状态(LCK? NP? PS?)
- 对高权限账户(root、sudo组、关键服务账号)执行人工抽检:尝试用openssl rand -base64 12生成合规随机密码并sudo passwd username测试是否被策略拒绝——若能设成简单密码,说明策略未生效
三、自动化合规审计与报告生成
人工检查难以覆盖全量账户,建议用脚本定期扫描并输出合规报告:
- 编写Shell脚本遍历/etc/passwd中uid≥1000的普通用户,调用passwd -S和chage -l采集字段,判断是否满足:
• 密码已设置(非NP/!/*)
• 最近修改距今≤90天
• 密码最长有效期≤180天
• 无密码永不过期(max_days ≠ 99999) - 集成john --wordlist=/usr/share/wordlists/rockyou.txt --rules --stdout | head -n 10000 | sudo john --stdin /etc/shadow(需离线环境)快速爆破测试TOP 10弱口令账户(仅用于审计,禁止生产环境直接运行)
- 输出CSV报告含:用户名、UID、密码状态、最后修改时间、到期时间、是否合规、风险等级,供安全团队复核
四、加固与持续监控建议
审计不是终点,需闭环管理:
- 对不合规账户,通过sudo chage -M 180 -m 7 -W 7 username强制设置密码策略,并通知用户限期重置
- 在/etc/pam.d/common-password中添加password [success=1 default=ignore] pam_succeed_if.so user ingroup nopasswdlogin排除特定免密组,避免误伤
- 将密码策略检查脚本加入cron每日执行,异常结果邮件告警;同时开启auditctl -w /etc/shadow -p wa -k password_change监控敏感文件变更

















