Linux增强密码校验需通过pam_pwquality.so模块在PAM password栈中实时拦截,配置pwquality.conf规则并确保requisite类型加载,同时启用pam_pwhistory和login.defs生命周期控制。

要在 Linux 中真正增强密码校验机制,关键不是改几个参数就完事,而是让 pam_pwquality.so 模块在用户执行 passwd 时实时介入、强制拦截不合规输入。它不读 /etc/login.defs 的 PASS_MIN_LEN,也不靠命令行工具自己判断——所有规则由 PAM 在 password 栈中实时执行。
确认模块已安装且未被旧模块覆盖
先检查系统是否具备现代密码校验能力:
- 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 - 检查是否残留旧模块干扰:
grep -E 'pwquality|cracklib' /etc/pam.d/common-password,确保没有pam_cracklib.so行存在
集中配置强密码规则(推荐写入 pwquality.conf)
统一策略便于维护和审计,避免在多个 PAM 文件里重复定义:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 编辑
/etc/security/pwquality.conf,设置以下常用项(等号前后空格可选): - minlen = 12:基础最小长度为 12,但实际生效长度会动态抬高(如缺一类字符,自动+1)
-
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均被拒) - enforce_for_root = 1:root 用户也受全部规则约束(默认不生效)
在 PAM password 栈中正确加载模块
只配 pwquality.conf 不生效,必须在对应 PAM 文件中显式调用,并保证位置和类型准确:
- Debian/Ubuntu:编辑
/etc/pam.d/common-password,在所有password行最前面插入一行:password requisite pam_pwquality.so retry=3 - RHEL/CentOS:编辑
/etc/pam.d/system-auth或/etc/pam.d/password-auth,同样在password段靠前位置添加上述行 -
类型必须是
requisite,且必须位于pam_unix.so等其他password模块之前,否则会被跳过 -
retry=3表示允许用户最多重试 3 次输入合规密码,避免一次失败就退出流程
配套加固:历史密码 + 生命周期限制
仅控强度不够,还需防反复用旧密、长期不更新:
- 启用历史记录:在同一个 PAM 文件中追加一行:
password required 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 90(最长使用 90 天)PASS_MIN_DAYS 7(修改后至少 7 天才能再改)PASS_WARN_AGE 7(到期前 7 天开始提醒) - 对已有用户立即生效:
sudo chage -M 90 -m 7 -W 7 username

















