/etc/shadow 文件第8字段表示账户过期日期(自1970-01-01起的天数),设为具体数值可强制账号在该日后禁用;推荐用 sudo chage -e "yyyy-mm-dd" username 设置,自动更新该字段并保障安全。

Shadow 的第 8 位参数对应的是 /etc/shadow 文件中用户的“账户过期日期”(Account expiration date),即该账号在系统层面彻底禁用的日期(格式为自 1970-01-01 起的天数)。修改它,可强制让离职员工账号在指定日期后无法登录,即使密码仍有效。
确认当前 shadow 第8字段值
先查看目标用户在 /etc/shadow 中的当前记录:
sudo grep '^username:' /etc/shadow输出类似:
alice:$6$abc123...:19234:0:99999:7::19800:
其中第8个字段(以冒号分隔)是空(表示永不过期),或一个数字(如 19800 表示 2024-04-01 左右)。
计算目标过期日期对应的天数
使用 date 命令将离职截止日转为自 1970-01-01 起的天数:
date -d "2025-06-30" +%s | xargs -I{} echo $(( {}/86400 ))或更简洁:
date -d "2025-06-30" +%s | awk '{print int($1/86400)}'例如输出 20269,即代表 2025-06-30(含)之后账号失效。
安全修改第8字段(推荐用 chage)
直接编辑 /etc/shadow 风险高,建议优先使用系统工具 chage 设置账户过期日:
- sudo chage -E "2025-06-30" username —— 设置账号于当日 之后 失效(即最后可登录日为 2025-06-30)
- 验证:运行 sudo chage -l username,查看 “Account expires” 行
- 该操作会自动更新 /etc/shadow 第8字段,且确保格式合法、无锁文件冲突
手动编辑 shadow(仅限必要时)
若必须手动修改(如批量脚本或 chage 不可用):
- 备份:sudo cp /etc/shadow /etc/shadow.bak
- 用 sudo vipw -s 安全打开 shadow 编辑器(自动加锁,防并发写入)
- 找到目标用户行,将第8个字段(第8个冒号前的内容)改为计算出的天数,如 20269
- 保存退出。切勿用普通文本编辑器(如 nano/vi 直接改 /etc/shadow),易导致格式错误或权限问题











