setup-backup.sh hinzugefügt

This commit is contained in:
2026-05-31 12:07:10 +00:00
parent a58499e836
commit 85ecec023e
+95
View File
@@ -0,0 +1,95 @@
#!/bin/bash
# =============================================================================
# Einmaliges Setup-Skript läuft auf dem Docker-Host als root
# Richtet einen eingeschränkten Backup-User ein
# =============================================================================
set -euo pipefail
BACKUP_USER="borgbackup"
PI_PUBKEY="${1:-}" # Optionaler öffentlicher Key als Argument
echo "=== Docker-Host: Backup-User Setup ==="
# --- Backup-User anlegen ---
echo "[1/3] Lege Backup-User '${BACKUP_USER}' an..."
if id "$BACKUP_USER" &>/dev/null; then
echo " User existiert bereits."
else
useradd \
--system \
--create-home \
--home-dir "/home/${BACKUP_USER}" \
--shell /bin/bash \
--comment "BorgBackup Pull User" \
"$BACKUP_USER"
echo " User angelegt."
fi
# --- SSH-Verzeichnis einrichten ---
mkdir -p "/home/${BACKUP_USER}/.ssh"
chmod 700 "/home/${BACKUP_USER}/.ssh"
touch "/home/${BACKUP_USER}/.ssh/authorized_keys"
chmod 600 "/home/${BACKUP_USER}/.ssh/authorized_keys"
chown -R "${BACKUP_USER}:${BACKUP_USER}" "/home/${BACKUP_USER}/.ssh"
# --- Öffentlichen Key eintragen ---
echo "[2/3] SSH-Key konfigurieren..."
if [ -n "$PI_PUBKEY" ]; then
# Key direkt als Argument übergeben
AUTHORIZED_KEY="$PI_PUBKEY"
else
echo ""
echo " Füge den öffentlichen Key des Pi ein (Inhalt von /home/pi/.ssh/borg_pull.pub):"
read -r AUTHORIZED_KEY
fi
# Key mit Einschränkungen eintragen:
# - no-port-forwarding: kein Tunnel
# - no-X11-forwarding: kein X11
# - no-agent-forwarding: kein Agent-Forwarding
# - no-pty: kein interaktives Terminal
RESTRICTED_KEY="no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ${AUTHORIZED_KEY}"
# Prüfen ob Key schon eingetragen
if grep -qF "$AUTHORIZED_KEY" "/home/${BACKUP_USER}/.ssh/authorized_keys" 2>/dev/null; then
echo " Key bereits eingetragen."
else
echo "$RESTRICTED_KEY" >> "/home/${BACKUP_USER}/.ssh/authorized_keys"
echo " Key mit Einschränkungen eingetragen."
fi
# --- sudo-Rechte für lesenden Zugriff ---
echo "[3/3] Konfiguriere sudo-Rechte..."
SUDOERS_FILE="/etc/sudoers.d/borgbackup"
cat > "$SUDOERS_FILE" << 'EOF'
# Erlaubt borgbackup-User lesenden Zugriff auf /var/lib/docker/volumes und /etc
# NOPASSWD damit sshfs ohne Passwort funktioniert
borgbackup ALL=(root) NOPASSWD: /bin/tar, /usr/bin/find
EOF
chmod 440 "$SUDOERS_FILE"
visudo -cf "$SUDOERS_FILE" && echo " sudoers-Datei OK." || {
rm "$SUDOERS_FILE"
echo " FEHLER: sudoers-Datei ungültig, wurde entfernt."
exit 1
}
# --- Firewall-Hinweis ---
echo ""
echo "=== Setup abgeschlossen! ==="
echo ""
echo "Der User '${BACKUP_USER}' kann sich jetzt per SSH einloggen."
echo "Der Pi kann / read-only mounten und Backups ziehen."
echo ""
echo "Optionale Härtung SSH-Zugriff auf Pi-IP einschränken."
echo "In /etc/ssh/sshd_config hinzufügen:"
echo ""
echo " Match User ${BACKUP_USER}"
echo " AllowUsers ${BACKUP_USER}@<PI-IP-ADRESSE>"
echo " ForceCommand internal-sftp"
echo ""
echo "HINWEIS: ForceCommand internal-sftp würde sshfs erlauben aber"
echo " Shell-Zugriff verhindern. Für sshfs ist dies ausreichend."
echo ""