要让所有账户每90天必须更换密码,需先配置/etc/login.defs设置PASS_MAX_DAYS 90、PASS_MIN_DAYS 7、PASS_WARN_AGE 14使新用户自动继承,再用chage -M 90 -m 7 -W 14批量为UID≥1000的现有用户启用策略,并通过chage -l验证生效。

要让所有账户每90天必须更换一次密码,核心是两步:一是让新用户自动继承该策略,二是为已有用户批量补设策略。只改配置文件是不够的,/etc/login.defs 的设置对老用户完全无效。
设置新用户的默认策略
编辑 /etc/login.defs,确保以下三行生效:
- PASS_MAX_DAYS 90:密码最长使用90天
- PASS_MIN_DAYS 7:两次修改至少间隔7天(防绕过)
- PASS_WARN_AGE 14:提前14天开始登录时提示
保存后,此后新建的用户会自动按此规则执行。
为现有用户批量启用90天策略
已有用户不会自动获得新策略,必须用 chage 逐个设置。推荐用脚本批量处理(避开系统账号):
- 先筛选出普通用户(UID ≥ 1000):
getent passwd | awk -F: '$3 >= 1000 {print $1}' - 再对每个用户执行:
chage -M 90 -m 7 -W 14 username - 如需首次登录强制改密(例如刚重置密码后),额外加:
chage -d 0 username
执行后用户下次登录若密码已超90天,会直接提示修改,无法跳过。
验证与常见疏漏
别只看配置文件是否改了,关键要检查具体用户是否生效:
- 查某个用户策略:
chage -l username,确认 “Password expires” 和 “Minimum number of days between password change” 符合预期 - 注意 Web 应用可能绕过系统限制:如果登录不走 PAM 或未读取 shadow 字段,chage 设置会被无视
- LDAP 环境下,pwdMaxAge 是秒级单位(90天 = 7776000 秒),且必须显式绑定到用户节点,不能只放 OU 下











