Linux密码强度由pam_pwquality.so模块控制,需同时配置/etc/security/pwquality.conf(如minlen=12、dcredit=-1等)和PAM文件(如system-auth中添加requisite行),并实测验证;/etc/login.defs中PASS_MIN_LEN不主导实际校验。

Linux 系统中配置密码最小长度与复杂度,核心是使用 pam_pwquality.so 模块,通过集中策略文件和 PAM 配置协同生效。不靠改单一参数就能起作用,必须两处配合:规则定义 + 模块加载。
统一配置密码规则:/etc/security/pwquality.conf
推荐把所有强度要求写在这里,避免在多个 PAM 文件里重复设置、难以维护。用管理员权限编辑该文件:
- minlen = 12:基础最小长度设为 12(注意:这不是硬下限,缺字符类别时会自动加长)
- dcredit = -1:必须含至少 1 个数字
- ucredit = -1:必须含至少 1 个大写字母
- lcredit = -1:必须含至少 1 个小写字母
- ocredit = -1:必须含至少 1 个特殊字符(如 !@#$%)
- difok = 5:新旧密码至少 5 个字符不同
- maxrepeat = 3:禁止连续 4 个相同字符(如 aaaa)
- reject_username = 1:密码不能包含用户名或其反转
在 PAM 中启用模块:修改对应服务配置文件
根据发行版选择正确文件:
- Debian/Ubuntu:编辑 /etc/pam.d/common-password
- RHEL/CentOS/Fedora:编辑 /etc/pam.d/system-auth 或 /etc/pam.d/password-auth
添加这一行(务必放在所有其他 password 规则之前,且类型为 requisite):
关键点:
- requisite 表示一旦校验失败,立即终止密码修改流程
- enforce_for_root 让 root 用户也受规则约束(否则默认跳过)
- retry=3 允许用户最多重试 3 次输入合规密码
验证是否真正生效
别只看配置保存了就认为成功。最可靠方式是实测:
- 用普通用户执行
passwd,尝试设Abc123!(12 位但缺大写)→ 应提示类似 “Password does not contain enough uppercase characters” - 尝试设
root@2026!→ 若启用了reject_username和enforce_for_root,会被拒绝 - 用
pwscore工具评分:echo "MyPass123!" | pwscore,分值低于 50 通常说明太弱
补充说明:/etc/login.defs 中的 PASS_MIN_LEN 不主导实际校验
该文件里的 PASS_MIN_LEN 仅影响 useradd 创建用户时的初始密码检查(且很多系统已忽略它),真实密码强度控制权在 pam_pwquality。所以即使这里设为 5,只要 pwquality.conf 里 minlen=12,用户仍无法设短于 12 的密码。


















