Was ist SELinux?
Security-Enhanced Linux
SELinux (Security-Enhanced Linux) ist eine im Linux-Kernel verankerte Zugriffskontrolle nach dem Prinzip Mandatory Access Control: Jeder Prozess und jede Datei trägt ein Label, und eine zentrale Policy entscheidet anhand dieser Labels, wer worauf zugreifen darf. Die Regeln gelten zusätzlich zu den normalen Dateirechten und binden auch root.
Wenn ein Dienst unter Red Hat oder Rocky Linux eine Datei nicht öffnen kann, obwohl die Dateirechte eindeutig stimmen, steht meist die Regelmenge im Kernel im Weg.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
- Gilt zusätzlich
- Zu den Dateirechten, auch für root
- Drei Modi
- Enforcing, Permissive, Disabled
- Erste Wahl
- Boolean setzen statt eigener Regel
- Verwechselt mit
- AppArmor
Labels und Kontexte statt Benutzerrechte
Jedes Objekt im System trägt einen Kontext aus vier Teilen: SELinux-Benutzer, Rolle, Typ und Sicherheitsstufe. Sichtbar wird er mit ls -Z für Dateien und ps -Z für Prozesse:
$ ls -Z /var/www/html/index.html
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
$ ps -eZ | grep httpd
system_u:system_r:httpd_t:s0 1234 ? 00:00:01 httpd Entscheidend ist im Alltag der Typ, die dritte Stelle. Der Webserver läuft als httpd_t und darf laut Policy auf Dateien vom Typ httpd_sys_content_t zugreifen, auf den Kontext der Benutzerverzeichnisse dagegen nicht. Ob der Dateieigentümer den Zugriff erlauben würde, spielt keine Rolle. Dieses Prinzip heißt Type Enforcement und trägt fast die gesamte Policy der gängigen Distributionen.
Daraus folgt der Fehler, den fast jeder einmal macht: Eine Datei wird mit mv aus dem Home-Verzeichnis nach /var/www verschoben und behält dabei ihren alten Kontext, während cp den Kontext des Zielverzeichnisses erbt. Die Rechte sehen richtig aus, der Zugriff scheitert trotzdem. restorecon setzt den Kontext auf den Wert zurück, den die Policy für diesen Pfad vorsieht.
Die drei Modi
Im Modus enforcing werden Verstöße blockiert und protokolliert, in permissive nur protokolliert, und disabled schaltet den Mechanismus ganz ab. getenforce zeigt den aktuellen Modus, setenforce wechselt bis zum nächsten Neustart zwischen enforcing und permissive. Für die Fehlersuche ist permissive das richtige Werkzeug, weil du in einem Durchlauf alle Blockaden siehst statt immer nur die erste.
Zwischen permissive und disabled liegt ein Unterschied, der oft übersehen wird. Läuft ein System längere Zeit mit abgeschaltetem SELinux, bekommen neue Dateien keine Labels mehr. Beim Wiedereinschalten passt dann nichts mehr zusammen, und es braucht ein vollständiges Neulabeln des Dateisystems mit Neustart. Ab RHEL 9 reicht der Eintrag in /etc/selinux/config zum Abschalten ohnehin nicht mehr, dafür ist der Kernel-Parameter selinux=0 nötig, von dem Red Hat im Produktivbetrieb ausdrücklich abrät.
Kontexte, Ports und Booleans anpassen
Für fast alle Sonderfälle sieht SELinux einen Verwaltungsweg vor, ohne dass du eigene Regeln schreibst. Die drei häufigsten Fälle sind ein Webverzeichnis außerhalb von /var/www, ein Dienst auf einem ungewöhnlichen Port und ein Webserver, der selbst Verbindungen zu einer Datenbank oder API aufbauen soll:
# Kontext für ein eigenes Verzeichnis dauerhaft festlegen und anwenden
semanage fcontext -a -t httpd_sys_content_t "/srv/web(/.*)?"
restorecon -Rv /srv/web
# zusätzlichen Port für den Webserver freigeben
semanage port -a -t http_port_t -p tcp 8081
# Boolean dauerhaft setzen
setsebool -P httpd_can_network_connect on getsebool -a listet alle Booleans. Bleibt trotzdem eine Lücke, erzeugt audit2allow aus den protokollierten Verweigerungen ein Policy-Modul. Das ist bequem und genau deshalb heikel: Wer die Ausgabe ungeprüft einspielt, erlaubt unter Umständen genau den Zugriff, den ein Angriff gerade versucht hat. Lies die Regel, bevor du sie lädst, und beschränke sie auf den Typ, um den es geht.
Denials lesen
Verweigerungen landen als AVC-Meldungen (Access Vector Cache) im Audit-Log. ausearch -m avc -ts recent holt die letzten heraus, und sealert aus dem Paket setroubleshoot übersetzt sie in eine Erklärung samt Vorschlag. Wer die Meldung selbst liest, achtet auf scontext, tcontext und tclass: Welcher Prozess wollte auf welches Objekt welcher Art zugreifen?
Nicht jede Blockade taucht auf. Für bekannte, unkritische Fälle enthält die Policy dontaudit-Regeln, die die Protokollierung unterdrücken. Wenn ein Problem unerklärlich wirkt, schaltet semodule -DB diese Unterdrückung vorübergehend ab, semodule -B stellt sie wieder her.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
SELinux und was oft damit gleichgesetzt wird
Die klassischen Rechte (Discretionary Access Control) kann der Eigentümer selbst vergeben. SELinux entscheidet darüber hinaus anhand einer zentral gepflegten Policy, die kein Benutzer eigenmächtig aufweichen kann, auch root nicht ohne Weiteres.
AppArmor ist ebenfalls ein Linux Security Module, arbeitet aber mit Profilen über Dateipfade und ist schneller eingerichtet. SELinux hängt die Regel am Label des Objekts, wirkt dadurch auch bei Umbenennungen und Hardlinks, verlangt aber mehr Einarbeitung.
Eine Firewall wie firewalld entscheidet, welche Netzverbindungen überhaupt den Rechner erreichen. SELinux regelt, was ein Prozess auf dem Rechner tun darf, also auch, auf welchem Port ein Dienst lauschen oder welche Verbindung er selbst öffnen darf.
KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Abschalten löst dein Problem und schafft ein größeres
Der erste Reflex ist, mit setenforce 0 in den erlaubenden Modus zu schalten, und danach läuft der Dienst. Die Ursache bleibt, und bei einer Distribution, die ihre Absicherung genau darauf aufbaut, fehlt damit eine ganze Schutzschicht. Nicht selten bleibt der Server so, weil der nächste Neustart erst Monate später kommt.
Die typischen Auslöser sind fast immer dieselben: Das Webverzeichnis ist auf eine größere Partition gewandert, ein Dienst lauscht auf einem ungewöhnlichen Port, oder eine Datei wurde verschoben statt kopiert. Wer diese drei Muster kennt, findet die Ursache meist in wenigen Minuten, statt sich durch Foren zu lesen, deren Antwort „SELinux ausschalten“ lautet.
In gemischten Teams hilft eine einfache Regel: Keine eigene Policy-Regel ohne zweite Person, die sie gelesen hat. Ein ungeprüftes audit2allow-Modul ist schwerer zu entdecken als ein abgeschaltetes SELinux, weil der Status weiter enforcing zeigt.
SELinux lernen
Wie du Kontexte setzt, Booleans findest und Verweigerungen liest, ohne den Schutz abzuschalten, vermitteln die Kurse zu Red Hat Enterprise Linux an eigenen Übungssystemen.
Sitzt SELinux schon?
Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.
Der passende Lernpfad
Wenn du nicht nur ein Thema abhaken, sondern eine Rolle ausfüllen willst, zeigt dir der Lernpfad die Kurse in der Reihenfolge, in der sie aufeinander aufbauen.
Dein Weg zum Linux Junior Administrator (LPIC-1)
Du willst Linux im Arbeitsalltag sicher bedienen, Systeme zuverlässig verwalten und dich gezielt auf die LPIC-1 Prüfung vorbereiten? In diesem Lernpfad baust du Schritt für Schritt das Wissen auf, das du als Linux Junior Administrator brauchst: von der Kommandozeile über Benutzer- und Rechteverwaltung bis zu Netzwerkgrundlagen und Systemdiensten.
Der Einstieg
System und Netzwerk
Kurse, die SELinux behandeln
Häufige Fragen
Wer hat SELinux entwickelt und wo ist es aktiv?
Soll ich SELinux abschalten, wenn ein Dienst nicht startet?
Woran erkenne ich, dass wirklich SELinux blockiert?
Schützt SELinux auch Container?
Passt thematisch dazu
Wenn ein Dienst gerade nicht startet, zeigt dir eine Anleitung, wie du eine SELinux-Blockade Schritt für Schritt auflöst, ohne den Schutz abzuschalten.
Wer einen neuen Server aufsetzt, sollte wissen, welchen Platz SELinux in der Härtung eines Servers hat.
Deine Ansprechpartner
Du willst das Thema nicht nur nachschlagen, sondern anwenden können? Wir beraten dich persönlich und kostenlos.
Yves Hoppe
Weiterbildung & Beratung
Ordnet mit dir ein, welcher Kurs zu deinem Vorwissen passt.
Norbert Jansen
Beratung & Inhouse
Plant Inhouse-Trainings, die an euren eigenen Daten und Abläufen ansetzen.
SELinux im Kurs statt im Lexikon
Nachschlagen bringt dich bis zum Verstehen. Anwenden lernst du an echten Aufgaben.