linux无开箱即用归档冻结功能,需组合日志分析(lastlog -b 90识别90天未登录用户)、禁用shell(usermod -s /sbin/nologin)及清理权限(sudo、crontab、systemd用户服务等)三步实现。

Linux系统没有“开箱即用”的自动归档+冻结功能,必须组合使用日志分析、账户状态控制和权限清理三类操作。核心逻辑是:先识别闲置用户,再禁用登录能力,最后剥离所有可执行权限路径。
识别90天未登录的活跃用户
唯一可信依据是 /var/log/lastlog 记录的最后一次成功登录时间,不是密码修改时间或文件时间戳。
- 运行 lastlog -b 90 列出所有90天内未登录的账号(-b 表示 before)
- 过滤掉系统账号:lastlog -b 90 | awk '$1 !~ /^(root|sync|shutdown|halt|operator|nobody|.*daemon)/ && $5 != "Never" {print $1}'
- 注意时区影响:跨时区批量处理前建议统一设 TZ=UTC
冻结登录能力(关键一步)
仅锁密码(passwd -l)不安全,SSH密钥仍可绕过;应改用禁用shell方式。
- 执行 usermod -s /sbin/nologin username,彻底阻止交互式登录
- 避免误用 chage -E 0(立即过期),正确写法是 chage -E -1 取消过期限制
- 如需配合密码策略,可用 chage -M 90 -W 7 username 设置90天有效期+提前7天提醒
清理残留权限与服务
冻结shell只拦终端登录,sudo规则、定时任务、systemd用户服务仍可能被触发。
- 删除 sudo 权限:rm -f /etc/sudoers.d/username
- 清空定时任务:crontab -u username -r
- 停用并禁用用户级服务:sudo systemctl --user stop 'app*.service' && sudo systemctl --user disable 'app*.service'
- 检查 ~username/.ssh/authorized_keys 和 ~username/.bash_history,必要时备份后清空
归档用户数据(可选但推荐)
归档不是系统内置动作,需脚本化完成,重点保留结构、权限与时间信息。
- 打包主目录:tar -czf /archive/username_$(date +%Y%m%d).tar.gz -C /home username
- 保留原目录权限与属主:chmod 700 /home/username && chown root:root /home/username
- 记录归档日志到独立文件,例如 /var/log/user-archiving.log











