From 56f58b3583a33fd36e114736cc8ad9a738dafbd2 Mon Sep 17 00:00:00 2001 From: Jeff Emmett Date: Tue, 17 Feb 2026 15:27:17 -0700 Subject: [PATCH] security: harden production containers Add cap_drop ALL, no-new-privileges, read_only + tmpfs to all containers (postgres, redis, backend, celery worker, celery beat). Matches Phase 3 security hardening standards. Co-Authored-By: Claude Opus 4.6 --- docker-compose.prod.yml | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 1634225..25037fe 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -14,6 +14,15 @@ services: interval: 10s timeout: 5s retries: 5 + cap_drop: + - ALL + cap_add: + - DAC_OVERRIDE + - FOWNER + - SETGID + - SETUID + security_opt: + - no-new-privileges:true networks: - rfiles-internal @@ -29,6 +38,13 @@ services: interval: 10s timeout: 5s retries: 5 + cap_drop: + - ALL + cap_add: + - SETGID + - SETUID + security_opt: + - no-new-privileges:true networks: - rfiles-internal @@ -67,6 +83,17 @@ services: - "traefik.http.routers.rfiles-direct.tls.certresolver=letsencrypt" - "traefik.http.services.rfiles.loadbalancer.server.port=8000" - "traefik.docker.network=traefik-public" + cap_drop: + - ALL + cap_add: + - CHOWN + - SETGID + - SETUID + security_opt: + - no-new-privileges:true + read_only: true + tmpfs: + - /tmp networks: - rfiles-internal - traefik-public @@ -94,6 +121,13 @@ services: condition: service_healthy redis: condition: service_healthy + cap_drop: + - ALL + security_opt: + - no-new-privileges:true + read_only: true + tmpfs: + - /tmp networks: - rfiles-internal command: celery -A config worker --loglevel=info --concurrency=2 @@ -112,6 +146,13 @@ services: - SECRET_KEY=${SECRET_KEY} depends_on: - celery-worker + cap_drop: + - ALL + security_opt: + - no-new-privileges:true + read_only: true + tmpfs: + - /tmp networks: - rfiles-internal command: celery -A config beat --loglevel=info