diff --git a/docs/AUTHELIA_OIDC_PLAN.md b/docs/AUTHELIA_OIDC_PLAN.md index 099bbf0..ba1f424 100644 --- a/docs/AUTHELIA_OIDC_PLAN.md +++ b/docs/AUTHELIA_OIDC_PLAN.md @@ -83,7 +83,7 @@ docker exec authelia authelia crypto hash generate pbkdf2 \ | **1 (Proof) ERLEDIGT 2026-06-06** | Grafana (monitoring) | `monitoring.kaleschke.info` | nativ (`generic_oauth`) | `two_factor` | niedrig | **Live + Login verifiziert.** Authelia-Client `grafana` (host), Secret als Datei `/mnt/user/appdata/secrets/grafana_oidc_client_secret` via `__FILE`, ForwardAuth-Middleware durch OIDC ersetzt, lokaler Admin bleibt Fallback | | 2 | Immich | `immich.kaleschke.info` | nativ | s. u. (Familie) | mittel | Familien-Fotos, viele Nutzer; nach erfolgreichem Proof | | 3 | Nextcloud | `cloud.kaleschke.info` | App `user_oidc` | s. u. | mittel | klassischer OIDC-Login parallel zu lokalem Admin | -| 4 | Mealie | `mealie.kaleschke.info` | nativ | s. u. | niedrig | klein, gut zum Familien-Rollout | +| **4 ERLEDIGT 2026-06-06** | Mealie | `mealie.kaleschke.info` | nativ | `one_factor` | niedrig | **Live + Login verifiziert.** OIDC-Env additiv (lokaler Login bleibt), Secret als Stack-ENV `${MEALIE_OIDC_CLIENT_SECRET}`, `extra_hosts` noetig (s. Gotchas) | | 5 | Paperless-ngx | `paperless.kaleschke.info` | `django-allauth` (Umgebungsvariablen) | `two_factor` | mittel | dokumentenlastig, Operator-nah | **Nicht OIDC:** Vaultwarden hat kein Standard-Endnutzer-OIDC (SSO ist Enterprise/Bitwarden-Feature) -> bleibt eigener Login. ntfy bleibt wie gehabt. @@ -157,6 +157,26 @@ GF_AUTH_GENERIC_OAUTH_ALLOW_SIGN_UP=true --- +## Gotchas (aus dem realen Rollout 2026-06-06) + +- **`extra_hosts` ist Pflicht fuer App-Container, die selbst zu Authelia connecten** + (OIDC-Discovery/Token sind Server-zu-Server): Der App-Container loest + `auth.kaleschke.info` per Docker-DNS oft nicht auf -> `httpx.ConnectTimeout` / + 500 beim OAuth-Start. Fix wie Komodo: + ```yaml + extra_hosts: + - "auth.kaleschke.info:192.168.178.58" + ``` + Cert validiert weiter (SNI/Hostname bleibt gleich, nur die IP wird gemappt). + Gilt fuer Mealie (bestaetigt) und sehr wahrscheinlich Paperless/Immich/Nextcloud. +- **Additiv heisst additiv:** OIDC als zusaetzlichen Login aktivieren, lokalen + Login NICHT abschalten, `AUTO_REDIRECT`/Force-OIDC aus -> kein Lockout. +- **Account-Linking per E-Mail:** Apps verknuepfen den OIDC-User i. d. R. per + E-Mail-Claim. Stimmt die Authelia-E-Mail mit dem App-Account, wird verknuepft; + sonst legt die App (bei aktivem Signup) einen neuen User an. +- **Secret-Mechanik je App verschieden:** Grafana `__FILE` (Docker-Secret), + Mealie Stack-ENV `${...}`. Hash immer in der Authelia-Host-Config, Klartext nie ins Repo. + ## Offene Operator-Entscheidungen vor breitem Rollout 1. Familien-Apps `one_factor` vs `two_factor` (Lockout-Risiko fuer Familie ohne TOTP). diff --git a/docs/MASTER_TODO.md b/docs/MASTER_TODO.md index 9e64aed..6616941 100644 --- a/docs/MASTER_TODO.md +++ b/docs/MASTER_TODO.md @@ -26,7 +26,7 @@ Host-/Entscheidungsaufgaben beim **Operator**. | Family-Onboarding erster Termin | Operator | Checkliste ist fertig (`docs/FAMILY_ONBOARDING.md` Abschnitt "Erster Onboarding-Termin"). Operator legt fest, welche Personen/Geraete real verfuegbar sind, und arbeitet die Reihenfolge Vaultwarden -> Immich -> Mealie pro Person ab | `docs/FAMILY_ONBOARDING.md`, `docs/AUDIT_2026-05-25_TODO.md` | | Restore-Test Unraid OS Flash (Stick-Boot) | Operator | Artefakt-Validierung am 2026-06-05 erledigt (`ops/maintenance/check-unraid-flash-backup.sh`, sha256 OK, 8 Kern-Configs). **Verbleibt:** physischer Ersatzstick-Boot-Test, wenn ein Wegwerf-Stick bereitliegt | `docs/RESTORE_MATRIX.md` Abschnitt "Unraid OS Flash" | | Restore-Test Tailscale | Operator | Runbook-Stub abarbeiten: State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `docs/RESTORE_MATRIX.md` Abschnitt "Tailscale" | -| Authelia OIDC fuer Apps | Operator/Claude | **Stufe-1-Proof Grafana ERLEDIGT 2026-06-06** (Login verifiziert): Authelia-Client `grafana` + Secret-Datei + `__FILE`, ForwardAuth durch OIDC ersetzt. Muster steht. **Naechster Schritt:** Familien-Apps nach `docs/AUTHELIA_OIDC_PLAN.md` (Immich -> Nextcloud -> Mealie -> Paperless); vorher Policy `one_factor` vs `two_factor` fuer Familie + Gruppen/Rollen-Mapping entscheiden | `docs/AUTHELIA_OIDC_PLAN.md`, `security/authelia/configuration.yml` | +| Authelia OIDC fuer Apps | Operator/Claude | **Live + verifiziert 2026-06-06: Grafana (admin) + Mealie (family, `one_factor`, additiv).** Muster + Gotchas (`extra_hosts`, additiv, E-Mail-Linking) in `docs/AUTHELIA_OIDC_PLAN.md`. **Verbleibt:** Paperless (env/allauth) -, Immich (Admin-UI/Config-File) -, Nextcloud (`user_oidc`-App/occ) -. Familien-Accounts in Authelia (nur `micha` existiert) folgen beim Onboarding | `docs/AUTHELIA_OIDC_PLAN.md`, `security/authelia/configuration.yml` | --- diff --git a/docs/SECRETS_MAP.md b/docs/SECRETS_MAP.md index b537ee0..1ffba2c 100644 --- a/docs/SECRETS_MAP.md +++ b/docs/SECRETS_MAP.md @@ -54,6 +54,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb | Monitoring Grafana | Admin Password | `/mnt/user/appdata/secrets/monitoring_grafana_admin_password.txt` -> Docker Secret `/run/secrets/monitoring_grafana_admin_password` -> `GF_SECURITY_ADMIN_PASSWORD__FILE` | aktiv | | Monitoring Grafana -> InfluxDB | Datasource Token | `/mnt/user/appdata/secrets/monitoring_grafana_influxdb_token.txt` -> Docker Secret `/run/secrets/monitoring_grafana_influxdb_token` | aktiv | | Grafana OIDC (Authelia) | Client Secret | `/mnt/user/appdata/secrets/grafana_oidc_client_secret` (Klartext, chmod 600) -> Docker Secret `/run/secrets/grafana_oidc_client_secret` -> `GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET__FILE`. Zugehoeriger pbkdf2-Hash liegt im Authelia-Host-Config-Client `grafana` (kein Wert im Repo) | aktiv (2026-06-06) | +| Mealie OIDC (Authelia) | Client Secret | Stack-ENV `${MEALIE_OIDC_CLIENT_SECRET}` in `/mnt/user/services/stacks/mealie/apps/mealie/.env` (Komodo-Stack-ENV); pbkdf2-Hash im Authelia-Host-Config-Client `mealie` (kein Wert im Repo) | aktiv (2026-06-06) | | Renovate Bot | Gitea Service-Account PAT | `/mnt/user/appdata/secrets/renovate_token.txt` -> Host-Datei (chmod 600), gelesen von `ops/renovate/run-renovate.sh` und an Renovate-Container als `RENOVATE_TOKEN` weitergegeben | aktiv nach Operator-Setup (siehe `docs/RENOVATE.md`) | | n8n | Encryption Key fuer interne Credential-Verschluesselung | `/mnt/user/appdata/secrets/n8n_encryption_key.txt` (chmod 600) -> Komodo Stack ENV `${N8N_ENCRYPTION_KEY}`; kein `_FILE`-Support im Upstream-Image | aktiv | | n8n | GMX IMAP Login (Mail-Trigger Workflow) | n8n Credentials Store (Typ `imap`), nur in `/mnt/user/appdata/n8n/data` mit `N8N_ENCRYPTION_KEY` verschluesselt | aktiv |