阅读量:0
Ubuntu 删除用户后的文档化与清理清单
一 文档化目标与范围
- 目标:形成一份可审计的“用户离职/下线”记录,覆盖执行人、时间、命令与参数、影响评估、备份位置、验证结果与回退方案。
- 范围:围绕账户、权限、认证、计划任务、邮件、家目录与临时文件、应用残留、日志留痕等维度进行记录与清理。
二 建议的文档模板
- 基本信息
- 用户名:
- 操作人:<姓名/工号>
- 执行时间:
- 变更单/工单号:<编号>
- 用户名:
- 执行动作
- 删除命令:<如:sudo deluser --remove-home
;sudo deluser --group ;sudo userdel -r > - 清理动作:<列出具体 rm/crontab/visudo 等命令>
- 删除命令:<如:sudo deluser --remove-home
- 备份信息
- 家目录备份路径:<如:/backup/home_
_YYYYMMDD.tar.gz> - 邮件备份路径:<如:/backup/mail_
_YYYYMMDD.tar.gz> - 其他应用数据备份:<如:/backup/app_
_YYYYMMDD.tar.gz>
- 家目录备份路径:<如:/backup/home_
- 影响评估
- 所属/附属组:<列出组名与是否删除>
- sudo 权限:<是否移除/保留说明>
- 应用/服务影响:<列出受影响系统或业务>
- 验证与留痕
- 验证命令与结果:
- 日志留存:
- 验证命令与结果:
- 回退方案
- 可回退项:<如备份归档、可恢复的 UID/GID 映射>
- 回退步骤:<简要命令序列>
- 审批与复核
- 审批人:<姓名/工号>
- 复核人:<姓名/工号>
三 清理与验证要点清单
- 账户与组
- 删除用户:优先使用deluser --remove-home
;若已删除主目录,可用**userdel -r **补齐。 - 删除私有组:若该组仅此用户使用,执行delgroup
;避免误删系统组(如sudo、adm等)。
- 删除用户:优先使用deluser --remove-home
- 认证与授权
- 移除 sudo:从sudo组移除(如deluser
sudo 或gpasswd -dsudo );如曾在**/etc/sudoers有显式条目,使用visudo**删除对应行。
- 移除 sudo:从sudo组移除(如deluser
- 计划任务
- 删除用户级 crontab:crontab -u
-r ;检查系统级目录**/etc/cron.d/**等是否存在以该用户为属主或引用的脚本并清理。
- 删除用户级 crontab:crontab -u
- 邮件与临时文件
- 邮件 spool:删除**/var/spool/mail/
与/var/mail/ **(若存在)。 - 临时与缓存:清理**/tmp/
、/var/tmp/ **;按需清理用户缓存目录(如应用层缓存)。
- 邮件 spool:删除**/var/spool/mail/
- 家目录与 SSH 密钥
- 若未使用**–remove-home**,手动删除**/home/
**;如曾备份,先归档再清理。 - 删除 SSH 公钥指纹:从**~/.ssh/authorized_keys**(各主机)及**/etc/ssh/authorized_keys.d/**中移除该用户公钥。
- 若未使用**–remove-home**,手动删除**/home/
- 应用残留与系统配置
- 检查应用专属目录(如**/var/lib/
/ 、/srv**、/opt下以用户属主的文件),按业务规范备份后清理。 - 检查**/etc/passwd**、/etc/shadow、/etc/group、/etc/gshadow是否仍有残留条目(仅删除用户相关行,避免破坏系统组)。
- 检查应用专属目录(如**/var/lib/
- 日志留痕
- 保留审计线索:在**/var/log/auth.log**、/var/log/syslog中搜索**
**相关记录,导出归档,不要就地删除系统日志。
- 保留审计线索:在**/var/log/auth.log**、/var/log/syslog中搜索**
- 验证
- 身份与组:id
(应返回无此用户);getent passwd 、**getent group **为空。 - 计划任务:crontab -u
-l 应提示无任务。 - 邮件队列:mailq或postqueue -p确认无该用户相关队列。
- 家目录与 SSH:确认**/home/
与~/.ssh/authorized_keys**已移除或不再生效。
- 身份与组:id
四 自动化脚本与留痕示例
- 示例脚本(执行前请先在测试环境验证,并完善备份与审批流程)
#!/usr/bin/env bash
set -Eeuo pipefail
USERNAME="${1:-}"
[[ -z "$USERNAME" ]] && { echo "Usage: $0 " ; exit 1; }
LOGFILE="/var/log/user-decommission-$(date +%F).log"
BACKUP_BASE="/backup"
HOME_BACKUP="$BACKUP_BASE/home_${USERNAME}_$(date +%F).tar.gz"
MAIL_BACKUP="$BACKUP_BASE/mail_${USERNAME}_$(date +%F).tar.gz"
exec > >(tee -a "$LOGFILE") 2>&1
echo "=== 开始用户下线 [$USERNAME] 时间: $(date) 操作者: $SUDO_USER ==="
# 0) 备份
echo "[备份] 家目录 -> $HOME_BACKUP"
[[ -d "/home/$USERNAME" ]] && sudo tar czf "$HOME_BACKUP" -C /home "$USERNAME" || echo "[备份] 家目录不存在,跳过"
echo "[备份] 邮件 spool -> $MAIL_BACKUP"
{ sudo tar czf "$MAIL_BACKUP" -C /var/spool/mail "$USERNAME" 2>/dev/null || true; } && \
echo "[备份] 邮件备份完成" || echo "[备份] 邮件 spool 不存在或无权限,跳过"
# 1) 移除 sudo 权限
if getent group sudo | grep -q "\b$USERNAME\b"; then
echo "[权限] 从 sudo 组移除 $USERNAME"
sudo deluser "$USERNAME" sudo || true
fi
# 2) 删除用户(若未使用 --remove-home)
if id "$USERNAME" &>/dev/null; then
echo "[账户] 删除用户 $USERNAME"
sudo deluser --remove-home "$USERNAME" || sudo userdel -r "$USERNAME" || true
fi
# 3) 删除私有组(仅当组为空时)
if getent group "$USERNAME" >/dev/null; then
echo "[组] 尝试删除私有组 $USERNAME"
sudo delgroup "$USERNAME" 2>/dev/null || echo "[组] $USERNAME 组非空或非私有,跳过"
fi
# 4) 清理计划任务
echo "[任务] 清理 crontab"
sudo crontab -u "$USERNAME" -r 2>/dev/null || true
# 5) 清理 SSH 公钥(各主机 authorized_keys)
echo "[SSH] 清理 authorized_keys 引用"
sudo find /home /root -path "*/.ssh/authorized_keys" -type f -exec grep -l "$USERNAME" {} \; 2>/dev/null | \
while read keyfile; do
echo " - 清理 $keyfile 中的 $USERNAME 引用"
sudo sed -i "/$USERNAME/d" "$keyfile"
done || true
# 6) 清理临时文件
echo "[临时] 清理 /tmp /var/tmp 中 $USERNAME 相关"
sudo find /tmp /var/tmp -mindepth 1 -maxdepth 1 -name "*${USERNAME}*" -print -delete 2>/dev/null || true
# 7) 验证
echo "[验证] 身份查询"
! id "$USERNAME" &>/dev/null && echo " - id $USERNAME: 不存在(通过)" || echo " - id $USERNAME: 仍存在(需人工核查)"
echo "[验证] crontab"
sudo crontab -u "$USERNAME" -l &>/dev/null && echo " - crontab 仍存在(需人工核查)" || echo " - crontab 已清空(通过)"
echo "[验证] 邮件队列"
if command -v mailq &>/dev/null; then
mailq | grep -q "$USERNAME" && echo " - 邮件队列仍存在引用(需人工核查)" || echo " - 邮件队列无引用(通过)"
fi
echo "=== 完成 时间: $(date) 归档: $HOME_BACKUP, $MAIL_BACKUP 日志: $LOGFILE ==="
- 使用说明
- 将脚本输出同时写入**/var/log/**归档,便于审计与追溯。
- 在变更单中引用脚本的日志文件路径与备份文件路径,并附上关键验证命令的输出摘要。
五 注意事项
- 权限最小化:全程使用sudo并记录操作人与时间,避免直接以 root 交互式操作。
- 先备份再清理:家目录、邮件、应用数据务必先归档再删除,归档文件集中存放并受访问控制。
- 谨慎处理系统组:不要删除sudo、adm、docker等关键系统组;仅移除用户自身的私有组。
- 审计合规:保留auth.log等关键日志的只读归档,不要就地修改或清空系统日志。
- 变更管控:通过变更单/工单审批,执行后进行复核与验证,并在文档模板中记录回退方案(如备份恢复路径与步骤)。
以上就是关于“ubuntu deluser删除用户后如何文档化”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm