直接在PAM配置文件中加载pam_pwquality.so并设minlen=12、dcredit=-1、ucredit=-1、lcredit=-1、ocredit=-1,才能强制密码12位且含四类字符;该模块必须以requisite类型置于password规则首位,否则策略不生效。

直接在 PAM 配置文件中加载 pam_pwquality.so 并设置关键参数,就能强制密码最小长度和四类字符要求。核心不是改 /etc/login.defs,而是让 PAM 模块真正接管校验——这个环节一旦漏掉或顺序错,策略就完全不生效。
确认模块已安装并启用
先检查系统是否具备该模块:
- 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 - 确认当前生效的是它而非旧版
pam_cracklib.so:grep -E 'pwquality|cracklib' /etc/pam.d/common-password
配置密码长度与四类字符强制要求
推荐统一通过 /etc/security/pwquality.conf 管理规则,避免在多个 PAM 文件里重复写参数。编辑该文件,写入:
-
minlen = 12:基础最小长度为 12 -
dcredit = -1:必须含至少 1 个数字 -
ucredit = -1:必须含至少 1 个大写字母 -
lcredit = -1:必须含至少 1 个小写字母 -
ocredit = -1:必须含至少 1 个特殊字符(如!@#$%)
注意:minlen 不是硬下限。如果用户只输大小写字母,缺数字和特殊字符,模块会自动把实际最低长度抬高到 14(12 + 2 类未满足),确保策略兜底。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
在 PAM 中正确加载模块
编辑对应 PAM 文件(Ubuntu/Debian 改 /etc/pam.d/common-password;RHEL/CentOS 改 /etc/pam.d/system-auth),添加这一行:
password requisite pam_pwquality.so retry=3 difok=5 maxrepeat=3 reject_username enforce_for_root
- 必须放在所有其他
password规则之前,且类型必须是requisite(失败立即终止) -
difok=5:新密码与旧密码至少 5 个字符不同,防简单递增(如Password123→Password124) -
maxrepeat=3:拒绝aaaa这类连续 4 个相同字符的密码 -
reject_username+enforce_for_root:连 root 用户设root@2026!也会被拦住
验证策略是否真正生效
别只看配置保存了就认为成功。实测最可靠:
- 用普通用户执行
passwd,尝试设Abc123!(12 位但缺一类字符)→ 应提示“Password is shorter than minlen”或“Password does not contain enough digits” - 用
pwscore工具打分:echo "MyPass123!" | pwscore,低于 50 分通常不达标 - 查日志确认拦截:
sudo grep 'pam_pwquality' /var/log/auth.log

















