linux用户定期改密码需配合chage设置与pam模块:先用chage -m 90设90天有效期,再通过pam启用密码校验、复杂度(minlen=12)及历史记录(remember=5),否则策略无效。

要让Linux用户定期改密码,核心是两步:一是用 chage 为每个用户设有效期,二是靠 PAM模块 在登录时真正执行检查。只改配置文件不生效,只设单个用户不覆盖全局——得配合着来。
设置密码最长使用期限(如90天)
这是最常用的安全要求。注意:/etc/login.defs 中的 PASS_MAX_DAYS 只影响新建用户,已有用户必须单独配置。
- 对单个用户:运行
sudo chage -M 90 username,表示密码90天后过期 - 对所有普通用户批量设置(UID ≥ 1000):
getent passwd | awk -F: '$3 >= 1000 {print $1}' | xargs -I{} sudo chage -M 90 {} - 验证是否生效:运行
chage -l username,确认 “Password expires” 显示具体日期,不是 “never”
防止用户频繁换密或绕过策略
光设最大天数不够,还要限制最小修改间隔和提前提醒,避免策略被钻空子。
- 设两次改密至少隔7天:
sudo chage -m 7 username(防连续设相似密码) - 登录前14天开始提示:
sudo chage -W 14 username - 若用户已超期仍能登录,检查 /etc/shadow 第5字段(max_days)是否为90,且第4字段(last_password_change)不是0
首次登录强制改密(新账号/重置后场景)
适用于刚创建用户或管理员重置密码后,确保用户不能直接用临时口令长期登录。
- 执行
sudo chage -d 0 username,系统会把“最后修改时间”设为1970-01-01,判定为立即过期 - 用户下次用密码登录(非密钥),认证成功后立刻进入改密流程,提示:
You are required to change your password immediately (root enforced) - 注意:该机制对 SSH 密钥登录、su 切换、cron 等无效,测试时请用
ssh -o PubkeyAuthentication=no user@localhost
增强策略落地效果(PAM + 复杂度 + 历史)
没有PAM支持,chage设置可能被跳过;没有复杂度约束,用户可能设“12345678”应付了事。
- 确认 PAM 已启用密码校验模块:
Debian/Ubuntu 查/etc/pam.d/common-password,RHEL/CentOS 查/etc/pam.d/system-auth,应含类似password [success=1 default=ignore] pam_unix.so ...的行 - 启用强密码规则(如12位、含大小写数字特殊字符):
安装libpam-pwquality,在对应PAM文件中添加password requisite pam_pwquality.so minlen=12 minclass=4 difok=4 reject_username - 禁止重复用旧密码:加一行
password required pam_pwhistory.so remember=5,记住最近5次











