103 lines
3.1 KiB
Markdown
103 lines
3.1 KiB
Markdown
# 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.
|