pwquality 是什么
pam_pwquality 是 PAM 里负责口令复杂度的模块,底层是 libpwquality。它在用户设置或修改密码时校验新口令:长度够不够、包含几类字符、有没有连续重复、是不是字典词、是否包含用户名等。策略集中在 /etc/security/pwquality.conf,但真正让它生效的是各发行版 PAM 栈里的 pam_pwquality.so 那一行。
基本信息
| 适用平台 | Linux(RHEL 系默认启用;Debian/Ubuntu 为 libpam-pwquality) |
|---|---|
| 配置文件 | /etc/security/pwquality.conf |
| 生效位置 | PAM 配置:RHEL 系 /etc/pam.d/system-auth 与 password-auth,Debian 系 /etc/pam.d/common-password |
| 常用参数 | minlen 最小长度 minclass 最少字符类别数 dcredit ucredit lcredit ocredit 各类字符要求 maxrepeat 最大重复 dictcheck 字典检查 usercheck 是否允许含用户名 |
| 验证工具 | pwscore 本地评分、pwmake 生成合规口令(属 libpwquality 工具) |
典型使用场景
- 合规要求落地:按等保或内部规范设定最小长度与字符类别
- 提升口令质量:开启字典检查与重复限制,挡住常见弱口令
- 自助改密前自测:用 pwscore 先给口令打分,避免反复被拒
- 排查「改不了密码」:确认是策略拒绝还是 PAM 配置本身有问题
- 与有效期策略配合:pwquality 管强度,login.defs 与 chage 管期限
配置示例
配置示例
# /etc/security/pwquality.conf
minlen = 12 # 最小长度
minclass = 3 # 至少包含 3 类字符
dcredit = -1 # 负值表示「至少要有 1 个数字」
ucredit = -1 # 至少 1 个大写字母
lcredit = -1 # 至少 1 个小写字母
ocredit = -1 # 至少 1 个特殊字符
maxrepeat = 3 # 同一字符最多连续重复 3 次
maxclassrepeat = 4 # 同一类字符最多连续 4 个
dictcheck = 1 # 启用字典词检查
usercheck = 1 # 检查是否包含用户名验证与排查
验证与排查
grep -i pwquality /etc/pam.d/system-auth /etc/pam.d/common-password 2>/dev/null
pwscore <<< 'Test12345' # 本地评分,看分数与拒绝原因
pwmake 14 # 生成一个 14 位的合规口令
passwd deploy # 实际改密,触发完整策略链常用参数读法
| 参数 | 含义 | 注意 |
|---|---|---|
| minlen | 新口令的最小长度 | 部分发行版会按字符类别给长度加成 |
| minclass | 必须包含的字符类别数量 | 类别通常按大写、小写、数字、特殊符号划分 |
| dcredit 与 ocredit | 数字与特殊字符的要求 | 负值表示「至少几个」,正值表示「最多计入几个加分」 |
| maxrepeat | 同一字符最多连续出现次数 | 限制 aaaaaa 这类口令 |
| dictcheck | 是否做字典词检查 | 需要系统提供字典文件 |
| usercheck | 是否禁止口令包含用户名 | 防止 username2026 这类可猜口令 |
| enforcing | 是否强制执行 | 设为 0 时只告警不拒绝,适合灰度验证 |
RHEL 系把策略写在 /etc/security/pwquality.conf,并在 pam.d/system-auth 与 password-auth 里引用模块;Debian/Ubuntu 模块来自 libpam-pwquality,引用点在 common-password。改 PAM 之前先留一个 root 会话,改完立即用另一个窗口验证改密可用,避免把自己锁在外面。
credits 类参数的正负号含义容易记反:负值表示「该类字符至少要有这么多个」,正值表示「该类字符最多提供这么多加分」。写反会让策略变得要么形同虚设,要么严苛到没人能改成功,改完务必用 pwscore 或真实改密验证一次。