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.