Files
homelab-infra/docs/AUDIT_2026-05-25_TODO.md
T
Micha b158f9d871 docs(dr): GitHub-Mirror Read-Only Deploy-Key gesichert (2026-06-03)
Zweite der vier P1-Operator-Aufgaben aus dem DR-Tabletop erledigt.

Was passiert ist:
- SSH-Keypair `dr-readonly-2026-06-03` (ed25519, Passphrase-frei) erzeugt
- Public Key in GitHub Repo Settings -> Deploy Keys ohne Write-Access
  hinterlegt (Title `DR Read-Only 2026-06-03`)
- Smoke `git ls-remote git@github.com:michaelkaleschke-spec/homelab-infra.git`
  erfolgreich (HEAD `d947c7f` matched origin/master)
- Private Key offline neben die KOMODO_*-Notiz gelegt
- Arbeitsplatz-Kopie auf dem Operator-PC nach USB-Transfer geloescht

EXTERNAL_DEPENDENCIES.md:
- GitHub-Mirror-Zeile von "noch nicht angelegt" auf "offline gesichert"
  gezogen, inkl. Deploy-Key-Bezeichnung und Smoke-Bestaetigung
- DR-Workstation-Kit-Tabelle: Quartals-Smoke-Befehl mit konkretem
  GIT_SSH_COMMAND-Aufruf dokumentiert
- Review-Zeile 2026-06-03 erweitert

AUDIT_2026-05-25_TODO.md:
- P1-Read-PAT-Eintrag aus offenen Punkten entfernt
- Eintrag unter "Zuletzt geschlossen" mit Wirkung

Zwei P1-Operator-Aufgaben bleiben offen: DR-Workstation-Setup,
Nextcloud-Restore-Test.
2026-06-03 16:13:29 +02:00

8.9 KiB

Audit-Restliste 2026-05-25

Status: kompakte Restliste. Die erledigten Sprint-Tabellen und langen Audit-Snapshots wurden aus der Arbeitskopie entfernt; Detailhistorie liegt in Git.

Aktuell offene Punkte

Prioritaet Punkt Naechster Schritt
P1 DR-Workstation Bare-Metal-Kit auf Gaming-PC einrichten WSL2 installieren, borgbackup apt-installieren, SSH-Key fuer Hetzner Storage Box generieren und auf der Box autorisieren, borg list <hetzner-repo> als Test laufen lassen. Bestandteile dokumentiert in docs/EXTERNAL_DEPENDENCIES.md Abschnitt "DR-Workstation Bare-Metal-Kit"
P1 Nextcloud-Restore-Test scharf laufen lassen Skript ops/restore-tests/nextcloud-restore-test.sh existiert bereits. Einmal ausfuehren, Report unter /mnt/user/backups/restore-reports/nextcloud-...md ablegen. Schliesst die letzte Tier-2-Restore-Luecke
P2 Family-Onboarding praktisch starten Fokus: Vaultwarden als Passwortbasis, Immich-Mobile-Backup auf jedem Handy, Mealie mit erstem Rezept/Einkaufsliste; Ablauf steht in docs/FAMILY_ONBOARDING.md

Restore-Audit Backlog (Stand 2026-06-03)

Ergebnis des Restore-Skills-Audits (Session 2026-06-02/03). Die kritischen Bugfixes (Cron-OR-Semantik, ntfy-Race, Cleanup-Trap, Pfad-Inkonsistenz, Vaultwarden-Token, Paperless-Retry, Header-Validierung, Authelia-Test) sind erledigt und committed. Die folgenden Punkte sind bewusst offener Backlog:

Prioritaet Punkt Status Naechster Schritt
P1 Nextcloud-Restore-Test offen Test nach Paperless-Muster, zusaetzlich occ maintenance:mode-Choreographie und oc_admin-Rolle. Hoechster Lerngewinn unter den fehlenden Tier-2-Tests
P1 Shared PostgreSQL 18 Cluster Restore Drill erledigt 2026-06-03 Globals + 5 DBs (paperless 72t, mailarchiver 1t, authelia 25t, nextcloud 126t, mealie 66t), data_checksums=on, Report /mnt/user/backups/restore-reports/shared-pg-cluster-2026-06-03.md
P1 Komodo-Mongo-Daten-Restore erledigt 2026-06-03 86904 Dokumente erfolgreich restored, Report /mnt/user/backups/restore-reports/komodo-mongo-restore-2026-06-03.md. Nebenbefund: Dump von Mongo 8.0.23, Test auf 7.0.32 — Cross-Version-Warning, fuer Lesetest harmlos
P2 Mailarchiver-Restore-Test erledigt 2026-06-03 Data-Protection-Keys + 645M pg_restore + HTTP 200. Report /mnt/user/backups/restore-reports/mailarchiver-2026-06-03.md
P2 Mealie-Restore-Test erledigt 2026-06-03 Borg-Data + pg_restore + HTTP 200, 3 Rezepte. Report /mnt/user/backups/restore-reports/mealie-2026-06-03.md
P2 Traefik-Restore-Test erledigt 2026-06-03 dynamic/ + letsencrypt/ aus Borg, File-Provider + Ping 200. CF-Token bewusst nicht im Smoke. Report /mnt/user/backups/restore-reports/traefik-2026-06-03.md
P3 Negativ-Test fuer Frische-Check offen Einmal pro Quartal bewusst kaputten Dump einfuettern und pruefen ob homelab-alerts feuert
P3 End-to-end-DR-Drill offen Komplett-Bootstrap Phase 1-5 auf einem Wegwerf-Host; realistisch nur mit zweiter Hardware

Bewusst geparkt

Punkt Entscheidung
Authelia 2FA fuer Operator-UIs (Rest) Tier-1-Operator-UIs sind 2026-06-03 auf two_factor gehoben (files, scrutiny, borg, code). Restliche Admin-UIs (monitoring, glances, glance, speedtest, paperless-gpt, pdf, mail, hermes, sp) bleiben bewusst auf one_factor, bis die finale Auth-Policy steht.
Authelia OIDC fuer Apps Geparkt bis klare Familien-/SSO-Entscheidung
CrowdSec vor Traefik Bewusst nicht umgesetzt: einzige WAN-Tuer ist 443/tcp, Operator-Pfad ist Tailscale, Authelia-regulation: deckt Auth-Brute-Force ab. Neu bewerten bei breiterer Attack Surface.
Nextcloud 2FA/Brute-Force-Haertung UI-Schritt fuer Operator-Account (twofactor_totp aktivieren) bleibt offen. App-weite Familien-Policy gemeinsam mit OIDC entscheiden.
Hermes-Agent NAS-Stack bleibt deaktiviert; Review-Deadline 2026-07-25
USV Anschaffung verschoben; Power-Loss-Risiko bewusst akzeptiert
Zweites Off-site-Ziel Bewusst nicht umgesetzt; neu bewerten bei Hetzner-Problemen, stark wachsendem Datenwert oder geaenderter Betreiber-Praeferenz
Borg append-only auf Hetzner Operator-Entscheidung 2026-06-01: nicht umgesetzt. Der forced-command-Test auf der Storage Box brach Key-Auth und wurde per Passwort-Recovery zurueckgesetzt; Nutzen steht fuer dieses Homelab nicht im Verhaeltnis zum Betriebsrisiko.

Zuletzt geschlossen

  • GitHub-Mirror Read-Only Deploy-Key DR Read-Only 2026-06-03 (ed25519, Passphrase-frei) angelegt: GitHub Repo Settings -> Deploy Keys ohne Write-Access, Smoke git ls-remote erfolgreich (HEAD d947c7f = master), Private-Key offline neben der KOMODO_*-Notiz abgelegt, Arbeitsplatz-Kopie nach USB-Transfer geloescht. Damit ist der DR-Read-Pfad zum privaten Mirror ohne Operator-Browser-Login moeglich.
  • KOMODO_*-Notiz offline gesichert (Operator-Bestaetigung 2026-06-03). Quelle bleibt host-seitige .env unter /mnt/user/services/stacks/komodo/.env bzw. die Drift-Recovery-Kopie unter /mnt/user/appdata/secrets/_komodo_stack_env_recovery_2026-05-04.env. Damit ist der Bare-Metal-Komodo-Bootstrap ohne Vaultwarden moeglich. Eintrag in docs/EXTERNAL_DEPENDENCIES.md Reviews und Pflichtbestandteil im DR-Workstation-Kit nachgezogen.
  • DR-Tabletop 2026-06-03 durchgelaufen, Findings in docs/DR_DRILL_2026-06-03.md (23 Befunde: 1 CRITICAL, 11 HIGH, 8 MED, 3 LOW). Reine Doku-Fixes in DR.md (Phase 0 Mirror-Klarstellung, neue Phase 4 Stufe 0 Docker-Netze, LE-Staging-Hinweis, Komodo-Stolperfallen, App-DB-Verify in Phase 5) und in EXTERNAL_DEPENDENCIES.md (DR-Workstation-Kit, KOMODO_*-Notiz und GitHub-Read-PAT als offene Bootstrap-Bloecke) sind im selben Aenderungsblock erledigt. Operator-Aufgaben (Notiz/PAT/WSL-Setup) wandern als P1 in die offenen Punkte.
  • Authelia ACL: borg.kaleschke.info und code.kaleschke.info 2026-06-03 in den two_factor-Block der Repo-Baseline aufgenommen. Beide UIs haben effektiv Host-/Backup-Zugriff (Borg-Restore-Scope inkl. /local/secrets, code-server mit Workspaces). Wirkung erst nach manuellem Merge in /mnt/user/appdata/authelia/config/configuration.yml, docker restart authelia und Smoke-Test auf einer der vier 2FA-Domains; services/authelia-diff.sh muss exit 0 liefern. TOTP-Enrollment des Operator-Accounts ist Voraussetzung, sonst Login-Sperre.
  • Alt-Volumes nach Burn-in freigegeben und reversibel archiviert: Shared PG17, Mealie PG17, Nextcloud PG17 und Immich pgvecto.rs liegen seit 2026-06-02 unter /mnt/user/appdata/_archive/pg18-immich-rollback-volumes-20260602; Manifest auf dem Host: /mnt/user/appdata/_archive/pg18-immich-rollback-volumes-20260602/MANIFEST.txt. Keine harte Loeschung, keine aktiven Container-Mounts auf die alten Pfade.
  • Externer Betreibercheck vorbereitet: docs/EXTERNAL_OPERATOR_RUNBOOK.md und ops/maintenance/check-external-operator.sh; Live-Baseline am 2026-06-01: FRITZ!OS 154.08.25, keine Public-AAAA-Records fuer *.kaleschke.info, Host ohne globale Provider-IPv6, WAN 443/tcp offen und 80/tcp/222/tcp geschlossen.
  • FRITZ!Box-Servicefenster UI-seitig abgeschlossen: FRITZ!Box-Dienste aus dem Internet sind aus (HTTPS auf FRITZ!Box-UI, FTP/FTPS auf Speichermedien), aktive WAN-Freigabe bleibt nur 443/tcp -> 192.168.178.58, keine aktive IPv6-Freigabe sichtbar, UPnP-Selbstfreigaben aus.
  • FRITZ!Box-Konfig-Backup exportiert und extern/off-system in Vaultwarden abgelegt: Einstellungen_FRITZ.Box_7590_154.08.25_01.06.26_1318.export; Kennwort und Datei bleiben ausserhalb des Repos.
  • Hetzner-Account-Hygiene erledigt: externe Kontakt-/Rechnungs-Mail bestaetigt, Zahlung ok, 2FA mit Google Authenticator aktiv, Recovery Key offline ausgedruckt.
  • Hetzner Storage Box geprueft: storage-box-1, u565255.your-storagebox.de, SSH-Port 23, SSH aktiv, SMB/WebDAV aus, 64,94 GB / 1 TB belegt; Borg-UI-Key und separater Maintenance-Key funktionieren wieder nach Passwort-Recovery. Borg append-only ist bewusst nicht umgesetzt.
  • Family-View Dashboard ist repo-seitig gebaut: monitoring/grafana/dashboards/family-status.json zeigt Family-App-Uptime, Backup-Alter, TLS-Restlaufzeit, Critical-Container und Image-Drift.
  • Borg-Nachlauf nach dem 2026-05-31-Sprint ist belegt: Archiv Taegliche-Sicherung-2026-06-01T04:30:26.913, 101669 Dateien, rc=0; Freshness-Check am 2026-06-01: Critical 0, Warnings 0.
  • H:/ Nearline-Pull am 2026-06-01 repariert und manuell validiert: kuratierte Borg-Dumps Exit 0, Gitea-Bundles Exit 1 (Robocopy-Erfolg mit Kopien), Report nearline-pull-2026-06-01-082553.md.
  • Immich-, Paperless-, Gitea- und Vaultwarden-Restore-Pfade sind belegt.
  • H:/ Nearline-Pull laeuft seit 2026-05-28 als Windows Scheduled Task.
  • FRITZ!Box-Portfreigaben sind bereinigt: WAN-seitig bleibt 443/tcp.
  • InfluxDB 3 Core ist effektiv nur auf 127.0.0.1:8181 gebunden.
  • Renovate ist produktiv, Major-Updates werden bewusst manuell entschieden.
  • Policy-Check bleibt ohne Criticals; bekannte Root-Ausnahmen sind dokumentiert.