Add steam headless apps with security docs and verification guide
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
# Steam Headless
|
||||
|
||||
Steam Headless kör en webbaserad Linux-desktop med Steam i container, baserat på LinuxServer image `lscr.io/linuxserver/steam`.
|
||||
|
||||
Imagepinning i denna app:
|
||||
|
||||
- Compose använder immutable referens: `lscr.io/linuxserver/steam:version-f4f48542@sha256:d7b9fbf302e05ae79248d1171fe9751b354f8397eafa1e13a3df0aa6a75de0b4`
|
||||
- `latest` finns i registryt men används inte i repo enligt policy.
|
||||
- Vid verifieringstillfället pekade `latest` på samma release (`version-f4f48542`).
|
||||
|
||||
## Syfte
|
||||
|
||||
- Ge enkel Steam-access via webbläsare i ZimaOS.
|
||||
- Hålla v1 med minsta möjliga privilegier.
|
||||
- Förbereda en separat senare fas för Moonlight-fokuserad streaming.
|
||||
|
||||
## Portar
|
||||
|
||||
- `3000/tcp` (HTTP desktop): `${STEAM_HTTP_PORT:-3000}`
|
||||
- `3001/tcp` (HTTPS desktop): `${STEAM_HTTPS_PORT:-3001}`
|
||||
|
||||
## Volymer
|
||||
|
||||
- `/DATA/AppData/$AppID/config -> /config`
|
||||
|
||||
All Steam-data (profil, cache, installerade spel) lagras under appens egna AppData-sökväg.
|
||||
|
||||
## Privilegier och säkerhet
|
||||
|
||||
Aktiva säkerhetsinställningar i denna app:
|
||||
|
||||
- `security_opt: ["seccomp:unconfined", "no-new-privileges:true"]`
|
||||
- `cap_drop: ["ALL"]`
|
||||
- Ingen `privileged: true`
|
||||
- Ingen `network_mode: host`
|
||||
- Ingen mount av `/var/run/docker.sock`
|
||||
|
||||
Motivering:
|
||||
|
||||
- LinuxServer Steam använder sandbox/bubblewrap-mönster som normalt kräver `seccomp:unconfined` för att spel/launcher ska fungera stabilt.
|
||||
- `no-new-privileges:true` och `cap_drop: ["ALL"]` används för att kompensera med lägsta möjliga capability-yta i övrigt.
|
||||
|
||||
Kända tradeoffs:
|
||||
|
||||
- På vissa Debian/Ubuntu-hostar kan även `apparmor:unconfined` behövas. Detta är inte default här av least-privilege-skäl.
|
||||
- Browser-vägen (KasmVNC) är enkel men ger inte samma latens/gamepad-egenskaper som Moonlight.
|
||||
|
||||
## Säkerhetsavvikelser
|
||||
|
||||
Denna app använder en avvikelse från strikt seccomp-default:
|
||||
|
||||
- `seccomp:unconfined`
|
||||
|
||||
Varför det behövs:
|
||||
|
||||
- För kompatibilitet med LinuxServer Steam runtime och dess sandboxade processer.
|
||||
|
||||
Alternativ som utvärderats:
|
||||
|
||||
- Standard seccomp-profil: blockar delar av förväntad processmodell för Steam/spel.
|
||||
- Full `privileged: true`: avvisat på grund av större attackyta.
|
||||
|
||||
Risker:
|
||||
|
||||
- Minskad syscall-filtrering jämfört med default seccomp-profil.
|
||||
- Om container komprometteras finns större möjlighet att anropa kernel-funktioner än med strikt seccomp.
|
||||
|
||||
Riskreducering:
|
||||
|
||||
- Inga host-network eller docker-socket mounts.
|
||||
- Capability-surface minimerad med `cap_drop: ["ALL"]`.
|
||||
- Isolerad data-path under `/DATA/AppData/$AppID/...`.
|
||||
|
||||
## Driftnoteringar
|
||||
|
||||
- För GPU-acceleration kan extra device-mounts krävas beroende på host och drivrutiner.
|
||||
- Om HTTPS används på `3001` kan webbläsaren visa certifikatvarning vid första anslutning.
|
||||
- Rekommenderad nästa fas: separat Moonlight/Sunshine-spår som opt-in, med egen riskprofil.
|
||||
Reference in New Issue
Block a user