
- SELinux ist ein Sicherheitsmodul im Linux-Kernel, das Zugriffe selbst für Root-Prozesse einschränkt.
- Der Enforcing-Modus ist das Ziel für maximale Sicherheit, Permissive hilft bei der Fehlersuche.
- Korrigieren Sie Dateikontexte mit chcon oder semanage fcontext, statt SELinux zu deaktivieren.
- Prüfen Sie Audit-Logs mit ausearch und sealert, um Probleme systematisch zu lösen.
- Vermeiden Sie chmod 777 und testen Sie Änderungen zuerst im Permissive-Modus.
Warum SELinux das Rückgrat der Serversicherheit ist
Stellen Sie sich vor, ein Angreifer hat eine Schwachstelle in Ihrer Webanwendung gefunden. Ohne SELinux hat er im schlimmsten Fall sofort Zugriff auf das gesamte System. Mit SELinux hingegen wird der Schaden begrenzt – es handelt sich um eine Mandatory Access Control (MAC), die selbst Root-Prozesse einschränkt. Dieser Leitfaden führt Sie Schritt für Schritt durch die Konfiguration, von der Aktivierung bis zur Fehlerbehebung, um Ihren Linux-Server (ob auf einem französischen Hosting wie OVHcloud oder einem eigenen Rechenzentrum) effektiv zu härten.
Kurz gesagt :
- SELinux ist ein Linux-Kernel-Sicherheitsmodul, das Zugriffe selbst für Root-Prozesse einschränkt (Mandatory Access Control).
- Der Enforcing-Modus ist das Ziel für maximale Sicherheit; Permissive dient nur zur Fehlersuche.
- Dateikontexte werden mit `chcon` oder `semanage fcontext` korrigiert, statt SELinux zu deaktivieren.
- Audit-Logs mit `ausearch` und `sealert` prüfen, um Probleme systematisch zu lösen; `chmod 777` vermeiden.
Was ist SELinux und wie funktioniert es?
SELinux (Security-Enhanced Linux) ist ein Sicherheitsmodul im Linux-Kernel, das jedem Prozess, jeder Datei und jedem Verzeichnis ein Etikett (Kontext) zuweist. Anhand dieser Etiketten und einer zentralen Richtlinie (Policy) wird entschieden, ob ein Prozess auf eine Ressource zugreifen darf. Es gibt zwei Hauptmodi: Enforcing (strikte Durchsetzung) und Permissive (nur Protokollierung). Für einen gehärteten Server ist das Ziel, dauerhaft im Enforcing-Modus zu laufen.
Den aktuellen Status prüfen und SELinux aktivieren
Der erste Schritt ist die Überprüfung des Ist-Zustands. Verbinden Sie sich per SSH mit Ihrem Server und führen Sie folgenden Befehl aus:
getenforceDieser Befehl zeigt Ihnen den aktuellen Modus an (Enforcing, Permissive oder Disabled). Um SELinux zu aktivieren oder den Modus dauerhaft zu ändern, bearbeiten Sie die Hauptkonfigurationsdatei:
sudo nano /etc/selinux/configHier setzen Sie den Parameter SELINUX= auf den gewünschten Wert (enforcing oder permissive). Wichtig: Eine Änderung in dieser Datei erfordert einen Neustart des Systems. Um den Modus ohne Neustart sofort zu wechseln, nutzen Sie:
sudo setenforce 1 # Aktiviert den Enforcing-Modus sofortDie richtige SELinux-Policy auswählen und konfigurieren
In der Datei /etc/selinux/config finden Sie auch den Parameter SELINUXTYPE=. Dieser definiert die verwendete Richtlinie. Für die meisten Server ist targeted die richtige Wahl. Diese Policy schützt kritische Systemdienste (wie httpd, sshd, named), lässt aber den Rest des Systems weitgehend unangetastet, was die Verwaltung erleichtert. Die Alternative mls (Multi-Level Security) ist komplexer und für Hochsicherheitsumgebungen mit strengen Geheimhaltungsstufen gedacht.
- Prüfen Sie die aktive Policy:
sudo sestatus - Wechseln Sie die Policy: Bearbeiten Sie die Datei
/etc/selinux/configund ändern Sie den WertSELINUXTYPE=targeted. - Starten Sie den Server neu:
sudo reboot
Nach dem Neustart können Sie mit sudo sestatus überprüfen, ob die neue Policy aktiv ist.
Praktische Beispiele: Dienste und Anwendungen korrekt konfigurieren
Hier wird es konkret. Oftmals schlägt ein Dienst fehl, weil der SELinux-Kontext für eine Datei oder ein Verzeichnis falsch ist. Hier sind die häufigsten Szenarien:
Beispiel A: Web-Server (Apache/Nginx)
Wenn Ihr Webserver unter /var/www/html auf eine Datei zugreifen soll, die Sie in /home/user/www abgelegt haben, blockiert SELinux den Zugriff. Der Befehl zur Korrektur lautet:
sudo chcon -R -t httpd_sys_content_t /home/user/wwwBeispiel B: Ändern des SSH-Ports
Wenn Sie SSH auf einen nicht standardmäßigen Port (z.B. 2222) umstellen, müssen Sie SELinux dies mitteilen:
sudo semanage port -a -t ssh_port_t -p tcp 2222Beispiel C: Datenbank-Verzeichnis verschieben
Um das Datenverzeichnis von MySQL/MariaDB zu verschieben, müssen Sie sowohl den Kontext als auch die Policy anpassen:
sudo semanage fcontext -a -t mysqld_db_t "/pfad/zum/neuen/verzeichnis(/.*)?"
sudo restorecon -Rv /pfad/zum/neuen/verzeichnisWie behebe ich SELinux-Probleme? Die Audit-Logs lesen und verstehen
Wenn etwas nicht funktioniert, ist die erste Anlaufstelle das Audit-Log. Hier finden Sie die genauen Gründe für blockierte Aktionen. Die Logs befinden sich in der Regel unter /var/log/audit/audit.log. Für eine benutzerfreundlichere Ausgabe verwenden Sie das Tool ausearch:
sudo ausearch -m avc -ts recentDieser Befehl zeigt die letzten Ablehnungen (AVC – Access Vector Cache) an. Ein weiteres unverzichtbares Werkzeug ist sealert. Dieses Tool analysiert die Logs und gibt verständliche Hinweise zur Lösung des Problems:
sudo sealert -a /var/log/audit/audit.logEs schlägt oft direkt den korrekten Befehl vor, um das Problem zu beheben.
Die häufigsten Fehler vermeiden: Ein Leitfaden für den reibungslosen Betrieb
Um Frustration zu vermeiden, sollten Sie diese typischen Stolperfallen kennen:
- SELinux einfach deaktivieren: Der größte Fehler ist, SELinux zu deaktivieren, sobald ein Problem auftritt. Das hebelt die gesamte Sicherheitsarchitektur aus.
chmod 777verwenden: Das Setzen von offenen Berechtigungen umgeht SELinux, ist aber ein massives Sicherheitsrisiko. Korrigieren Sie stattdessen den SELinux-Kontext.- Änderungen an der Konfiguration nicht testen: Wechseln Sie bei größeren Änderungen zuerst in den
Permissive-Modus und überwachen Sie die Logs, bevor Sie in denEnforcing-Modus zurückkehren. restoreconvergessen: Nach dem manuellen Ändern von Kontexten mitchconkann einrestorecondie Änderungen beim nächsten Neustart überschreiben. Nutzen Sie für dauerhafte Änderungensemanage fcontext.
Häufig gestellte Fragen (FAQ)
Was ist der Unterschied zwischen chcon und semanage fcontext?
chcon ändert den Kontext einer Datei sofort, aber vorübergehend. semanage fcontext fügt eine Regel zur Datenbank hinzu, die dauerhaft ist und durch restorecon angewendet wird. Für die dauerhafte Konfiguration ist semanage fcontext die richtige Wahl.
Mein Dienst startet nicht mehr. Liegt es an SELinux?
Sehr wahrscheinlich. Prüfen Sie die Audit-Logs mit sudo ausearch -m avc -ts recent. Wenn dort Einträge auftauchen, liegt das Problem an SELinux. Der Befehl sudo sealert -a /var/log/audit/audit.log gibt Ihnen oft eine konkrete Lösung.
Ist SELinux auch auf einem Container-System wie Docker relevant?
Ja, absolut. SELinux kann auch die Container-Isolation verstärken. Es ist jedoch wichtig, die Interaktion zwischen Docker und SELinux zu verstehen, um Konflikte zu vermeiden. Oftmals müssen Sie die SELinux-Integration in der Docker-Konfiguration explizit aktivieren.
Gibt es spezielle Anforderungen an SELinux auf Servern in Frankreich (z.B. bei OVHcloud)?
Die Grundlagen sind identisch. Wichtig ist, dass Sie die Sicherheitsgruppen und Firewall-Regeln Ihres Hosters (wie OVHcloud oder Scaleway) nicht mit SELinux verwechseln. SELinux arbeitet auf Betriebssystemebene, während die Cloud-Firewall auf Netzwerkebene arbeitet. Beide müssen korrekt konfiguriert sein, um die gesetzlichen Anforderungen an den Datenschutz (DSGVO) zu erfüllen.
| Modus | Verhalten | Empfehlung |
|---|---|---|
| Enforcing | Blockiert und protokolliert Verstöße | Für Produktionsserver |
| Permissive | Protokolliert nur, blockiert nicht | Für Tests und Fehlersuche |
| Disabled | Keine Durchsetzung | Nicht empfohlen |




