应设置密码最短使用期限为1天,通过chage -m 1 username配置并修改/etc/login.defs中PASS_MIN_DAYS为1,与PAM策略协同防绕过;设为0则失效,过高影响应急。

要防止用户在短时间内反复修改密码,核心是设置“密码最短使用期限”,即强制新密码必须用满一定天数后才能再次更改。这能有效堵住用户通过快速连改多次来绕过历史密码限制或复杂度策略的漏洞。
配置密码最短使用期限(min days)
该策略由 /etc/shadow 文件中的第4字段(min)控制,表示两次密码修改之间至少间隔的天数。推荐设为 1 天,既防绕过又不影响运维灵活性。
- 对单个用户设置:运行 sudo chage -m 1 username(例如 chage -m 1 alice)
- 查看当前值:执行 chage -l username,关注 “Minimum number of days between password change” 行
- 新用户默认继承该值:编辑 /etc/login.defs,确保存在且未被注释的行:PASS_MIN_DAYS 1
为什么只靠 PAM 配置不够
PAM 的 pam_pwquality.so 或 pam_pwhistory.so 只在校验密码时起作用,不干预“改密时机”。如果没设 min days,用户可在一秒内连续执行三次 passwd,把密码从 A→B→C→A,从而让历史记录失效、绕过 remember=5 检查。
- 典型风险场景:用户刚设了符合复杂度的新密码,立刻再改回一个弱密码,系统不会拦截
- 关键点:PAM 管“内容是否合法”,chage 管“何时允许修改”——二者需配合使用
验证是否生效
配置后必须实测,不能只看参数:
- 以测试用户登录,执行 passwd 改为新密码 pass2026
- 立即再执行一次 passwd 尝试改回旧密码或任意密码
- 应提示类似:You must wait longer to change your password 或直接拒绝
- 等待满设定天数(如 1 天)后再试,即可成功
配套建议:避免策略冲突
单独设 min days 不够,还需注意关联配置:
- 若同时设置了 PASS_MAX_DAYS(如 90),确保 min days ≤ max days,否则用户可能无法改密
- 图形界面或 SSH 密码修改同样受此限制,但 SSH 密钥登录不受影响
- 不要将 min days 设为 0 —— 这等于关闭防护;也不建议设过高(如 >7),影响应急响应


















