# Security Model Detta dokument beskriver säkerhetsmodellen för `steam-moonlight` och hur risker begränsas mellan default- och Moonlight-profil. ## Mål - Hålla default-profilen (`steam`) så nära least-privilege som möjligt. - Göra Moonlight-profil (`steam-moonlight`) explicit opt-in med tydlig riskaccept. - Hålla state/data begränsad till `/DATA/AppData/$AppID/...`. ## Tillitsgränser - Host OS och Docker daemon är högsta trust-zon. - Containern är lägre trust-zon. - Moonlight-klienter och LAN-trafik är extern yta. ## Threat Model Primära hot: - Kontoövertagande via svagt `SUNSHINE_PASS`. - Lateral movement via `network_mode: host` (Moonlight-profil). - Ökad impact vid containerkompromiss p.g.a. extra capabilities och device passthrough. - Dataförlust vid felaktig mount-path. ## Säkerhetskontroller Gemensamt: - Immutable image pin (`tag + digest`). - Ingen docker socket mount. - Ingen `privileged: true`. - Data paths begränsade till `/DATA/AppData/$AppID/...`. Defaultprofil (`steam`): - `cap_drop: ["ALL"]` - `no-new-privileges:true` - Ingen `host` network - Inga device mounts - Sunshine avstängd som default (`ENABLE_SUNSHINE=false`) Moonlightprofil (`steam-moonlight`): - Högriskkontroller isolerade till `profiles: ["moonlight"]` - `cap_drop: ["ALL"]` + minsta kända `cap_add` - Explicit device lista (`/dev/fuse`, `/dev/uinput`, `/dev/dri/*`) - `seccomp:unconfined` och `apparmor:unconfined` endast i Moonlight-profilen ## Fail-Closed Regler - Moonlight ska inte startas om `SUNSHINE_PASS` är default eller tomt. - Moonlight ska inte startas om GPU-device mapping saknas eller är fel. - Vid osäkerhet, kör endast defaultprofilen (`steam`). ## Operativa krav - Exponera inte Sunshine admin/UI mot internet. - Begränsa åtkomst till LAN/VPN och pålitliga klienter. - Rota image-pins kontrollerat och verifiera digest före uppdatering. - Följ checklistan i `MOONLIGHT-RUNTIME-CHECKLIST.md` före varje aktivering. ## Incidentrespons (minimum) Vid misstänkt kompromiss: 1. Stoppa Moonlight-profilen direkt. 2. Roterar `SUNSHINE_PASS` och övriga credentials. 3. Granska hostens nätverksexponering och Docker logs. 4. Byt image till känd god pin och starta om endast defaultprofil.