Linux密码策略由PAM模块协同控制,需先通过grep识别生效配置文件(如common-password或system-auth),再解析pam_pwquality.so参数含义,结合pwquality.conf和chage命令确认实际值,最后用普通用户实测验证。

Linux 系统中密码策略不是由单一文件控制,而是由 PAM(Pluggable Authentication Modules)模块协同生效。要准确查看“当前实际生效”的策略配置及其语法,需分三步定位和解析:
确认主密码策略配置文件路径
不同发行版使用不同主配置文件:
- Debian/Ubuntu 系列:主要看 /etc/pam.d/common-password
- RHEL/CentOS/Fedora/CentOS Stream 系列:主要看 /etc/pam.d/system-auth
执行以下命令快速识别系统类型并检查是否加载了核心模块:
grep -E "(pwquality|pam_pwquality|cracklib)" /etc/pam.d/common-password /etc/pam.d/system-auth 2>/dev/null | head -5
若输出含 pam_pwquality.so 行,说明该行所在文件即为当前策略主配置文件。
识别关键模块行的语法结构
典型有效策略行格式如下(以 pam_pwquality.so 为例):
password [success=1 default=ignore] pam_pwquality.so retry=3 minlen=12 difok=4 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 maxrepeat=2 reject_username enforce_for_root
各部分含义:
- password:表示该规则作用于密码修改阶段(非认证或会话)
- [success=1 default=ignore]:PAM 控制标志,决定模块成功/失败时如何跳过后续模块
-
pam_pwquality.so:模块名(替代旧版
pam_cracklib.so) -
参数键值对(如
minlen=12):每个参数含义严格依赖模块文档,例如:
•minlen=12表示基础强度分值 ≥12(非纯字符数),默认小写/大写/数字/符号各计 1 分;
•ucredit=-1中的负号表示“至少含 1 个大写字母”;
•difok=4指新密码至少 4 个字符与旧密码不同(非“不能重用前 4 次”)
检查辅助配置文件与实际生效值
部分参数可能被外部文件覆盖:
-
/etc/security/pwquality.conf:若 PAM 行中含
config=/etc/security/pwquality.conf,则具体数值从此文件读取;可直接查看:cat /etc/security/pwquality.conf | grep -v "^#" | grep -v "^$" -
/etc/login.defs:仅影响新用户创建(如
PASS_MIN_LEN),不控制已有用户改密行为;可用grep "^PASS_" /etc/login.defs查看 - 用户级策略优先级更高:运行
chage -l username查看某用户在 shadow 数据库中实际存储的过期设置(如最大有效期、宽限期等),这些值可能已被chage或脚本单独修改,与配置文件无关
验证策略是否真实生效
配置只是前提,必须实测才能确认:
- 切到普通用户(
su - username),执行passwd尝试设一个弱密码(如123456),观察提示信息是否匹配你配置的规则 - root 用户默认常绕过多数强度检查,所以一定不要只用 root 测试**
- 修改后若无法登录,立即用另一终端或 console 登录恢复备份(提前备份原 PAM 文件!)


















