Files
2026-05-31 12:07:10 +00:00

96 lines
3.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 ""