企业需分层落实密码90天强制更换策略:新用户通过/etc/login.defs配置自动继承,老用户用chage批量设置,再验证shadow字段及chage -l输出,并配套密码复杂度、防重用和首登强改措施。

要让企业内部员工密码每90天强制更换一次,不能只改一个文件或执行一条命令。必须分层落实:新用户自动继承、老用户批量补设、策略真正生效且不被绕过。
配置新用户默认策略(/etc/login.defs)
编辑 /etc/login.defs,确保以下三行明确启用并数值合理:
- PASS_MAX_DAYS 90:密码最长使用90天
- PASS_MIN_DAYS 7:两次修改至少间隔7天(防刚改完就换回旧密码)
- PASS_WARN_AGE 14:登录时提前14天开始提示“密码将在X天后过期”
保存后,所有用 useradd 新建的普通用户都会自动获得这套规则,无需手动干预。
批量设置现有员工账户(chage + 脚本)
已有员工账户不会读取 /etc/login.defs,必须逐个写入 /etc/shadow。推荐用以下方式安全筛选并设置:
- 只处理 UID ≥ 1000 的普通用户(避开 root、daemon、systemd 等系统账号)
- 跳过已禁用或无登录 shell 的账户(如
/sbin/nologin) - 执行命令示例:
getent passwd | awk -F: '$3 >= 1000 && $7 !~ /nologin|false$/ {print $1}' | xargs -I{} sudo chage -M 90 -m 7 -W 14 {}
若需首次登录强制改密(例如重置密码后),额外加 chage -d 0 username。
验证是否真正生效(别只看配置文件)
改完不验证 = 没改。对任意员工账号执行:
-
chage -l username—— 确认输出中 “Password expires” 是具体日期,“Minimum number of days between password change” 是 7,“Warning period” 是 14 - 检查
/etc/shadow对应行第5字段(最大天数)、第4字段(最小天数)、第6字段(警告天数)是否已更新 - 注意:Web 应用、SSH 密钥登录、su 切换等场景可能绕过该策略,必须确保用户走标准密码认证流程
配套加固(避免策略形同虚设)
单设90天轮转不够,还需同步落地三项关键配套:
-
密码复杂度:在
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS)中启用pam_pwquality.so,要求长度≥10、大小写字母+数字+特殊字符各至少1个、新旧密码差异≥3字符 -
防密码重用:添加
pam_pwhistory.so remember=5,禁止重复使用最近5次密码 -
首登强改:对新入职或重置密码的员工,统一执行
chage -d 0,确保第一次登录就必须设新密码











