chore(master): run the master as a non-root user #25

Closed
opened 2026-10-13 07:17:06 +00:00 by shcizo · 0 comments
Owner

Beskrivning

Mastern använder samma image som agenten och kör därför som root, trots att den varken har Docker-socketen eller några skrivbara monteringar. Ett säkerhetshål i UI:t, webhooken eller OIDC-flödet ger i dag root i containern. Problemet gäller bara mastern; agenten behöver root för att komma åt Docker-socketen.

Tekniska noteringar

  • USER i Dockerfile går inte att använda, eftersom samma image också kör agenten, och agenten behöver socketen. I stället sätts user: i deploy/master.stack.yml (och i exempel-compose i README om sådant finns).
  • /run/secrets/* har läsrättighet för alla som standard. Portarna 8080 och 8090 är över 1024. Ingen skrivbar katalog behövs.
  • Hake: DOCKER_CONFIG/config.json från docker login har normalt rättigheterna 0600 och ägs av användaren på värden. Antingen sätts user: till den användarens uid:gid, eller så dokumenteras att filen måste vara läsbar för den valda uid:n. main loggar redan registry_credentials med information om filen finns. Det borde också loggas om den går att läsa, så att felet inte bara syns som "lookup failed" i UI:t.
  • Verifiera att inget i mastern skriver till disk, som temporära filer eller HOME. ggcr läser ~/.docker om DOCKER_CONFIG saknas, och HOME kan då vara /.

Scope

Ingår: stackfilen, README och loggraden. Ingår inte: separata images för master och agent.

## Beskrivning Mastern använder samma image som agenten och kör därför som root, trots att den varken har Docker-socketen eller några skrivbara monteringar. Ett säkerhetshål i UI:t, webhooken eller OIDC-flödet ger i dag root i containern. Problemet gäller bara mastern; agenten behöver root för att komma åt Docker-socketen. ## Tekniska noteringar - `USER` i Dockerfile går inte att använda, eftersom samma image också kör agenten, och agenten behöver socketen. I stället sätts `user:` i `deploy/master.stack.yml` (och i exempel-compose i README om sådant finns). - `/run/secrets/*` har läsrättighet för alla som standard. Portarna 8080 och 8090 är över 1024. Ingen skrivbar katalog behövs. - **Hake:** `DOCKER_CONFIG/config.json` från `docker login` har normalt rättigheterna `0600` och ägs av användaren på värden. Antingen sätts `user:` till den användarens uid:gid, eller så dokumenteras att filen måste vara läsbar för den valda uid:n. `main` loggar redan `registry_credentials` med information om filen finns. Det borde också loggas om den går att läsa, så att felet inte bara syns som "lookup failed" i UI:t. - Verifiera att inget i mastern skriver till disk, som temporära filer eller `HOME`. ggcr läser `~/.docker` om `DOCKER_CONFIG` saknas, och `HOME` kan då vara `/`. ## Scope Ingår: stackfilen, README och loggraden. Ingår inte: separata images för master och agent.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shcizo/package-updater#25