新手配置Linux密码到期提前提醒需用chage -W设置警告天数,该值须小于-M指定的最大有效期,登录时自动触发提示,修改/etc/login.defs中PASS_WARN_AGE可设新用户默认提醒天数。

新手配置Linux密码到期提前提醒,核心是用 chage 命令设置警告天数,并理解系统如何把这数字变成登录时的提示。它不依赖重启、不改代码,改完立刻对用户生效。
先设好提醒天数(-W 参数)
警告天数由 chage -W 控制,表示“密码到期前多少天开始提醒”。这个值必须小于密码最大有效期(-M),否则不会触发。
- 给用户 alice 设置提前 7 天 提醒: sudo chage -W 7 alice
- 查看是否生效: chage -l alice → 找到 “Number of days of warning before password expires” 字段
- 设为 0 表示不提醒;设为负数(如 -1)多数系统视为禁用提醒,但行为取决于 PAM 配置,不建议随意用
提醒怎么发出来?靠登录过程自动触发
系统不会主动发邮件或弹窗。提醒是被动发生的:用户每次通过 ssh、console 或图形界面登录 时,只要满足两个条件,shell 就会在欢迎信息后显示一行提示:
- 当前日期已进入“到期前 N 天”的窗口(即:到期日 − 当前日 ≤ W 值)
- 该用户不是 root(root 账户通常绕过此提示)
例如,若 alice 密码 5 月 20 日过期,-W 设为 7,则从 5 月 13 日起,她每次登录都会看到类似提示:
You are required to change your password immediately (password expired).
或更温和的:
Your password will expire in 3 days.
让新用户默认带提醒(改 /etc/login.defs)
如果希望所有未来新建的用户都自带提醒,修改全局配置文件即可,不影响已有用户:
- 编辑:sudo nano /etc/login.defs
- 找到并修改这一行:
PASS_WARN_AGE 7(把 7 换成你想要的天数) - 保存退出。之后用 useradd 创建的新用户,chage -l 查看时“警告天数”字段就是这个值
提醒没出现?常见原因检查
设置了 -W 却没看到提示,大概率是以下情况之一:
- 用户还没登录过——提醒只在登录时显示,不是后台服务
- 密码根本没设有效期(-M 是 99999 或 -1),那 -W 就无效
- 用户是 root 或系统账户(UID
- PAM 配置被手动改过,比如 /etc/pam.d/sshd 或 /etc/pam.d/login 中删了相关模块(一般不用动)











