首页/系统/信创系统运维速查/chage 口令有效期管理
安全加固65 条

chage 口令有效期管理

chage 管理单个账户的口令生命周期:-l 查看、-M/-m/-W 设置有效期上限、下限与警告天数、-d 强制下次登录改密;交付验收与等保整改常用。

信创系统运维速查系统更新于 2026-10-13

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 只适用于人工使用的账户,服务账户的口令策略需单独评估,别一并套用。
本地口令策略与集中认证(域控、统一身份平台)可能冲突:域账号的时效由服务端下发,本地改完可能会被覆盖,实施前先确认认证口径。

易错点

  • 给服务账户设置 chage -d 0,自动化脚本因强制改密无法登录,业务中断后才定位到策略
  • 到期警告天数设成 1 天,集中改密窗口太短,大量用户在同一时段改密把认证服务压垮
  • 只改了 login.defs 的默认值,没对已存在的账户执行 chage,存量账户仍是旧策略,迎检时被发现
  • 本地改了时效但账号由集中认证下发,改动被覆盖,以为配置未生效反复调整
  • 账户设了失效日期却没有台账,业务依赖该账号时突然无法登录,排查耗时

数据来源与参考

  • man 1 chage
  • 等保 2.0 测评项(口令定期更换)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌