Container Security - Docker haerten

Docker-Container mit Standardeinstellungen sind nicht sicher konfiguriert. Root-Prozesse, beschreibbare Dateisysteme, übermäßige Capabilities — alles Default. Das lässt sich mit wenig Aufwand deutlich verbessern.

Non-root User

FROM php:8.3-fpm-alpine

# User anlegen
RUN addgroup -g 1001 app && adduser -u 1001 -G app -s /bin/sh -D app

WORKDIR /app
COPY --chown=app:app . .

USER app

Wenn der Container kompromittiert wird hat der Angreifer keinen Root-Zugang zum Host.

Read-only Filesystem

docker run --read-only \
    --tmpfs /tmp \
    --tmpfs /run \
    myapp:latest

Der Container kann nichts persistent schreiben — außer in explizit erlaubte tmpfs-Pfade.

In Docker Compose:

services:
  app:
    image: myapp:latest
    read_only: true
    tmpfs:
      - /tmp
      - /run/php

Capabilities einschränken

Docker-Container erben standardmäßig viele Linux-Capabilities die sie nicht brauchen.

docker run \
    --cap-drop ALL \
    --cap-add NET_BIND_SERVICE \  # nur wenn Port < 1024 gebunden wird
    myapp:latest

In Compose:

    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE

Keine neuen Privileges

    security_opt:
      - no-new-privileges:true

Verhindert dass Prozesse im Container über setuid-Binaries mehr Rechte bekommen.

Ressourcen-Limits

    deploy:
      resources:
        limits:
          memory: 256M
          cpus: '0.5'

Verhindert dass ein kompromittierter oder buggy Container den gesamten Host-Speicher frisst.

Images regelmäßig aktualisieren

# Alle Images auf Updates prüfen
docker pull php:8.3-fpm-alpine
docker images --format "{{.Repository}}:{{.Tag}}" | xargs -I{} docker pull {}

Oder mit Watchtower automatisieren — aber Vorsicht: automatische Updates in Produktion können Überraschungen bringen.

Trivy für Image-Scans

# Installieren
apt install trivy

# Image auf CVEs prüfen
trivy image myapp:latest
trivy image php:8.3-fpm-alpine

Trivy prüft Betriebssystem-Pakete und Anwendungsabhängigkeiten gegen die CVE-Datenbanken. In die CI-Pipeline einbauen.