linux pam密码强度实时检查通过password类模块(如pam_pwquality.so)在passwd等命令执行时即时校验,需配置requisite/required标记、正确参数及对应发行版模块,并验证各服务pam路径与安装状态。

Linux PAM 密码强度实时检查机制,核心在于用户修改密码的瞬间完成校验,不依赖后台扫描或定时任务。它通过在 password 类型的 PAM 配置中加载校验模块(如 pam_pwquality.so、pam_cracklib.so 或 pam_passwdqc.so),让系统在调用 passwd、chpasswd 或图形化账户工具时,自动触发规则比对和反馈。
关键模块与适用场景
不同模块定位略有差异,选型需结合系统版本和策略目标:
-
pam_pwquality.so:现代主流发行版(RHEL 8+/CentOS 8+、Ubuntu 20.04+)默认推荐,替代已弃用的
pam_cracklib;支持更细粒度控制(如相似度检测、Unicode 字符支持、拒绝旧密码变体) -
pam_cracklib.so:仍广泛用于较老系统(如 CentOS 7、Debian 10);依赖
cracklib库做字典比对,配置简洁但扩展性弱于pam_pwquality -
pam_passwdqc.so:适合强调“密码短语”策略的环境;强制使用多单词组合(如
correct-horse-battery-staple),可设最小单词数、禁止常见词、限制重复字符等
实时生效的配置要点
校验必须嵌入 password 类别且使用 requisite 或 required 控制标记,才能确保失败立即拦截:
- 配置文件通常为
/etc/pam.d/system-auth(RHEL/CentOS)或/etc/pam.d/common-password(Debian/Ubuntu) - 添加类似这一行:
password requisite pam_pwquality.so retry=3 minlen=12 difok=5 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 - 参数中负值(如
ucredit=-1)表示“至少含1个大写字母”,正值则表示“最多允许几个”,极易配错 - 避免在同一配置块中混用多个密码校验模块,否则可能因返回值冲突导致策略失效
验证是否真正实时生效
不能只看配置写入就认为成功,必须实测触发路径:
- 用普通用户执行
passwd,输入不符合规则的密码(如全数字、少于12位、缺特殊字符),应立刻报错并拒绝修改 - 使用
echo "user:newpass123!" | chpasswd测试批量场景,失败时命令退出码非零,且终端输出明确提示 - 运行
sudo cracklib-check (若装有 cracklib)或 <code>sudo pwscore (pam_pwquality 提供)查看评分,辅助调试
常见失效原因与规避方式
很多管理员配完发现“没起作用”,往往卡在这些环节:
- 改错了文件:图形界面(GDM/KDM)、SSH(sshd)、sudo 等服务可能读取独立 PAM 配置,需同步检查
/etc/pam.d/gdm-password、/etc/pam.d/sshd - 控制标记误用:
sufficient或optional无法中断流程,必须用requisite(失败即退)或required(全部执行后汇总判断) - 模块未安装:Ubuntu 需
sudo apt install libpam-pwquality,CentOS 需sudo yum install libpwquality - 历史密码限制未启用:如需防复用,要额外加
remember=5并确保/etc/security/opasswd可写











