Add steam headless apps with security docs and verification guide

This commit is contained in:
Joachim Friberg
2026-03-18 21:52:15 +01:00
parent 69011271fc
commit c1e347e5e0
8 changed files with 670 additions and 0 deletions
+102
View File
@@ -0,0 +1,102 @@
# Steam Moonlight (Scaffold)
Detta är en scaffold för hybridspåret (browser + Moonlight) baserat på `josh5/steam-headless`.
Kompletterande säkerhetsdokument:
- `SECURITY.md`
- `MOONLIGHT-RUNTIME-CHECKLIST.md`
## Syfte
- Ge en låg-risk default för browserbaserad Steam-desktop.
- Ge en separat opt-in-profil för Moonlight/Sunshine.
- Isolera högriskinställningar till en explicit profil (`moonlight`).
## Imagepinning
- Compose använder immutable referens:
- `josh5/steam-headless:debian-0.2.0@sha256:540366bee31297c5679a5006a84dbca039ca62aaab695852b51b5f62dffd2c14`
- Repon kräver att `latest` inte används i compose.
## Profiler
- `steam` (default): browser-first, lägre risk, ingen host network.
- `steam-moonlight` (`profiles: ["moonlight"]`): aktiverar Sunshine + controller/GPU passthrough med högre privilegier.
## Körning
- Default (rekommenderad start):
- `docker compose -f Apps/steam-moonlight/docker-compose.yaml up -d steam`
- Moonlight (opt-in):
- `docker compose -f Apps/steam-moonlight/docker-compose.yaml --profile moonlight up -d steam-moonlight`
- Innan Moonlight aktiveras:
- byt `SUNSHINE_PASS` till ett starkt lösenord,
- verifiera `GPU_CARD_DEVICE` och `GPU_RENDER_DEVICE` för rätt GPU.
## Portar
- Defaultprofil (`steam`):
- `${STEAM_WEB_PORT:-8083}/tcp` för webdesktop.
Moonlightprofilen använder `network_mode: host` och tar därför nätverk direkt från host.
## Volymer
- Defaultprofil:
- `/DATA/AppData/$AppID/home -> /home/default`
- `/DATA/AppData/$AppID/games -> /mnt/games`
- Moonlightprofil:
- `/DATA/AppData/$AppID/moonlight-home -> /home/default`
- `/DATA/AppData/$AppID/moonlight-games -> /mnt/games`
## Privilegier och säkerhet
Gemensamt:
- `no-new-privileges:true`
Defaultprofil (`steam`, lägre risk):
- `cap_drop: ["ALL"]`
- Ingen `network_mode: host`
- Inga device mounts
- Ingen Sunshine-aktivering som default
Moonlightprofil (högrisk):
- `ipc: host`
- `security_opt: ["seccomp:unconfined", "apparmor:unconfined", "no-new-privileges:true"]`
- `cap_drop: ["ALL"]` + `cap_add: [NET_ADMIN, SYS_ADMIN, SYS_NICE]`
- `network_mode: host`
- Device mounts: `/dev/fuse`, `/dev/uinput`, `/dev/dri/*`
- `device_cgroup_rules: ['c 13:* rmw']`
## Säkerhetsavvikelser
Denna app innehåller avsiktliga avvikelser, primärt i `moonlight`-profilen.
Varför det behövs:
- Moonlight/Sunshine och fysisk controller-input kräver i praktiken host-nära åtkomst i denna containerfamilj.
Alternativ som utvärderats:
- Browser-only (`steam` default): lägre risk men sämre latens/gamepad.
- Full `privileged: true`: avvisat i scaffolden för att begränsa attackytan.
Risker:
- Host network minskar nätverksisolering.
- Extra capabilities och device-passthrough ökar konsekvensen vid containerkompromettering.
Riskreducering:
- Högrisk är opt-in via profil, inte default.
- Ingen docker socket-mount används.
- Persistent data är begränsad till `/DATA/AppData/$AppID/...`.
- Defaultprofilen droppar alla Linux capabilities.
## Status
Scaffolden är avsedd för kontrollerad vidareutveckling och verifiering, inte som slutlig hardened release.