chage 管的是口令生命周期
chage 用来查看与设置单个账户的口令时效参数:最长可用天数、最短使用天数、到期前警告天数、账户失效日期。这些参数落在 /etc/shadow 的第 3 到第 8 字段,登录时由 PAM 读取并强制。等保与基线核查常查『口令是否定期更换』,对应的就是这里;交付验收时逐台核对比事后返工要省事得多。
基本信息
| 查看 | chage -l 用户名 |
|---|---|
| 最长有效期 | chage -M 天数 用户名 |
| 最短使用 | chage -m 天数 用户名 |
| 警告天数 | chage -W 天数 用户名 |
| 强制改密 | chage -d 0 用户名(下次登录必须改) |
| 账户失效 | chage -E 日期 用户名 |
| 落盘位置 | /etc/shadow 的时效字段 |
典型使用场景
- 按等保要求给人工账户设置口令有效期与警告天数
- 新交付账户首次登录强制修改初始口令
- 临时外包账号设置账户失效日期,到期自动失效
- 巡检时统计哪些账户的口令长期未更换
- 排查用户登录被拒时确认是否口令已过期
常用命令
常用命令
chage -l appuser # 查看该账户全部时效参数与上次修改时间
chage -M 90 -m 7 -W 7 appuser # 有效期 90 天、最短使用 7 天、到期前 7 天开始提示
chage -d 0 appuser # 下次登录必须改密,常用于初始口令交付
chage -E 2027-12-31 appuser # 账户到期日,到期后该账户无法登录
chage -l root | head -4 # 核查 root 是否也被纳入策略
awk -F: '{print $1, $5, $6, $7}' /etc/shadow | head -10 # 直接看 shadow 中的天数字段批量核查思路
批量核查思路
grep -E '^(PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE)' /etc/login.defs # 新建账户的默认策略
for u in $(awk -F: '$3>=1000 && $3<65000 {print $1}' /etc/passwd); do echo -n "$u: "; chage -l $u | head -1; done
# 上面这条列出所有普通账户的最后一次口令修改时间,便于找出长期未改密的账户
lastlog | head -20 # 结合最近登录时间,识别长期不用的账户
passwd -S appuser # 一行式查看口令状态(可用/锁定/已过期)参数与效果
| 参数 | 含义 | 设置建议 |
|---|---|---|
| -M | 口令最长可用天数 | 按合规要求,常见 90 天 |
| -m | 口令最短使用天数 | 防止改完立刻改回旧口令 |
| -W | 到期前警告天数 | 太短用户来不及安排,建议 7 天以上 |
| -d | 最后一次修改日期 | 设为 0 即下次登录强制改密 |
| -E | 账户失效日期 | 临时账号、外包账号必设 |
| -I | 口令过期后宽限天数 | 过期后仍可登录的天数,为 0 即立即禁止 |
对服务账户强制改密会锁死自动化:chage -d 0 只适用于人工使用的账户,服务账户的口令策略需单独评估,别一并套用。
本地口令策略与集中认证(域控、统一身份平台)可能冲突:域账号的时效由服务端下发,本地改完可能会被覆盖,实施前先确认认证口径。