Was ist SELinux, und wie kann es die Sicherheit unter Linux verbessern?
Wenn es um die Sicherung von Linux-Servern geht, denken die meisten Administratoren an die Grundlagen: Pakete auf dem neuesten Stand halten, Firewalls konfigurieren, SSH-Zugang beschränken. Doch einer der leistungsfähigsten Sicherheitsmechanismen wird oft übersehen – SELinux (Security-Enhanced Linux). Dabei handelt es sich nicht nur um ein Add-on, sondern um ein Sicherheits-Framework auf Kernel-Ebene, das Eindringlinge stoppen soll, bevor sie eskalieren. Sowohl für VPS als auch für dedizierte Server kann SELinux den Unterschied zwischen einem kleinen Zwischenfall und einer vollständigen Systemkompromittierung bedeuten.
Was ist SELinux?
SELinux ist ein Sicherheitsmodul für den Linux-Kernel, das die obligatorische Zugriffskontrolle (MAC) durchsetzt.
- Beim traditionellen DAC-Modell (Discretionary Access Control) wird der Zugriff von den Dateibesitzern bestimmt, und root hat uneingeschränkte Befugnisse.
- Unter MAC (SELinux) wird der Zugriff durch systemweite Sicherheitsrichtlinien geregelt. Selbst Root unterliegt Beschränkungen.
Ursprünglich von der NSA in Zusammenarbeit mit Red Hat entwickelt, wurde SELinux Anfang der 2000er Jahre in den Linux-Kernel integriert und ist heute Standard bei Unternehmensdistributionen wie RHEL, CentOS, Fedora, AlmaLinux und Rocky Linux.
Das Problem: Wo die traditionelle Linux-Sicherheit versagt
Das klassische UNIX-Berechtigungsmodell (DAC) hat entscheidende Schwachstellen:
- Root ist allmächtig. Jeder Exploit, der zu Root eskaliert, kompromittiert das gesamte System.
- Dienstkompromittierung = Systemkompromittierung. Ein gehacktes Apache-Modul oder PHP-Skript kann auf sensible Daten zugreifen.
- Moderne Angriffsvektoren umgehen die DAC. Web-Shells, Exploits zur Ausweitung der Rechte und Container-Escape-Angriffe sind weit verbreitet.
Realitätsnahes Szenario:
Eine CMS-Upload-Schwachstelle ermöglicht es einem Angreifer, eine Web-Shell zu starten. Ohne SELinux kann der Angreifer die Datei config.php lesen, Datenbankanmeldeinformationen auslesen und den gesamten Stack kompromittieren. Mit SELinux wird der Webserverprozess (httpd_t) eingeschränkt und kann nicht auf Dateien außerhalb des ihm zugewiesenen Bereichs zugreifen.
Wie SELinux funktioniert
Jeder Prozess, jede Datei, jeder Port und jedes Socket hat einen Sicherheitskontext (Label).
Richtlinien definieren, welche Kontexte interagieren dürfen.
Beispiel:
- Apache läuft in der Domäne httpd_t.
- Website-Dateien sind mit httpd_sys_content_t gekennzeichnet.
- Die Richtlinie erlaubt httpd_t, nur httpd_sys_content_t-Dateien zu lesen.
Wenn Apache versucht, /etc/shadow (shadow_t) zu lesen, verweigert der Kernel die Anfrage und protokolliert den Verstoß.
Betriebsmodi
- Durchsetzend: Richtlinien werden durchgesetzt, Verstöße werden blockiert.
- Zulässig: Verstöße werden protokolliert, aber nicht blockiert (nützlich für Tests).
- Deaktiviert: SELinux ist ausgeschaltet (nicht empfohlen).
Beste Praxis: Beginnen Sie mit Permissive, prüfen Sie die Protokolle, passen Sie die Richtlinien an und wechseln Sie dann zu Enforcing für die Produktion.
Warum SELinux für Hosting und DevOps wichtig ist
- Prozessisolierung: Begrenzt den Schaden, wenn ein einzelner Dienst angegriffen wird.
- Durchsetzung der geringsten Privilegien: Selbst root kann die Richtlinienbeschränkungen nicht umgehen.
- Forensik und Transparenz: Alle verweigerten Aktionen werden protokolliert (/var/log/audit/audit.log).
- Containersicherheit: Verhindert, dass Docker/Podman-Container ihre Grenzen überschreiten.
- Compliance: Erforderlich in regulierten Umgebungen (PCI DSS, HIPAA, militärische Einsätze).
Richtlinien-Typen
- Gezielt (Standard): Schränkt nur netzseitige Dienste ein (Apache, Nginx, Postfix, Dovecot).
- Strict: Wendet MAC auf alle Prozesse an.
- MLS/MCS: erweiterte Richtlinien für mehrstufige oder staatliche Sicherheit.
Für die meisten VPS- und dedizierten Server-Workloads ist die gezielte Richtlinie das beste Gleichgewicht aus Benutzerfreundlichkeit und Schutz.
Praktische Beispiele
SELinux-Status prüfen
Wiederherstellen von Dateikontexten nach dem Verschieben von Webdateien
Dateisicherheitslabel auflisten
Ausgehende Verbindungen von Webdiensten zulassen (z. B. API-Aufrufe)
Verweigerte Aktionen in den Protokollen überprüfen
Schlussfolgerung
SELinux ist mehr als eine zusätzliche Sicherheitsfunktion; es ist ein grundlegendes Framework, das die Art und Weise, wie Linux die Zugriffskontrolle durchsetzt, neu definiert. Durch die Einschränkung von Prozessen, die Verringerung der Auswirkungen von Schwachstellen und die Bereitstellung detaillierter Prüfprotokolle verwandelt SELinux ein Linux-System in eine weitaus widerstandsfähigere Umgebung. Die Sicherheitsvorteile, die SELinux für moderne Serverinfrastrukturen mit sich bringt, machen es zu einer unverzichtbaren Komponente für jede Produktionsimplementierung, auch wenn es eine sorgfältige Konfiguration und ein gutes Verständnis erfordert.