linux中pam_pwquality.so模块需正确安装、配置pwquality.conf、在pam文件中以requisite类型前置加载,才能在passwd时实时强制执行密码强度规则。

Linux 系统中使用 pam_pwquality.so 模块校验密码强度,关键不是改配置文件就完事,而是让模块真正介入 passwd 流程并严格执行规则。它不依赖 /etc/login.defs 的 PASS_MIN_LEN,也不靠命令行工具本身判断——所有校验由 PAM 在用户执行 passwd 时实时完成。
确认模块已安装且可用
先验证系统是否具备该模块:
- RHEL/CentOS/Fedora:运行
ls /lib64/security/pam_pwquality.so,若无则执行sudo dnf install libpwquality - Debian/Ubuntu:运行
ls /lib/x86_64-linux-gnu/security/pam_pwquality.so,若无则执行sudo apt install libpam-pwquality - 检查是否被旧模块覆盖:
grep -E 'pwquality|cracklib' /etc/pam.d/common-password,确保没残留pam_cracklib.so
集中配置密码规则(推荐方式)
把策略统一写进 /etc/security/pwquality.conf,避免在多个 PAM 文件里重复定义:
-
minlen = 12:基础最小长度为 12,但实际生效长度会动态抬高(如缺一类字符,自动+1) -
dcredit = -1:必须含至少 1 个数字 -
ucredit = -1:必须含至少 1 个大写字母 -
lcredit = -1:必须含至少 1 个小写字母 -
ocredit = -1:必须含至少 1 个特殊字符(如!@#$%) -
difok = 5:新旧密码至少 5 个字符不同 -
maxrepeat = 3:禁止连续 4 个及以上相同字符(aaaa被拒) -
reject_username = 1:密码不能包含用户名或其反转 -
enforce_for_root = 1:root 用户也受全部规则约束
在 PAM 中正确加载模块
仅配 pwquality.conf 不生效,必须在对应 PAM 文件中显式调用:
- Debian/Ubuntu:编辑
/etc/pam.d/common-password,在所有password行最前面插入:password requisite pam_pwquality.so retry=3 - RHEL/CentOS:编辑
/etc/pam.d/system-auth或/etc/pam.d/password-auth,同样在password段靠前位置添加上述行 - 类型必须是
requisite,且必须位于pam_unix.so等其他 password 模块之前,否则会被跳过
验证规则是否真实起效
别只看配置保存了就认为成功,要实测:
- 用普通用户执行
passwd,尝试设Abc123!(12 位但缺大写字母)→ 应提示类似Password is shorter than或no uppercase letters - 设
admin123!(含用户名)→ 应被拒绝 - 设
aaaaaa123ABC!(含连续 6 个 a)→ 应提示too many characters of the same class - 用
pwscore工具评分:echo "MyPass2026!" | pwscore,得分低于 50 通常表示不合规











