Linux强化密码策略核心是pam_pwquality.so以requisite类型在PAM password流程中靠前加载,并通过pwquality.conf设minlen=12及四类字符各-1等参数,辅以login.defs有效期和pam_pwhistory.so历史限制。

Linux 系统中强化密码策略,核心不是改 /etc/login.defs,而是让 pam_pwquality.so 模块在 PAM 的 password 流程中真正接管校验——它必须以 requisite 类型加载,且位置靠前,否则策略形同虚设。
确认并启用 pam_pwquality 模块
该模块是现代系统(RHEL 8+/Ubuntu 20.04+)的默认密码强度校验工具,已取代老旧的 pam_cracklib.so:
- 检查是否存在:RHEL/CentOS 运行
ls /lib64/security/pam_pwquality.so;Debian/Ubuntu 运行ls /lib/x86_64-linux-gnu/security/pam_pwquality.so - 若缺失,安装对应包:
sudo dnf install libpwquality(RHEL/Fedora)或sudo apt install libpam-pwquality(Debian/Ubuntu) - 确认当前生效的是它而非
pam_cracklib:grep -E 'pwquality|cracklib' /etc/pam.d/common-password(Ubuntu)或/etc/pam.d/system-auth(RHEL)
集中配置密码复杂度规则
推荐统一使用 /etc/security/pwquality.conf 管理参数,避免在多个 PAM 文件中重复写参:
-
minlen = 12:基础最小长度为 12,但实际最低长度会动态抬高(例如缺数字和特殊字符,就自动变为 14) -
dcredit = -1、ucredit = -1、lcredit = -1、ocredit = -1:分别强制至少 1 个数字、大写字母、小写字母、特殊字符(如!@#$%) -
difok = 5:新旧密码至少 5 个字符不同,防简单递增(如Password123 → Password124) -
maxrepeat = 3:拒绝连续 4 个及以上相同字符(aaaa被拒,aaabbb允许) -
reject_username = 1:禁止密码含用户名或其大小写反转(如用户名admin,则admin123或321nimda均被拦)
在 PAM 中正确注入并确保生效
仅配 pwquality.conf 不起作用,必须在密码修改流程中显式调用模块:
- Ubuntu/Debian:编辑
/etc/pam.d/common-password,在所有其他password行之前插入:password requisite pam_pwquality.so retry=3 enforce_for_root - RHEL/CentOS:编辑
/etc/pam.d/system-auth,同样在password段靠前位置添加上述行 -
retry=3:允许用户最多重试 3 次输入合规密码enforce_for_root:让 root 用户也受全部规则约束(默认不生效) - 务必确保类型为 requisite,且位于
pam_unix.so等其他 password 模块之前,否则可能被跳过
补充密码生命周期与历史复用管控
强密码策略需“设得严、用得短、不能重”:
- 在
/etc/login.defs中设置全局有效期:PASS_MAX_DAYS 90(90 天强制更新)PASS_MIN_DAYS 7(改密后 7 天内不可再改)PASS_WARN_AGE 7(到期前 7 天登录时提醒) - 启用历史密码限制:在相同 PAM 文件中添加
password required pam_pwhistory.so remember=24 use_authtok
首次启用前执行:sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd - 对已有用户立即应用:
sudo chage -M 90 -m 7 -W 7 username


















