首页/系统/Linux 运维命令速查/pwquality 密码复杂度策略

pwquality 密码复杂度策略

pam_pwquality 控制口令复杂度(长度、字符类别、字典检查、重复限制),通过 /etc/security/pwquality.conf 与 PAM 生效。

Linux 运维命令速查系统更新于 2026-10-13

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 或真实改密验证一次。

易错点

  • 策略提升后存量弱密码不会自动失效,需配合 chage -d 0 强制全员改密
  • root 改自己密码可能提示复杂度校验失败:不同发行版对 root 的豁免策略不同,按报错逐项确认
  • credits 参数正负号写反,会得到与预期完全相反的严格要求或形同虚设的策略
  • pwquality 只在改密时校验,不参与登录认证:它管不住已经存在的老口令
  • 改了 pwquality.conf 但对 root 或特定服务账号无效,通常是 PAM 里对应分支没有引用该模块

数据来源与参考

  • man 8 pam_pwquality
  • man 5 pwquality.conf
  • RHEL 文档:配置密码质量策略

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌