企业级密码复杂度需正确选用pam_pwquality.so或pam_cracklib.so模块,确保唯一启用、置于pam_unix.so之前,配置minlen=12及四类字符强制(dcredit=-1等),并配套pam_pwhistory防重用、login.defs设有效期、pwscore验证得分≥50。

企业级密码复杂度不是改几个参数就行,关键在模块选对、位置放准、参数协同、全局覆盖。核心是用 pam_pwquality.so(RHEL 8+/Ubuntu 20.04+ 默认)或 pam_cracklib.so(旧系统),/etc/login.defs 中的 PASS_MIN_LEN 完全无效,别再碰它。
确认并清理 PAM 模块加载状态
先查清楚系统实际用哪个模块,避免混用导致策略静默失效:
- Debian/Ubuntu 执行:
grep -v '^#' /etc/pam.d/common-password | grep -E '(pwquality|cracklib)' - RHEL/CentOS 执行:
grep -v '^#' /etc/pam.d/system-auth | grep -E '(pwquality|cracklib)' - 如果两行都存在(比如既有 pwquality 又有 cracklib),删掉其中一个——PAM 不允许多个强度模块共存于同一 password 链路
- 没结果?说明模块未启用,需安装:Ubuntu 运行
sudo apt install libpwquality-tools,RHEL 运行sudo yum install libpwquality
配置强密码规则(推荐 minlen=12 + 四类字符强制)
在对应 PAM 文件中,插入到 pam_unix.so 行之前(否则会被跳过),使用 requisite 类型:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- Ubuntu/Debian(编辑
/etc/pam.d/common-password):password requisite pam_pwquality.so retry=3 minlen=12 difok=5 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=3 reject_username enforce_for_root - RHEL/CentOS(编辑
/etc/pam.d/system-auth):password requisite pam_pwquality.so retry=3 minlen=12 difok=5 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 maxrepeat=3 reject_username enforce_for_root - 注意:
minlen=12不是绝对下限——若你设了四类字符各至少 1 位,系统会动态计算“有效长度”,实际要求可能高于 12;maxrepeat=3禁止 aaaa 这类连续 4 相同字符;reject_username自动屏蔽含用户名或其反转的密码
配套加固:防重用、控周期、保一致
单靠复杂度不够,必须组合策略:
-
防密码循环重用:在同一个 PAM 文件中添加
password [default=ok] pam_pwhistory.so remember=24 use_authtok enforce_for_root
首次启用后手动创建空文件:sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd -
统一有效期与提醒:编辑
/etc/login.defs设置新用户默认值:PASS_MAX_DAYS 90PASS_WARN_AGE 7PASS_MIN_DAYS 1
已有用户用sudo chage -M 90 -W 7 -m 1 username单独更新 -
验证是否生效:普通用户运行
passwd,故意输Abc123!或username123,应被明确拒绝;也可用pwscore工具评分:echo "MyPass2026!" | pwscore(分值 ≥ 50 才算合格)
不复杂但容易忽略:所有改动无需重启服务,passwd 命令实时触发校验。重点就是模块唯一、位置靠前、参数负值表“强制”、配套策略闭环。










