最标准方式是用 chage -W 设置警告天数,需满足:-W 值小于 -M、非零且非负,配合 -M 使用才生效;新用户还需检查 /etc/login.defs 中 PASS_WARN_AGE 非零。

直接用 chage -W 命令设置即可,这是最标准、最可靠的方式。
确认警告天数是否生效
系统是否在登录时提示“Your password will expire in X days”,取决于 /etc/shadow 文件中该用户的第6个字段(warn),它由 chage -W 写入。必须确保:
- 执行了类似
sudo chage -W 7 username的命令(不能设为 0 或负数) - 用
sudo chage -l username检查输出,确认 “Number of days of warning before password expires” 显示有效数值(如 7) - 若用户是新建的,还需检查
/etc/login.defs中PASS_WARN_AGE是否非零(否则新用户默认无警告)
警告天数的取值规则
这个值不是随意填的,需满足逻辑约束:
- 必须小于
-M(密码最大有效期),比如设了-M 90,就不能设-W 100 - 推荐值为 7,兼顾提醒及时性与用户响应时间
- 设为 0 表示不提醒;设为负数无效,会被忽略
配合其他参数避免提醒失效
单独设 -W 不够,需和密码过期机制联动:
- 必须同时设置
-M(如chage -M 90 -W 7 username),否则“密码永不过期”,自然不会触发警告 - 如果还设置了
-I(过期后宽限期),警告仍会在-W天前开始,不受-I影响 - 注意:
-E是账户整体到期日,和密码警告无关,别混淆
让警告真正被看到
默认终端提示容易被滚动信息淹没,可增强显示效果:
- 通过 PAM 在登录成功后插入高亮脚本(如用
pam_exec.so调用 shell 脚本) - 脚本中用
chage -l $PAM_USER提取剩余天数,判断 ≤7 且 >0 时输出带 ⚠️ 的醒目提示 - 配合
pam_pwquality.so或登录拦截策略,确保过期后无法跳过改密


















