Harden container: mount data volume outside /app and make /app read-only #143

Open
opened 2026-07-20 21:31:27 +00:00 by robbertbos · 0 comments
Owner

Idee

De backend-container schrijft runtime-data (geparkeerde bijlagen; in dev ook de SQLite-db) nu onder /app/data (data_dir="./data" + WORKDIR /app). Zolang de schrijfbare datamap ín /app zit, kan /app niet read-only gemount worden.

Voorstel: mount het persistente volume op een pad buiten /app (bijv. /data) via WAGGLE_DATA_DIR=/data, en maak de /app-filesystemlaag read-only/immutable. Dat is een gangbare container-hardening (readOnlyRootFilesystem / read-only /app) en voorkomt bovendien een toekomstige botsing als het image ooit zelf iets onder /app/data zou shippen.

Werk

  • PVC-mountpad naar /data (of /var/lib/waggle), WAGGLE_DATA_DIR zetten. De code ondersteunt dit al; de SQLite-db volgt sinds recent data_dir.
  • securityContext: readOnlyRootFilesystem: true op de backend-container; fsGroup/ownership zo dat uid 10001 (waggle) op het volume kan schrijven (een verse mount overschaduwt de image-chown).
  • Nagaan of er nog andere schrijfpaden binnen /app zijn (bijv. tmp/caches) die dan een emptyDir nodig hebben.
  • containers/backend/Containerfile + docs/deployment.md bijwerken (mountpad /app/data -> extern pad).

Context

Komt uit de review-discussie rond de kaartloze-outbox-bijlagen (PR #140, "nieuw bericht plannen" fase 2a).

## Idee De backend-container schrijft runtime-data (geparkeerde bijlagen; in dev ook de SQLite-db) nu onder `/app/data` (`data_dir="./data"` + `WORKDIR /app`). Zolang de schrijfbare datamap ín `/app` zit, kan `/app` niet read-only gemount worden. Voorstel: mount het persistente volume op een pad **buiten** `/app` (bijv. `/data`) via `WAGGLE_DATA_DIR=/data`, en maak de `/app`-filesystemlaag read-only/immutable. Dat is een gangbare container-hardening (`readOnlyRootFilesystem` / read-only `/app`) en voorkomt bovendien een toekomstige botsing als het image ooit zelf iets onder `/app/data` zou shippen. ## Werk - [ ] PVC-mountpad naar `/data` (of `/var/lib/waggle`), `WAGGLE_DATA_DIR` zetten. De code ondersteunt dit al; de SQLite-db volgt sinds recent `data_dir`. - [ ] `securityContext`: `readOnlyRootFilesystem: true` op de backend-container; `fsGroup`/ownership zo dat uid **10001** (`waggle`) op het volume kan schrijven (een verse mount overschaduwt de image-`chown`). - [ ] Nagaan of er nog andere schrijfpaden binnen `/app` zijn (bijv. tmp/caches) die dan een `emptyDir` nodig hebben. - [ ] `containers/backend/Containerfile` + `docs/deployment.md` bijwerken (mountpad `/app/data` -> extern pad). ## Context Komt uit de review-discussie rond de kaartloze-outbox-bijlagen (PR #140, "nieuw bericht plannen" fase 2a).
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
robbertbos/waggle#143
No description provided.