chage无法修改密码最小长度,真正生效的是PAM模块pam_pwquality.so,通过authconfig --passminlen=8 --update或编辑/etc/security/pwquality.conf设置全局最小长度,且仅在用户自主执行passwd时校验。

修改已有用户的密码最小长度,chage 不管用
chage 只能改密码有效期、过期提醒等时间类策略,对密码长度这种「复杂度规则」完全无效。你执行 chage -m 8 username 或类似命令,系统不会报错,但下次该用户改密码时,依然会按全局策略校验——和你设的 chage 参数无关。
真正起作用的是 PAM 模块配置,关键在 pam_pwquality.so
CentOS 7 默认用 pam_pwquality.so(不是旧版的 pam_cracklib.so)控制密码复杂度。它读取两个地方的配置:
-
/etc/security/pwquality.conf:主配置文件,所有用户生效 -
/etc/pam.d/system-auth:加载模块并传参,比如是否启用、是否强制 root 遵守
要让某个用户受更严限制,不能单独设——PAM 是全局策略引擎,不支持 per-user 密码长度。所谓“具体用户”,实际是指:你要确保该用户下次改密码时,走的是标准 PAM 流程(即用 passwd 命令,而非 root 直接 passwd username 覆盖)。
实操步骤:改全局最小长度,并验证生效
执行以下命令即可把最小长度设为 8:
authconfig --passminlen=8 --update
然后检查是否写入成功:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
grep "^minlen" /etc/security/pwquality.conf
正常输出应为:minlen = 8。如果看到 minlen = 1 或没这行,说明没生效,常见原因有:
- 没加
--update参数,只运行了authconfig --passminlen=8 - 手动编辑过
/etc/pam.d/system-auth,但删掉了pam_pwquality.so行,或参数被覆盖 - 系统用了自定义 PAM stack(比如某些容器环境或加固镜像),绕过了默认配置
为什么普通用户改密码有时不校验长度?
这是最常被忽略的点:root 用户执行 passwd username 时,默认跳过密码复杂度检查(除非显式加 enforce_for_root)。所以你用 root 给用户重置密码,哪怕密码是 123,也能成功。
真正触发校验的场景只有两个:
- 用户自己运行
passwd(不带用户名),输入旧密码后设新密码 - 用户通过 SSH 登录后,执行
passwd修改自身密码
也就是说,密码长度规则不是“设了就 enforce”,而是“仅在用户自主修改时才校验”。这点和 Windows AD 策略完全不同,容易误判策略失效。

















