userdel 是什么
userdel 删除本地用户账号,改的是 /etc/passwd、/etc/shadow、/etc/group 这几个文件;加 -r 时还会一并删除该用户的家目录和邮件池。它不会自动清理散落在系统其他位置的文件,比如 /tmp 下的临时数据、业务目录里的属主文件、sudoers 里的授权行、SSH 的 authorized_keys。所以离职或下线账号的规范做法是「先锁定、再盘点、然后删除」。
基本信息
| 用途 | 删除本地账号,-r 同时删家目录与邮件池 |
|---|---|
| 语法 | userdel [-r] 用户名 |
| 所属软件包 | shadow-utils(RHEL 系)/ passwd 包(Debian 系) |
| 权限要求 | root;若该用户仍有运行中的进程,部分发行版会拒绝删除并提示 currently used by process |
典型使用场景
- 离职流程:账号需要下线,但要保证审计与备份先完成
- 临时账号回收:外包、测试用的账号到期后清理,减少可用入口
- 误建账号撤销:新建用户时用户名或 UID 写错,需要干净回退
- 安全事件响应:确认可疑账号后立即锁定并处理其残留权限
- 交接前盘点:批量清理长期未登录的账号,先看 lastlog 再决定
删除前的标准动作
删除前的标准动作
id olduser # 确认 UID/GID,后面盘点残留要用
ps -u olduser -o pid,cmd # 是否还有进程在跑
userdel -r olduser # 删除账号与家目录
find / -xdev -user olduser -ls 2>/dev/null | head -30 # 盘点家目录之外的残留
getent passwd olduser || echo 'account gone' # 确认账号已消失先锁定再删除(推荐顺序)
先锁定再删除(推荐顺序)
usermod -L olduser # 锁定密码(shadow 里密码前加感叹号)
chage -E 0 olduser # 立即过期,阻断后续登录
usermod -s /sbin/nologin olduser # 改成不可登录 shell
tar czf /backup/home-olduser-$(date +%F).tar.gz /home/olduser # 备份家目录
grep -rn olduser /etc/sudoers /etc/sudoers.d/ 2>/dev/null # 查残留授权删除前后要盘点的位置
| 位置 | 内容 | 为什么容易漏 |
|---|---|---|
| /home/用户名 | 家目录(-r 会删) | 最容易想到,也最不担心 |
| /etc/sudoers.d/ | 免密授权行 | userdel 完全不管,权限会残留 |
| ~/.ssh/authorized_keys | 公钥登录凭据 | 家目录删了就没了,但备份或复制件还在 |
| /var/spool/cron/ | 该用户的定时任务 | 删除账号后任务不再跑,但文件可能残留 |
| 其它目录属主文件 | UID 显示成数字 | 以后新建同 UID 用户会继承权限,需 find -user 排查 |
只删账号不删家目录(不用 -r)在保留取证数据时是合理选择,但要明确记录「家目录暂留」这件事,否则将来某天同名账号重建,会直接继承旧家目录里的密钥与配置。
残留文件的 UID 可能被系统回收复用:新用户拿到同一 UID 后会凭空拥有旧用户的文件权限,这是权限事故的常见来源。删除后务必做一次 find -user 盘点。