ubuntu

ubuntu deluser删除用户后如何文档化

小樊
43
2025-11-15 13:30:52
栏目: 智能运维

Ubuntu 删除用户后的文档化与清理清单

一 文档化目标与范围

二 建议的文档模板

三 清理与验证要点清单

四 自动化脚本与留痕示例

#!/usr/bin/env bash
set -Eeuo pipefail

USERNAME="${1:-}"
[[ -z "$USERNAME" ]] && { echo "Usage: $0 <username>"; 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 ==="

五 注意事项

0
看了该问题的人还看了