linux运维中禁止弱密码需启用pam_pwquality.so语义检查:开启gecoscheck=1比对gecos字段,配置reject_username识别用户名变体,添加badwords自定义黑名单,并通过auth.log和pwscore验证生效。

在 Linux 运维中,禁止用户设置包含个人信息的弱密码,核心是通过 pam_pwquality.so 模块启用语义级检查,而非仅靠长度或字符类型。关键在于识别并拦截用户名、全名(GECOS 字段)、主机名等明文信息嵌入密码的行为。
启用 GECOS 信息比对(防姓名/工号入密)
系统默认不检查用户描述信息(如 /etc/passwd 中的 GECOS 字段),需显式开启:
- 编辑 /etc/security/pwquality.conf,添加或取消注释:
gecoscheck = 1 - 该参数会将密码与用户的全名、办公室号、电话等 GECOS 字段逐词比对(忽略大小写和空格)
- 例如:用户
zhangsan的 GECOS 是Zhang San,Room 201,555-0123,则zhangsan2024、san123、room201!均被拒绝
禁用用户名及变体(含反转、大小写混排)
仅靠简单匹配不够,必须启用智能识别:
- 在 PAM 配置中确保启用 reject_username 参数:
例如在 /etc/pam.d/common-password 中:
password requisite pam_pwquality.so retry=3 reject_username - 该选项不仅比对原始用户名,还会自动检测:
— 用户名反转(nasgnahz)
— 去掉数字或下划线后的子串(zhang、san)
— 大小写混合形式(ZhangSan、zHaNgSaN)
屏蔽常见个人信息关键词(自定义禁用词表)
针对企业统一信息(如公司名、部门缩写、项目代号),需维护专属黑名单:
- 在 /etc/security/pwquality.conf 中添加:
badwords = companyabc hrdept projectx2026 - 支持空格分隔多个词,匹配时忽略大小写和部分连续字符(如
companyabc2024也会被拦截) - 修改后无需重启服务,下次
passwd即生效
验证是否真正生效
配置完成后务必实测,避免策略未加载或被其他模块覆盖:
- 用测试账户尝试设置含个人信息的密码:
passwd testuser→ 输入testuser123!或HRdept@2026 - 查看失败原因:
sudo tail -n 10 /var/log/auth.log | grep 'pam_pwquality'
正常应输出类似 "Password contains the user's name" 或 "Password contains prohibited word" - 使用工具快速评分:
echo "zhangsan2024" | pwscore—— 得分低于 25 通常表示被规则拦截











