Linux密码必须含大小写字母、数字和特殊字符的核心是配置pam_pwquality.so模块,设dcredit=-1、ucredit=-1、lcredit=-1、ocredit=-1,并确保其以requisite类型置于PAM password栈开头,/etc/login.defs中PASS_MIN_LEN无效。

Linux 运维中配置密码必须含大小写字母、数字和特殊字符,核心是启用并正确配置 pam_pwquality.so 模块(现代系统默认)或 pam_cracklib.so(旧系统),不是改 /etc/login.defs 中的 PASS_MIN_LEN——那个参数在 PAM 启用后完全无效。
确认并启用 pam_pwquality 模块
先检查系统是否已安装对应包:
- RHEL/CentOS/Fedora:运行
yum install libpwquality或dnf install libpwquality - Ubuntu/Debian:运行
apt install libpwquality-tools
然后编辑对应 PAM 配置文件:
- RHEL/CentOS/方德等:修改
/etc/pam.d/system-auth - Ubuntu/Debian:修改
/etc/pam.d/common-password
在文件中找到或添加这一行(放在其他 password 行之前,且不要与 pam_cracklib.so 共存):
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1
注意:minlen=12 是建议值,实际最小长度还受字符类型分布影响;四个 credit 参数为负数,表示“至少包含”。
字符类型参数含义要记准
这四个关键参数控制字符组成,必须全设为负值才能强制四类都出现:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
dcredit=-1:至少 1 个数字(0–9) -
ucredit=-1:至少 1 个大写字母(A–Z) -
lcredit=-1:至少 1 个小写字母(a–z) -
ocredit=-1:至少 1 个特殊字符(如!@#$%^&*等)
如果只设其中三个为负数,系统就只要求满足三类;设四个为负,才真正实现“四要素齐全”。
推荐补充增强项
加几项能进一步提升策略健壮性:
-
difok=5:新密码至少 5 个字符与旧密码不同(防微调绕过) -
maxrepeat=3:禁止连续 4 个相同字符(如aaaa被拒) -
reject_username:禁止密码中包含用户名或其反转 -
enforce_for_root:对 root 用户同样生效
完整示例:
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=5 maxrepeat=3 reject_username enforce_for_root
验证是否生效
别只看配置文件,一定要实测:
- 用普通用户执行
passwd,尝试输一个纯字母密码(如Abcdefgh123),应被拒绝并提示缺少数字或特殊字符 - 输一个含四类但长度不足的密码(如
A1!),也应被拒 - 查看日志确认:失败记录会出现在
/var/log/auth.log(Debian系)或/var/log/secure(RHEL系)中
若不生效,优先排查:是否误加了 pam_cracklib.so 行造成冲突;是否写在了错误的 PAM 堆栈位置(必须在 password 段,且 requisite 优先级高);是否忘记重启相关服务(通常无需重启,passwd 命令立即生效)。

















