Security & Hardening

SELinux verstehen statt abschalten: Kontexte, Booleans und Troubleshooting

setenforce 0 ist keine Lösung, sondern die Wette darauf, dass niemand die Lücke findet. In den meisten Fällen fehlt schlicht der richtige Dateikontext, und der ist mit semanage und restorecon in wenigen Minuten gesetzt.

Zwei Security-Fachleute prüfen ein Dashboard im Betriebsraum
Seit 1997 am Markt Präsenz & Live-Online 4,9 aus 503 Google-Bewertungen Auch Inhouse für dein Team
Worum es geht

Warum SELinux so oft im Permissive-Modus endet

Auf RHEL, Rocky, AlmaLinux und Fedora läuft SELinux ab Werk im Enforcing-Modus, und das fällt meist erst auf, wenn ein Dienst auf einem nicht standardmäßigen Pfad liegt oder auf einem ungewohnten Port lauscht. Der Webserver soll aus /srv/web ausliefern, die Anwendung braucht eine ausgehende Netzwerkverbindung, der Reverse Proxy soll auf 8443 hören. In allen drei Fällen greift eine Policy-Regel, und der Dienst scheitert mit einer Meldung, die nach einem Rechteproblem aussieht, obwohl die klassischen Unix-Rechte korrekt gesetzt sind.

Die übliche Reaktion ist setenforce 0 oder SELINUX=disabled in /etc/selinux/config. Damit ist der Fehler weg und mit ihm eine komplette Schutzschicht. Genau diese Schicht hindert einen kompromittierten Dienst daran, außerhalb seiner eigenen Domain zu arbeiten, und deshalb verlangt auch der BSI-Grundschutz für Linux-Systeme, dass vorhandene Zugriffskontrollmechanismen mit den mitgelieferten Standardprofilen aktiviert bleiben. Ein dauerhaft deaktiviertes SELinux lässt sich im Audit kaum begründen.

Der zweite typische Fehler ist gut gemeint. Ein Denial wird gefunden, audit2allow -M erzeugt ein Modul, semodule -i lädt es, und der Dienst läuft wieder. Nach einem Jahr liegen ein Dutzend selbst gebauter Module auf dem System, von denen niemand mehr weiß, welche Regel sie enthalten. Oft wäre stattdessen ein einzelnes semanage fcontext plus restorecon oder ein gesetzter Boolean die richtige Antwort gewesen, weil das Problem nicht in der Policy lag, sondern im falschen Label.

Miniatur-Szene: Serverschrank in einer Schutzhülle, Vorhängeschlösser und ein Schild davor

Vom AVC-Denial zur richtigen Maßnahme

  1. 01 Denial mit ausearch finden
  2. 02 Kontext von Prozess und Objekt prüfen
  3. 03 Falsches Label? semanage fcontext und restorecon
  4. 04 Vorgesehener Anwendungsfall? Boolean setzen
  5. 05 Abweichender Port? semanage port ergänzen
  6. 06 Erst dann eigenes Policy-Modul bauen
Was du mitnimmst

So arbeitest du sauber mit SELinux

SELinux wird beherrschbar, sobald du das Modell dahinter kennst: Jeder Prozess und jedes Objekt trägt ein Label, und die Policy entscheidet, welche Domain auf welchen Typ zugreifen darf. Alles Weitere ist Handwerk, das sich in einer festen Reihenfolge abarbeiten lässt.

Das Label-Modell lesen können

Mit ps -eZ, ls -Z und id -Z siehst du Kontexte in der Form user:role:type:level. Für die tägliche Arbeit zählt vor allem der Typ, also httpd_t für den Prozess und httpd_sys_content_t für die Daten. Wer diese Paarung im Kopf hat, erkennt die meisten Denials schon an der Meldung.

Denials gezielt auswerten

ausearch -m AVC -ts recent liefert die Rohdaten, sealert und journalctl geben Kontext dazu. Wichtig ist die Unterscheidung zwischen einem echten Policy-Problem und einem falsch gelabelten Objekt, denn nur im ersten Fall braucht es überhaupt eine eigene Regel.

Erst Kontext, dann Policy

Für abweichende Pfade ist semanage fcontext -a -t gefolgt von restorecon -Rv der saubere Weg, weil die Regel eine Neuinstallation und ein relabel überlebt. chcon setzt Labels nur flüchtig und eignet sich zum Testen, nicht für den Dauerbetrieb.

Booleans statt eigener Module

Viele Anforderungen sind in der Standard-Policy bereits vorgesehen und lassen sich mit getsebool -a und setsebool -P freischalten, etwa httpd_can_network_connect oder nfs_export_all_rw. Das erspart eigene Module und bleibt dokumentiert und nachvollziehbar.

Ports und Dateisysteme korrekt einbinden

Nicht standardmäßige Ports werden über semanage port -a -t bekannt gemacht, Netzwerk-Mounts über die passenden Mount-Optionen und Booleans. Damit fallen die meisten Denials weg, die sonst zu einem selbst gebauten Modul führen würden.

Eigene Policy-Module nur mit Prüfung

Wenn wirklich eine eigene Regel nötig ist, gehören audit2allow, .te-Quelle, checkmodule und semodule_package in einen versionierten Ablauf. Der generierte Vorschlag ist ein Entwurf und kein fertiges Modul, denn audit2allow schlägt regelmäßig weitreichendere Rechte vor als tatsächlich gebraucht werden.

Gut zu wissen

Häufige Fragen zu SELinux-Grundlagen

Noch etwas offen? Wir sind ohne Warteschleife für dich da.

Frag uns direkt
Sollte man SELinux deaktivieren, wenn ein Dienst nicht läuft?
Nein, das entfernt eine Schutzschicht, die den Schaden eines kompromittierten Dienstes begrenzt, und ist auf Systemen mit Grundschutz- oder Compliance-Anforderungen kaum vertretbar. Sinnvoller ist es, den Modus temporär mit setenforce 0 auf permissive zu setzen, die entstehenden Denials zu sammeln und daraus die passenden Kontexte, Booleans oder Portregeln abzuleiten.
Was ist der Unterschied zwischen permissive und enforcing?
Im Enforcing-Modus blockiert der Kernel Zugriffe, die die Policy nicht erlaubt, und protokolliert sie. Im Permissive-Modus wird derselbe Zugriff nur protokolliert, aber durchgelassen, was den Modus zur Fehlersuche brauchbar macht. Permissive ist ein Diagnosewerkzeug für eine begrenzte Zeit, kein Dauerzustand, und es unterscheidet sich klar von disabled, bei dem gar keine Labels mehr gepflegt werden.
Wann brauche ich restorecon und wann chcon?
restorecon setzt Labels auf das zurück, was die Policy und die fcontext-Regeln vorsehen, und ist deshalb der richtige Befehl nach einem semanage fcontext oder nach dem Verschieben von Dateien mit mv. chcon ändert ein Label direkt und wird beim nächsten relabel überschrieben, taugt also zum schnellen Test einer Vermutung, nicht für eine dauerhafte Konfiguration.
Ist audit2allow eine gute Lösung für SELinux-Fehler?
audit2allow ist nützlich, um aus Denials einen Regelentwurf zu erzeugen, liefert aber oft breitere Rechte als nötig und verdeckt die eigentliche Ursache, wenn das Problem nur ein falsches Label war. Gute Praxis ist es, zuerst Kontext, Boolean und Portregel zu prüfen und ein Modul erst zu bauen, wenn der Anwendungsfall tatsächlich nicht von der Standard-Policy abgedeckt ist.
Was ist der Unterschied zwischen SELinux und AppArmor?
Beide sind Mandatory-Access-Control-Systeme über das LSM-Interface des Kernels, arbeiten aber unterschiedlich. SELinux labelt Prozesse und Objekte und entscheidet anhand von Typen, was ein feingranulares und systemweites Modell ergibt, das dafür mehr Einarbeitung verlangt. AppArmor arbeitet pfadbasiert mit Profilen pro Programm und ist schneller zu lesen, aber weniger tiefgreifend. Auf RHEL und seinen Derivaten ist SELinux gesetzt, auf SUSE und Ubuntu ist AppArmor die Voreinstellung.

Zuletzt geprüft am 26. Juli 2026.

Das sagen Teilnehmer

Echte Stimmen aus unseren IT-Kursen

Es war eine sehr gute Lernatmosphäre und der Trainer verstand sein Thema sehr gut.
Rückmeldung aus dem Kurs „SELinux Training: Grundlagen und Administration (SEL1)“
Qualitativ sehr guter Kurs. Ruhiger und wertschätzender Umgang. Keine Informationsüberlastung.
Rückmeldung aus dem Kurs „Ansible Kompaktkurs“
Persönlich für dich da

Deine Ansprechpartner

Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Hilft dir, aus dem Linux-Programm den passenden Kurs oder Lernpfad zu finden.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant mit dir Inhouse-Trainings, die exakt auf eure Systemlandschaft und Distributionen zugeschnitten sind.

Nächster Schritt

SELinux im eigenen Tempo aufbauen

Wir bilden SELinux in drei aufeinander aufbauenden Trainings ab. SEL1 vermittelt Grundlagen und Administration, also Kontexte, Modi und die tägliche Fehlersuche. SEL2 geht in Konfiguration und Management mit Booleans, semanage und Policy-Verwaltung im Bestand. SEL3 behandelt die Entwicklung eigener Policy-Module. Alle Kurse gibt es als Präsenztraining und Live-Online, auf Wunsch auch als Inhouse-Termin mit deinen eigenen Systemen. Wenn du nicht sicher bist, welche Stufe passt, sprich uns an, wir schauen uns deine Ausgangslage gemeinsam an.