# 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.