SELinux (Security-Enhanced Linux) ist ein Mandatory Access Control (MAC) Framework, das in modernen Linux-Distributionen wie RHEL, CentOS und Fedora integriert ist. Für Container-Umgebungen bietet SELinux die Möglichkeit, Prozesse strikt zu isolieren, Dateizugriffe zu kontrollieren und unbefugte Interaktionen zwischen Containern oder zwischen Host und Container zu verhindern. In Kombination mit Docker oder Podman ist ein tiefes Verständnis der Labels, Volumes und des Troubleshootings entscheidend für den sicheren Betrieb.
1. SELinux Grundlagen für Container
SELinux arbeitet auf Basis von Kontexten, die Prozessen, Dateien und Sockets zugewiesen werden. Jeder Kontext besteht aus einem Benutzer, einer Rolle, einer Typ-Bezeichnung und einer Sensitivitätsstufe. In Container-Umgebungen sind vor allem die Typ-Bezeichnungen relevant, da sie den Zugriff auf Host-Ressourcen regeln.
Key-Komponenten
- User: SELinux-Benutzer, z. B. system_u
- Role: Rolle des Prozesses, z. B. container_t
- Type: Typ für Zugriffskontrolle, z. B. svirt_lxc_net_t
- Level: Multilevel Security (MLS), oft bei Container-Szenarien weniger relevant
2. Labels verstehen
Docker und Podman nutzen SELinux-Labels, um Container- und Volume-Ressourcen zu isolieren. Standardmäßig wird jedem Container ein eigener MCS-Labelbereich zugewiesen, um die Separation zwischen Containern zu garantieren.
Beispiel: SELinux Label für ein Container-Volume
docker run -v /host/data:/container/data:Z myimage
Das zusätzliche :Z weist SELinux an, das Volume mit einem privaten Label zu markieren, das nur vom Container lesbar und beschreibbar ist. Alternativ existiert :z, um geteilte Zugriffe zwischen mehreren Containern zu ermöglichen.
3. Volumes und SELinux
Volume-Management ist ein kritischer Punkt bei SELinux. Ohne korrekte Labels können Container keinen Zugriff auf Volumes erhalten, selbst wenn die Dateisystemrechte korrekt gesetzt sind.
Best Practices für Volumes
- Verwenden Sie
:Zfür exklusive Volumes pro Container. - Verwenden Sie
:zfür geteilte Volumes zwischen mehreren Containern. - Setzen Sie Rechte auf Host-Dateisystemebene (UID/GID) korrekt, um Konflikte mit SELinux zu vermeiden.
- Vermeiden Sie die direkte Nutzung von
--privileged, um Labels nicht zu umgehen.
4. Troubleshooting SELinux in Containern
Probleme mit SELinux manifestieren sich oft durch fehlgeschlagene Zugriffe oder Berechtigungsverweigerungen, z. B. „Permission denied“. Die Analyse erfolgt über Logs und Kommandozeilen-Tools.
Wichtige Tools
ausearch -m avc -ts today: Zeigt SELinux Access Vector Cache (AVC) Verweigerungen.sealert -a /var/log/audit/audit.log: Analysiert AVC-Fehler und gibt Empfehlungen.ls -Z: Zeigt SELinux-Kontexte von Dateien und Verzeichnissen.ps -Z: Zeigt SELinux-Kontexte von laufenden Prozessen.
Typische Fehler und Lösungen
- Container kann Volume nicht schreiben: Prüfen, ob
:Zoder:zverwendet wurde und die richtigen Hostrechte gesetzt sind. - Netzwerk- oder Socketzugriffe werden verweigert: Prüfen Sie Typ-Bezeichnungen, z. B.
svirt_lxc_net_t. - Fehlerhafte Labels nach Kopieren von Dateien: Labels mit
chconoderrestoreconkorrigieren.
5. Sicherheitsstrategien mit SELinux
Die Kombination aus Labels, Volumes und Profilen ermöglicht ein stark isoliertes Container-Setup:
Empfohlene Patterns
- Exklusive Labels pro Container verwenden (
:Z), um Datenlecks zu verhindern. - Nur benötigte Verzeichnisse freigeben, Rest read-only.
- Regelmäßige Audit-Logs analysieren und SELinux-Policy anpassen.
- Keine globalen Labels, keine
--privilegedFlags ohne zwingenden Grund. - Kombinieren Sie SELinux mit Capability-Drop und seccomp für Defense-in-Depth.
6. Integration in Docker Compose
In Compose-Dateien kann SELinux-Labeling für Volumes und Container über volumes und security_opt definiert werden:
version: "3.8"
services:
app:
image: myapp:latest
volumes:
- /host/data:/container/data:Z
security_opt:
- label:type:container_t
Damit wird die Isolation und Kontrolle für den Service sichergestellt und Konflikte zwischen Containern auf einem Host minimiert.
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.











