3.7 KiB
3.7 KiB
ID: DOC_000012 | Version: 0.2.1 | Status: Draft By: Codex (GPT-5)
Architektur
Systemuebersicht
Safe Kiddo Daemon ist ein FastAPI-basierter Service, der lokale Systemkonten verwaltet. Er kombiniert:
- API und Web-UI (FastAPI + Jinja2 Templates)
- Authentifizierung (PAM und optional OIDC)
- Systemaktionen via sudo/usermod/pkill/shutdown
- Update-Client-Integration (externes Update-Service-Backend)
Externe Abhaengigkeiten
- Update-Service (intern): https://git.wlkns.org/stephan/update-webservice
- OIDC-Service (intern): https://git.wlkns.org/stephan/oicd
Integrationspunkte
Update-Service
Die Update-Integration nutzt v1-Endpunkte des Update-Services:
POST /v1/enroll(Enrollment fuer Langzeit-Token)GET /v1/projects/{project_id}/manifestPOST /v1/projects/{project_id}/statusDer Langzeit-Token wird lokal inSKD_UPDATE_TOKEN_FILEgespeichert und fuer Manifest/Status als Bearer-Token verwendet.
OIDC-Service
OIDC nutzt Discovery unter /.well-known/openid-configuration basierend auf SKD_OIDC_ISSUER.
Der Login-Flow tauscht einen Code gegen ein ID-Token (RS256) und validiert es gegen JWKS.
Module und Verantwortlichkeiten
backend/app.py: API-Routing, Web-UI-Endpunkte, Update-Endpunkte.backend/auth.py: PAM-Login, JWT-Handling, Auth-Guards, Allowlists.backend/oidc.py: OIDC Discovery, Token-Exchange, JWT-Validierung.backend/actions.py: Systemaktionen (lock/unlock, notify, sound, shutdown).backend/update.py: Update-Enrollment, Manifest-Check, Update/Rollback-Start, Status/Logs.backend/settings.py: Zentrale ENV-Konfiguration.backend/templates/+backend/static/: Web-UI.scripts/*.sh: Installation, Deployment, Update-Client, Rollback, OIDC-Registration.
Daten- und Kontrollfluss
Login und Auth
POST /loginauthentifiziert via PAM.- JWT wird erstellt und als Cookie oder Bearer-Token genutzt.
- Schutz aller Admin-Endpunkte via
get_current_admin.
OIDC-Flow (optional)
GET /login/oidc/startgeneriert State und leitet zum IdP.- Callback
GET /login/oidc/callbackvalidiert State, tauscht Code gegen ID-Token. - ID-Token wird gegen JWKS geprueft, Username extrahiert, Session gesetzt.
Benutzeraktionen
POST /users/{username}/disableruftactions.disable_user.- Systemaktionen:
usermod -L, optional notify/sound,pkill, optionalshutdown. POST /users/{username}/enablefuehrtusermod -Uaus.
Update-Flow
POST /update/enrollschreibt Langzeit-Token inSKD_UPDATE_TOKEN_FILE.POST /update/checkruft Manifest beim Update-Service ab.POST /update/applystartetscripts/update_client.shasynchron.POST /update/rollbackstartetscripts/rollback_client.shasynchron.- Status/Logs werden lokal in Dateien geschrieben und optional an den Update-Service gemeldet.
Designentscheidungen und Tradeoffs
- Root-Run: Service laeuft als root, da PAM und Systemkommandos Root erfordern.
- JWT + Cookie: Einfache lokale Auth; keine externe Session-Datenbank.
- OIDC optional: OIDC ist optional, PAM bleibt als Fallback aktiv.
- Update als Script: Update/Backup/Swap via Bash-Skripte fuer einfache Ops, Tradeoff: weniger granularer Fehler-Handling.
Erweiterungspunkte
- Auth: Weitere Auth-Mechanismen koennen in
backend/auth.pyintegriert werden. - UI: Templates unter
backend/templates/und CSS inbackend/static/. - Update-Client: Anpassung der Update-Strategie in
scripts/update_client.sh. - Notifications/Sound: Konfigurierbar per
SKD_NOTIFY_SEND_PATH,SKD_SOUND_PLAYER,SKD_SOUND_FILE.
Spezifikationen
- Update-Service OpenAPI:
docs/architecture/openapi.yamlunddocs/architecture/openapi/.
Weitere Dokumente
- Entwicklung:
docs/DEVELOPMENT.md - Deployment:
docs/DEPLOYMENT.md