Files

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.