#!/usr/bin/env bash # Instala el servicio systemd packet-capture (dumpcap ring buffer ~10 min). # Crea el directorio de captura propiedad del usuario, copia el unit, lo activa # y muestra su estado. Requiere privilegios sudo (los pedirá si no están en caché). # # Uso: install-capture.sh [interfaz] (por defecto enp5s0) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" UNIT_SRC="$SCRIPT_DIR/packet-capture.service" UNIT_DST="/etc/systemd/system/packet-capture.service" CAP_DIR="/var/log/pktcap" USER_NAME="${SUDO_USER:-$USER}" IFACE="${1:-enp5s0}" echo "==> packet-capture install (interfaz: $IFACE, usuario: $USER_NAME)" if ! command -v dumpcap >/dev/null 2>&1; then echo "ERROR: dumpcap no instalado. Instalar: sudo apt install wireshark" >&2 exit 1 fi # 1. Directorio de captura, propiedad del usuario que ejecuta dumpcap sudo mkdir -p "$CAP_DIR" sudo chown "$USER_NAME:$USER_NAME" "$CAP_DIR" sudo chmod 750 "$CAP_DIR" echo " dir: $CAP_DIR (owner $USER_NAME)" # 2. Instalar el unit, ajustando interfaz y usuario sudo cp "$UNIT_SRC" "$UNIT_DST" sudo sed -i \ -e "s|-i enp5s0|-i $IFACE|" \ -e "s|^User=.*|User=$USER_NAME|" \ -e "s|^Group=.*|Group=$USER_NAME|" \ "$UNIT_DST" echo " unit: $UNIT_DST" # 3. Activar y arrancar sudo systemctl daemon-reload sudo systemctl enable --now packet-capture.service sleep 2 echo "==> Estado:" sudo systemctl --no-pager --full status packet-capture.service | head -12 || true echo "==> Capturas en $CAP_DIR:" ls -lh "$CAP_DIR" 2>/dev/null | tail -3 || true echo "==> Parar: sudo systemctl stop packet-capture.service" echo "==> Logs: journalctl -u packet-capture.service -f"