Linux中chage -E设账户过期日可自动挂起账号,系统内核级生效,无需脚本;配合usermod -s /sbin/nologin或-L可彻底阻断交互式入口,Windows域环境可用Set-ADUser -AccountExpirationDate模拟等效挂起。
直接让系统自动挂起已过期账号,关键不是“等它过期再处理”,而是把“过期”本身设为不可登录的触发条件——Linux 中 chage -E 设置的账户过期日期一到,用户就无法通过任何标准认证方式(密码、PAM、SSH 密码登录)进入系统,等效于自动挂起锁定。
这是最轻量、最可靠的方式,无需脚本或定时任务,系统内核级生效:
sudo chage -E $(date -d "yesterday" +%Y-%m-%d) username,将过期日设为昨天,下次登录即提示 “Your account has expired” 并拒绝访问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)chage 过期可防登录,但若用户仍保有有效 shell(如 /bin/bash),部分非标准路径(如 cron、systemd 用户服务)可能绕过检查。建议叠加以下任一操作:
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
挂起后用户行为表现及排查要点:
usermod -s /sbin/nologin 或清空其 ~/.ssh/authorized_keys
su - username → 提示 Authentication failure 或直接拒绝,不报错也不进 shellpasswd -l 等同于挂起 → 实际只锁密码字段,chage -E 才是生命周期层面的账户停用域控本身不提供“挂起”动作,但可通过属性+策略模拟:
Set-ADUser -Identity username -AccountExpirationDate "2026-06-15"(早于今日即生效)