linux中chage -e设账户过期日可自动挂起账号,系统内核级生效,无需脚本;配合usermod -s /sbin/nologin或-l可彻底阻断交互式入口,windows域环境可用set-aduser -accountexpirationdate模拟等效挂起。

直接让系统自动挂起已过期账号,关键不是“等它过期再处理”,而是把“过期”本身设为不可登录的触发条件——Linux 中 chage -E 设置的账户过期日期一到,用户就无法通过任何标准认证方式(密码、PAM、SSH 密码登录)进入系统,等效于自动挂起锁定。
用 chage 设定精确过期日,实现自动挂起
这是最轻量、最可靠的方式,无需脚本或定时任务,系统内核级生效:
-
立即挂起指定用户:运行
sudo chage -E $(date -d "yesterday" +%Y-%m-%d) username,将过期日设为昨天,下次登录即提示 “Your account has expired” 并拒绝访问 -
批量挂起一批账号:例如所有 90 天未登录用户,先用
lastlog -b 90 | awk '$3 != "**Never logged in**" {print $1}' | xargs -I{} sudo chage -E $(date -d "yesterday" +%Y-%m-%d) {} -
查看是否生效:执行
chage -l username,确认输出中 Account expires 字段为具体日期,且该日期已早于当前时间(2026-06-16)
配合 usermod 彻底阻断交互式入口
chage 过期可防登录,但若用户仍保有有效 shell(如 /bin/bash),部分非标准路径(如 cron、systemd 用户服务)可能绕过检查。建议叠加以下任一操作:
一款AI开发辅助工具,主要用于使用 OpenCLI 工具,可从各类网站及桌面应用中提取数据、下载媒体内容、控制外部 CLI 工具。支持 Bilibili、知乎、小红书、Twitter/X、Reddit、YouTube、Boss直聘、即刻、微博等 30+ 个平台,以及 Cursor、Codex、ChatGPT、Notion 等桌面应用。当用户需要:从社...,适合需要提升相关任务效率的用户。
-
sudo usermod -s /sbin/nologin username—— 替换登录 shell,阻止所有交互式会话(包括 su 切换) -
sudo usermod -L username—— 在 /etc/shadow 密码字段前加 !,禁用密码认证(注意:不影响 SSH 密钥登录) - 两者组合使用更稳妥:
sudo chage -E 0 username && sudo usermod -s /sbin/nologin username
验证挂起效果与常见误区
挂起后用户行为表现及排查要点:
- 尝试 SSH 密码登录 → 显示 Your account has expired 并断开连接
- 尝试 SSH 密钥登录 → 若未改 shell,仍可能成功;必须配合
usermod -s /sbin/nologin或清空其~/.ssh/authorized_keys - 用 root 执行
su - username→ 提示 Authentication failure 或直接拒绝,不报错也不进 shell - 误以为
passwd -l等同于挂起 → 实际只锁密码字段,chage -E才是生命周期层面的账户停用
Windows 域环境等效做法
域控本身不提供“挂起”动作,但可通过属性+策略模拟:
- 用 PowerShell 设置账户过期:
Set-ADUser -Identity username -AccountExpirationDate "2026-06-15"(早于今日即生效) - 配合组策略禁用密码策略中的“用户不能更改密码”和“密码永不过期”,确保 chage 类逻辑能被 AD 正确识别
- 登录时提示 “The referenced account is currently locked out…” 或 “Your password has expired” 视策略而定,本质等同挂起










