Least Privilege in Docker: Capabilities und read-only Filesystem

Das Prinzip des Least Privilege ist in Container-Umgebungen besonders wichtig, da Container standardmäßig oft mit Root-Rechten laufen. Durch die Einschränkung von Capabilities und die Nutzung von read-only Filesystemen lassen sich die Sicherheitsrisiken deutlich reduzieren. In diesem Tutorial erfahren Sie, wie Sie Docker-Container nach dem Prinzip „Minimalrechte“ betreiben und so die Angriffsfläche minimieren.

Grundprinzipien von Least Privilege

Least Privilege bedeutet, dass ein Container nur die Rechte erhält, die für seine Funktion absolut notwendig sind. Alles andere wird deaktiviert, um potenziellen Schaden bei Kompromittierung zu begrenzen.

  • Root-Rechte vermeiden
  • Capabilities nur gezielt erlauben
  • Dateisysteme nur dort beschreibbar, wo nötig
  • Netzwerk- und Systemzugriffe beschränken

Capabilities einschränken

Linux Capabilities steuern feingranular, welche Operationen ein Container durchführen darf. Standardmäßig erhält ein Root-Container alle Capabilities.

Capabilities reduzieren

docker run --cap-drop ALL myorg/app:latest
  • Alle zusätzlichen Privilegien werden entfernt
  • Der Container kann nur Standardoperationen ohne spezielle Berechtigungen ausführen
  • Bei Bedarf können einzelne Capabilities gezielt wieder hinzugefügt werden:
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE myorg/app:latest
  • Erlaubt nur das Binden an privilegierte Ports (z. B. Port 80/443)
  • Alle anderen Capabilities bleiben deaktiviert

Read-only Filesystem einsetzen

Ein read-only Filesystem verhindert, dass Container das Image oder Systemdateien verändern. Nur explizit gemountete Volumes können beschreibbar sein.

docker run --read-only -v app_data:/data myorg/app:latest
  • --read-only schützt den Containerinhalt
  • Volumes erlauben gezielten Schreibzugriff für persistenten Speicher
  • Kombination mit Least Privilege reduziert Angriffsfläche deutlich

Docker Compose Beispiel

services:
  api:
    image: myorg/api-service:latest
    user: "1000:1000"
    read_only: true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    volumes:
      - api_data:/data
    networks:
      - backend_net
  • Container läuft als nicht-privilegierter Benutzer
  • Dateisystem ist read-only, nur Volumes sind beschreibbar
  • Capabilities werden gezielt reduziert und bei Bedarf ergänzt

Best Practices

  • Root-Container vermeiden, wo möglich
  • Capabilities auf ein Minimum reduzieren
  • Read-only Filesysteme für alle Images einsetzen
  • Volumes nur dort mounten, wo Schreibzugriff notwendig ist
  • Healthchecks und Monitoring ergänzen, um Sicherheitsverletzungen früh zu erkennen
  • Regelmäßige Updates der Container-Images und Docker Engine durchführen
  • Netzwerke und Firewall-Regeln so einschränken, dass Container nur notwendige Verbindungen haben

Praktische Umsetzung

Für einen sicheren Webservice kann die Kombination aus read-only Filesystem, eingeschränkten Capabilities und nicht-privilegiertem User wie folgt aussehen:

docker run 
  --user 1000:1000 
  --read-only 
  --cap-drop ALL 
  --cap-add NET_BIND_SERVICE 
  -v web_content:/usr/share/nginx/html:ro 
  -p 80:80 
  nginx:latest
  • Schreibschutz für das Container-Dateisystem
  • Nur Netzwerkbindungsrechte erlaubt
  • Webcontent readonly gemountet
  • Minimale Rechte für sicheren Betrieb

Zusammenfassung

Least Privilege ist eine zentrale Sicherheitsmaßnahme für Docker-Container. Durch gezieltes Reduzieren von Capabilities, Nutzung von read-only Filesystemen und Ausführen von Containern als nicht-privilegierte Benutzer lassen sich Risiken deutlich reduzieren. Diese Maßnahmen zusammen mit Healthchecks, Logging und Ressourcenlimits gewährleisten eine robuste und sichere Container-Infrastruktur.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles