挡住可预测的口令
在长度与字符类别这些基础要求之外,pam_pwquality 的进阶参数能拦住一整类可预测口令:difok 要求新口令与旧口令有足够差异,maxrepeat 与 maxclassrepeat 限制重复字符,gecoscheck 检查口令是否包含用户姓名等信息。这些参数针对的正是“用自己的名字加年份”这类最普遍的习惯,比单纯提高长度要求更有效。
基本信息
| 适用平台 | Linux(pam_pwquality.so,RHEL/Debian 系通用) |
|---|---|
| 配置文件 | /etc/security/pwquality.conf 及 pwquality.conf.d 片段 |
| 进阶参数 | difok、maxrepeat、maxclassrepeat、gecoscheck、usercheck、dictcheck |
| 验证工具 | pwscore、pam_pwquality 的调试输出 |
| 风险等级 | 低 |
典型使用场景
- 弱口令治理:减少可猜解口令在组织内的比例
- 合规整改:等保对口令复杂度与定期更换有明确要求
- 改密场景:结合 difok 避免新旧口令高度相似
- 域外主机:无目录服务时用本地参数保证口令强度
- 离线评估:用 pwscore 先验证参数阈值是否合理
推荐参数与验证
推荐参数与验证
# /etc/security/pwquality.conf
# difok = 5 新口令与旧口令至少 5 个字符不同
# maxrepeat = 2 同一字符最多连续出现 2 次
# maxclassrepeat = 4 同一字符类最多连续出现 4 次
# gecoscheck = 1 禁止包含 GECOS 字段片段
# usercheck = 1 禁止包含用户名
# dictcheck = 1 拒绝字典词
echo 'Company@2026' | pwscore # 离线打分,返回 0-100 与失败原因
sudo pam-auth-update --enable pwquality # Debian 系启用
sudo authselect select sssd with-pwquality # RHEL 8+ 以特性方式启用参数读法
| 参数 | 作用 | 常见问题 |
|---|---|---|
| difok | 新旧口令差异字符数 | 数值过大时用户抱怨难以记住,取 3-5 折中 |
| maxrepeat | 单字符连续重复上限 | 设为 1 过于严格,2 是常用值 |
| maxclassrepeat | 同类字符连续上限 | 防止键盘顺序串与重复模式 |
| gecoscheck | 禁止包含姓名等信息 | 需要在账号中填写准确的 GECOS |
| dictcheck | 字典词拦截 | 需依赖 cracklib 字典包,精简系统可能缺失 |
gecoscheck 检查的是 GECOS 字段(姓名、电话等)片段:用户用自己的姓名当口令是最普遍的弱口令来源,这一项性价比很高。
落地要点
- 先备份 /etc/pam.d 与 pwquality 配置,再调整参数
- 参数变更后实测一次:新建或修改口令流程走通,并确认弱口令被拒
- difok 对 root 改他人密码的场景可能不生效,必要时用 enforce_for_root 加固
- dictcheck 需字典支持,精简镜像里要确认 cracklib 相关包已安装
- 把参数与口令策略文档同步更新,避免文件与文档不一致
参数过严会催生用户把口令写在便签上:强度要求要配合培训与密码管理器使用建议,而不是一味加码。