🧪 Tech-Lab & How-To Base von Sebastian Teßmann • Zu den Produktivservices: tessmann-digital.de

📚 Archiv

Supply Chain Security: Docker-Updates absichern mit Trivy und Watchtower CVE-2026-98432: Warum ein Kernel-Update allein nicht reicht (und echtes System-Hardening) Home Assistant vs. Alexa: Das echte Smart Home (inkl. Pi-Setup, HACS & FRITZ!Box) Zero-Day abgewehrt: Die Anatomie der PHP-Lücke (CVE-2026-109618) und der ultimative Docker-Schutz Zero-Bloat Hosting: Nginx Proxy Manager, Apache & Fail2ban sicher unter Docker vereinen Checkmk Community Edition auf Debian 13: Der ultimative Guide (Installation, Distributed Monitoring, Custom Plugins & Gotify) Debian 13 vs. Windows Server im Enterprise-Einsatz: Performance, Härtung & Top 20 CLI-Befehle Cyberkrieg gegen den Mittelstand: Unsere Migration auf Proxmox, OPNsense & Zero-Trust Open Source vs. Payware: Der ehrliche Vergleich für KMU & IT-Infrastrukturen Bye-bye VMware: Mein Weg über Hyper-V zu Proxmox VE Tutorial: High-Performance Cloud mit Seafile auf Debian 13 & Proxmox VE Tutorial: Portainer EE auf CE downgraden & sicherer Host-Umzug Tutorial: CorePlan via Docker deployen (HTTPS out-of-the-box) Tutorial: Eigenes Docker Image bauen (Apache, PHP, Auto-SSL & HTTP zu HTTPS Redirect) Proxmox Unified Console (PUC): Das All-in-One Dashboard für PVE, PBS & PMG Eigener Bitcoin Solo Pool: Full Node (bitcoind), public-pool Backend & individuelles PHP-Dashboard im Docker-Stack OPNsense: HAProxy als Reverse Proxy mit Let's Encrypt SSL-Offloading & SNI / ACL-Routing Mobiles Arbeiten & Kanzlei-Zugriff: WireGuard VPN auf der FRITZ!Box, Windows & iPhone inkl. NAS-SMB-Mount Tschüss Windows, hallo Pinguin: Der ehrliche Leitfaden für den Linux-Umstieg (und warum CachyOS mein Gaming rettete) Eigener Bitcoin Solo-Mining-Pool: Public-Pool & Pruned Full Node im Docker-Homelab Gaming auf Linux: Kompletter Umstieg von Windows zu CachyOS (Kernel, Steam, Heroic & MangoHud) Docker Container absichern: Rootless, Read-Only Filesystems & Linux Capabilities Portainer CE auf Docker: Schritt-für-Schritt Setup mit persistenten Volumes & Hardening Docker Engine & Compose V2 auf Debian/Ubuntu: Saubere Installation via Official Repository E-Mail Deliverability: SPF, DKIM & DMARC richtig konfigurieren (Schritt-für-Schritt) Proxmox VE & OPNsense: IPv6 /64 Subnetting (/80 WAN Transit & /96 LAN Segmentierung) OPNsense auf Proxmox VE: Vollständiges Setup von ISO-Download bis Hardening & DNSmasq Proxmox VE auf Debian 12 (Bookworm) installieren & Routed Network (vmbr0/vmbr1) einrichten

Docker Container absichern: Rootless, Read-Only Filesystems & Linux Capabilities

Standardmäßig starten die meisten Docker-Container mit weitreichenden Rechten: Der Prozess im Container läuft als root (UID 0), das gesamte Dateisystem ist beschreibbar und der Kernel gewährt zahlreiche Linux-Capabilities. Gelingt einem Angreifer die Code-Execution über eine Sicherheitslücke in der Web-App, kann dies zum Ausbruch auf das Hostsystem führen. Mit wenigen standardisierten Direktiven lässt sich dieses Risiko minimieren.

1. Read-Only Root Filesystem (Dateisystem sperren)

Die meisten Webanwendungen müssen zur Laufzeit keine Binärdateien oder Bibliotheken verändern. Mit read_only: true verbieten wir jegliche Modifikation am Container-Image. Benötigt die Anwendung temporäre Schreibberechtigungen (z. B. für Caches oder Session-Dateien), mounten wir flüchtige tmpfs-Speicher im RAM:

services:
  webapp:
    image: my-app:latest
    read_only: true
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=64m
      - /run:rw,noexec,nosuid,size=16m
    security_opt:
      - no-new-privileges:true

Effekt: Ein Angreifer kann keine Schadsoftware, Skripte oder Rootkits im Dateisystem des Containers persistieren.

2. Rechte-Eskalation unterbinden (`no-new-privileges`)

Das Flag no-new-privileges:true verhindert, dass Prozesse innerhalb des Containers über SUID- oder SGID-Binaries (wie sudo oder modifizierte Executables) zusätzliche Berechtigungen erlangen können. Es gehört standardmäßig in jeden Produktions-Stack.

3. Linux Capabilities minimieren (`cap_drop: ALL`)

Linux unterteilt Root-Rechte in fein granulierte Capabilities. Docker gewährt standardmäßig rund 14 davon (z. B. CAP_CHOWN, CAP_MKNOD). Für maximale Sicherheit droppen wir alle Capabilities und fügen ausschließlich die zwingend benötigten hinzu:

services:
  nginx-secure:
    image: nginx:alpine
    cap_drop:
      - ALL
    cap_add:
      # Erlaubt das Binden an Ports unter 1024 (z. B. Port 80/443)
      - NET_BIND_SERVICE
      # Erlaubt Nginx das Ändern der Worker-UID
      - SETUID
      - SETGID

4. Non-Root User erzwingen

Führe Prozesse niemals als Root aus. In Compose lässt sich dies über die user-Direktive erzwingen:

services:
  node-app:
    image: node:alpine
    user: "1000:1000"

5. Zusammenfassung: Die gehärtete Produktions-Vorlage

version: "3.8"

services:
  production-service:
    image: alpine:latest
    restart: unless-stopped
    read_only: true
    user: "10001:10001"
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=32m
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"