3.1 KiB
3.1 KiB
Steam Moonlight (Scaffold)
Detta är en scaffold för hybridspåret (browser + Moonlight) baserat på josh5/steam-headless.
Kompletterande säkerhetsdokument:
SECURITY.mdMOONLIGHT-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
latestinte 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_PASStill ett starkt lösenord, - verifiera
GPU_CARD_DEVICEochGPU_RENDER_DEVICEför rätt GPU.
- byt
Portar
- Defaultprofil (
steam):${STEAM_WEB_PORT:-8083}/tcpfö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: hostsecurity_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 (
steamdefault): 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.