centos

centos僵尸进程如何备份

小樊
39
2025-11-22 02:52:26
栏目: 智能运维

CentOS僵尸进程的备份与取证

一、核心原则

二、取证与备份清单

三、安全处置与修复

四、一键取证脚本示例

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

OUTDIR="/var/log/zombie_forensics/$(date +%F_%H-%M-%S)"
mkdir -p "$OUTDIR"

# 1) 僵尸进程清单
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/ {printf "PID=%s PPID=%s CMD=%s\n", $1, $2, substr($0, index($0,$4))}' \
  > "$OUTDIR/zombies.txt"

# 2) 进程树片段(含父进程上下文)
if command -v pstree >/dev/null 2>&1; then
  pstree -p | grep -A5 -B5 Z > "$OUTDIR/pstree_Z.txt" || true
fi

# 3) 命令行与资源快照(针对僵尸及其父进程)
for pid in $(awk '$3 ~ /Z/ {print $1}' "$OUTDIR/zombies.txt"); do
  ps -o pid,ppid,stat,cmd,%cpu,%mem --no-headers -p "$pid" >> "$OUTDIR/zombie_cmd.txt" 2>/dev/null || true
  ppid=$(ps -o ppid= -p "$pid" 2>/dev/null || echo "UNKNOWN")
  echo "=== Parent PID: $ppid ===" >> "$OUTDIR/parent_info.txt"
  ps -o pid,ppid,stat,cmd,%cpu,%mem --no-headers -p "$ppid" >> "$OUTDIR/parent_info.txt" 2>/dev/null || true
done

# 4) 打开文件与网络连接(针对父进程)
for ppid in $(awk '$3 ~ /Z/ {print $2}' "$OUTDIR/zombies.txt" | sort -u); do
  lsof -p "$ppid" > "$OUTDIR/parent_${ppid}_files.txt" 2>/dev/null || true
done

# 5) systemd 单元状态与日志(若可用)
if command -v systemctl >/dev/null 2>&1; then
  for svc in $(systemctl list-units --type=service --state=running --no-pager | awk '{print $1}'); do
    if systemctl is-active --quiet "$svc"; then
      systemctl status "$svc" -l > "$OUTDIR/svc_${svc}.status" 2>/dev/null || true
      journalctl -u "$svc" -b --since "$(date -d '1 hour ago' +%F_%H:%M:%S)" \
        > "$OUTDIR/svc_${svc}.journal" 2>/dev/null || true
    fi
  done
fi

# 6) 打包归档
tar czvf "$OUTDIR.tar.gz" -C "$(dirname "$OUTDIR")" "$(basename "$OUTDIR")"
echo "Zombie forensics saved to: $OUTDIR.tar.gz"

提示:

0
看了该问题的人还看了