Linux强密码策略需分两步:先通过/etc/login.defs设置密码老化周期(PASS_MAX_DAYS 90、MIN_DAYS 7、WARN_AGE 7),仅影响新建用户;再通过pam_pwquality.so配置复杂度(minlen=12、minclass=4等)和pam_pwhistory.so设置历史记录(remember=24),对所有本地用户生效。

Linux服务器强密码策略不是靠改一个文件就能生效的,关键在于理清PAM模块调用链、参数优先级和各配置文件的实际作用范围。真正起效的密码复杂度规则由 pam_pwquality.so 控制,而 /etc/login.defs 中的 PASS_MIN_LEN 在启用PAM后完全失效——这是最常被忽略的坑。
密码复杂度核心配置(pam_pwquality.so)
现代发行版(RHEL 8+/Ubuntu 20.04+)统一使用 pam_pwquality.so 模块。它支持细粒度字符类型控制,必须在 PAM 密码修改流程中正确加载:
- Debian/Ubuntu 编辑
/etc/pam.d/common-password;RHEL/CentOS 编辑/etc/pam.d/system-auth - 添加或修正这一行(确保是
password requisite类型,且位置靠前):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是基础长度,但若同时设了minclass=4(要求4类字符),实际密码可能需更长才能满足所有条件 - 旧系统如 CentOS 7 可能用
pam_cracklib.so,参数名相似但不完全兼容,执行man pam_pwquality确认当前模块支持项
密码生命周期与历史复用限制
仅管住“怎么设密码”还不够,还要管住“什么时候能改”和“能不能反复用旧密码”:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 在
/etc/login.defs中设置全局有效期:PASS_MAX_DAYS 90(90天强制更新)PASS_MIN_DAYS 7(改密后7天内不可再改,防绕过)PASS_WARN_AGE 7(到期前7天登录时提醒) - 在同一个 PAM 配置文件中,
pam_pwquality.so行之后添加:password [success=1 default=ignore] pam_unix.so use_authtok sha512 shadowpassword required pam_pwhistory.so remember=24 use_authtok - 首次启用需手动创建空文件:
sudo touch /etc/security/opasswd && sudo chmod 600 /etc/security/opasswd
统一管理与策略落地要点
避免多处分散配置导致冲突,推荐将主要规则集中到 /etc/security/pwquality.conf:
- 该文件会被
pam_pwquality.so自动读取,无需在 PAM 行里重复写满参数 - 启用方式:在 PAM 行中只保留模块名和必要开关,例如:
password requisite pam_pwquality.so retry=3 enforce_for_root - 然后在
/etc/security/pwquality.conf中设置:minlen = 12minclass = 4difok = 5maxrepeat = 3reject_username = 1 - 注意:若系统未安装
libpwquality包(如 RHEL/CentOS 执行yum install libpwquality,Ubuntu 执行apt install libpwquality-tools),模块将静默失败
验证与常见失效排查
配置完不测试等于没配。重点验证三类行为是否被拦截:
- 用普通用户执行
passwd,尝试输入:abc123(太短且缺大写/特殊符)→ 应拒绝MyPassword123(无特殊字符)→ 应拒绝john123!(含用户名john)→ 应拒绝 - 成功设新密码后立即重设为相同密码 → 应提示 “already used”
- 检查日志:
Ubuntu/Debian 查/var/log/auth.log
RHEL/CentOS 查/var/log/secure
搜索关键词pam_pwquality或pam_pwhistory看拒绝记录 - 失效常见原因:
PAM 行类型写成sufficient而非requisite(失败不终止流程)
同一配置文件中存在多个pam_pwquality.so行造成覆盖
SSH 登录走的是/etc/pam.d/sshd,它可能include其他文件,需确认最终加载路径

















