From 97ea7070ccb2dc9458c912176c042312a4c84ab7 Mon Sep 17 00:00:00 2001 From: stephan Date: Sun, 28 Dec 2025 13:49:22 +0100 Subject: [PATCH] docs: enforce pam always available --- CHANGELOG.md | 1 + README.md | 2 +- env.example | 3 ++- project-management/requirements/stories/US_000007.md | 1 + project-management/requirements/stories/US_000008.md | 3 ++- project-management/requirements/stories/US_000021.md | 2 +- project-management/requirements/stories/US_000022.md | 1 + 7 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index be5be33..cd6029e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ By: Codex (GPT-5) | 28.12.2025 | 📝 Req | ID: US_000025 Runbook/Validierungsschritte dokumentiert. By: Codex (GPT-5) | | 28.12.2025 | 📝 Req | ID: US_000025 Validation blocked (Service/IdP nicht bereit). By: Codex (GPT-5) | | 28.12.2025 | 🏗️ Planning | ID: PR-Vorbereitung fuer feature/oidc-validation geplant. By: Codex (GPT-5) | +| 28.12.2025 | 🏗️ Planning | ID: PAM immer aktiv; OIDC optional mit deaktivierter UI-Option dokumentiert. By: Codex (GPT-5) | --- ## Legende diff --git a/README.md b/README.md index c5517c0..be0f1cf 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Then open `http://localhost:8000/` and log in via PAM (default) to start quickly ## Configuration Set in `/etc/skd/env` (see `env.example`): -- `SKD_AUTH_MODE`: `pam` (default) or `oidc`. +- PAM-Login ist immer aktiv. OIDC wird zusaetzlich angeboten, wenn konfiguriert. - `SKD_AUTH_SECRET`: HMAC secret for bearer tokens/cookies (set a strong value). - `SKD_TOKEN_TTL_SECONDS`: token lifetime (default 900s). - `SKD_AUTH_ALLOWED_USERS`: optional comma list of accounts allowed to log in (used for PAM and as an allowlist for OIDC claims). diff --git a/env.example b/env.example index bacefa3..5abcb2c 100644 --- a/env.example +++ b/env.example @@ -3,7 +3,8 @@ SKD_ALLOWED_USERS=child1,child2 SKD_AUTH_SECRET=change-me-secret SKD_TOKEN_TTL_SECONDS=900 -# Auth mode: pam (default) or oidc +# PAM ist immer aktiv; OIDC wird zusaetzlich angeboten, wenn konfiguriert. +# SKD_AUTH_MODE bleibt optional und wird derzeit nicht erzwungen. SKD_AUTH_MODE=pam SKD_AUTH_ALLOWED_USERS= SKD_AUTH_ALLOWED_GROUPS=sudo diff --git a/project-management/requirements/stories/US_000007.md b/project-management/requirements/stories/US_000007.md index 62860cb..415f677 100644 --- a/project-management/requirements/stories/US_000007.md +++ b/project-management/requirements/stories/US_000007.md @@ -13,6 +13,7 @@ Als Admin moechte ich mich per PAM-Login anmelden, damit ich ein Session-Token e - Then die Antwort enthaelt `token` und `expires_in` - And ein Session-Cookie mit dem Token wird gesetzt - And der Login ist ohne OIDC-Konfiguration als Schnellstart moeglich +- And PAM-Login bleibt auch bei aktivem OIDC verfuegbar ## Task-Platzhalter - TASK_000007: PAM login token (Details bei Story-Start) diff --git a/project-management/requirements/stories/US_000008.md b/project-management/requirements/stories/US_000008.md index 41bee96..a71a346 100644 --- a/project-management/requirements/stories/US_000008.md +++ b/project-management/requirements/stories/US_000008.md @@ -8,12 +8,13 @@ Status: Done Als Admin moechte ich mich per OIDC anmelden, damit ich ohne Passwort-Login zugreifen kann. ## Akzeptanzkriterien -- Given `SKD_AUTH_MODE=oidc` und ein erreichbarer OIDC-Provider +- Given OIDC ist konfiguriert und ein erreichbarer OIDC-Provider - When ein GET auf `/login/oidc/start` erfolgt - Then der Nutzer wird zum Provider umgeleitet und ein State-Cookie gesetzt - When der Provider auf `/login/oidc/callback` mit Code und State zurueckleitet - Then der State wird validiert und ein Session-Cookie gesetzt - And bei ungueltigem State erfolgt eine 400-Antwort +- And die OIDC-Option wird deaktiviert, wenn keine OIDC-Konfiguration vorliegt ## Task-Platzhalter - TASK_000008: OIDC auth callback (Details bei Story-Start) diff --git a/project-management/requirements/stories/US_000021.md b/project-management/requirements/stories/US_000021.md index e5e1204..9c8b800 100644 --- a/project-management/requirements/stories/US_000021.md +++ b/project-management/requirements/stories/US_000021.md @@ -10,7 +10,7 @@ Als Operator moechte ich Konfigurationen per ENV setzen, damit Verhalten und Def ## Akzeptanzkriterien - Given Umgebungsvariablen aus `env.example` - When der Service startet -- Then Auth- und Session-Settings werden aus ENV geladen (`SKD_AUTH_MODE`, `SKD_AUTH_SECRET`, `SKD_TOKEN_TTL_SECONDS`, `SKD_AUTH_ALLOWED_USERS`, `SKD_AUTH_ALLOWED_GROUPS`, `SKD_AUTH_PAM_SERVICE`, `SKD_SESSION_COOKIE_NAME`, `SKD_SESSION_COOKIE_SECURE`, `SKD_OIDC_STATE_COOKIE_NAME`) +- Then Auth- und Session-Settings werden aus ENV geladen (`SKD_AUTH_SECRET`, `SKD_TOKEN_TTL_SECONDS`, `SKD_AUTH_ALLOWED_USERS`, `SKD_AUTH_ALLOWED_GROUPS`, `SKD_AUTH_PAM_SERVICE`, `SKD_SESSION_COOKIE_NAME`, `SKD_SESSION_COOKIE_SECURE`, `SKD_OIDC_STATE_COOKIE_NAME`) - And OIDC-Settings werden aus ENV geladen (`SKD_OIDC_ISSUER`, `SKD_OIDC_CLIENT_ID`, `SKD_OIDC_CLIENT_SECRET`, `SKD_OIDC_REDIRECT_URI`, `SKD_OIDC_SCOPES`) - And Allowlist/Defaults werden aus ENV geladen (`SKD_ALLOWED_USERS`, `SKD_DEFAULT_COUNTDOWN`, `SKD_DEFAULT_SOUND`, `SKD_NOTIFY_TIMEOUT`, `SKD_DRY_RUN`) - And Sound/Notify-Pfade sind ueber ENV ueberschreibbar (`SKD_SOUND_PLAYER`, `SKD_SOUND_FILE`, `SKD_NOTIFY_SEND_PATH`) diff --git a/project-management/requirements/stories/US_000022.md b/project-management/requirements/stories/US_000022.md index 77e6326..5056dbb 100644 --- a/project-management/requirements/stories/US_000022.md +++ b/project-management/requirements/stories/US_000022.md @@ -14,6 +14,7 @@ Als Admin moechte ich mich im Web-UI anmelden, Nutzer laden und Aktionen ausfueh - When ich Nutzer lade und eine Aktion sende - Then die Aktionsergebnisse (Steps/Status) werden als Text angezeigt - And Fehlerantworten werden als Text angezeigt +- And die OIDC-Option ist deaktiviert, wenn keine Konfiguration vorliegt ## Task-Platzhalter - TASK_000022: UI login and actions (Details bei Story-Start)