Add steam headless apps with security docs and verification guide
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user