SELinux (Security-Enhanced Linux) ist ein Mandatory Access Control (MAC)-System, das den Zugriff von Prozessen und Benutzern auf Dateien, Ports und andere Ressourcen streng kontrolliert. Für Webserver wie Nginx oder Apache ist SELinux eine zusätzliche Sicherheitsschicht, die über traditionelle Unix-Dateiberechtigungen hinausgeht. In diesem Tutorial lernen Einsteiger, IT-Studierende und Junior Network Engineers praxisnah, wie SELinux-Policies funktionieren, wie man sie überprüft und korrekt für Webserver setzt.
Grundlagen von SELinux
SELinux unterscheidet sich von klassischen Unix-Berechtigungen durch das Konzept von Labels und Policies. Jede Datei, jeder Prozess und jeder Port erhält ein SELinux-Label, das die zulässigen Operationen definiert.
Modi von SELinux
- Enforcing: SELinux-Policies werden strikt durchgesetzt.
- Permissive: Aktionen werden protokolliert, aber nicht blockiert.
- Disabled: SELinux ist vollständig deaktiviert.
sestatus
getenforce
SELinux-Labels verstehen
Jede Ressource auf einem SELinux-System hat ein Label in der Form:
user:role:type:level
Für Webserver sind insbesondere die type-Labels entscheidend:
httpd_sys_content_t: Dateien, die vom Webserver gelesen werden dürfenhttpd_sys_rw_content_t: Dateien, auf die Schreibzugriff erlaubt ist (Uploads, Logs)httpd_exec_t: Ausführbare Webserver-Module oder CGI-Skripte
Labels anzeigen
ls -Z /var/www/html
ps -eZ | grep httpd
Standard-Policies für Webserver
Webserver-Pakete wie httpd (Apache) oder nginx liefern vordefinierte SELinux-Policies mit. Diese definieren, welche Dateien, Ports und Prozesse erlaubt sind.
Typische erlaubte Operationen
- HTTP- und HTTPS-Zugriff auf
/var/www/html - Schreiben in
/var/www/html/uploadsoder/var/log/httpdbei korrektem Label - Verbindung zu Datenbanken über erlaubte Ports
- Ausführung von CGI-Skripten oder PHP-FPM-Prozessen mit speziellen Labels
SELinux-Fehler erkennen
Wenn SELinux eine Aktion blockiert, werden AVC-Denials in /var/log/audit/audit.log protokolliert:
tail -f /var/log/audit/audit.log
ausearch -m AVC
Ein typisches Problem ist, dass der Webserver nicht auf Upload-Verzeichnisse schreiben darf:
type=AVC msg=audit(...): avc: denied { write } for pid=1234 comm="httpd" name="uploads" dev="sda1" ino=56789 scontext=system_u:system_r:httpd_t tcontext=unconfined_u:object_r:user_home_t
SELinux-Labels setzen und ändern
Dateien und Verzeichnisse korrekt labeln
# Standardlabel für Webinhalte
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
Upload-Verzeichnis mit Schreibrechten für Webserver
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/uploads(/.*)?"
sudo restorecon -Rv /var/www/html/uploads
Temporäre Änderungen
chcon -R -t httpd_sys_rw_content_t /var/www/html/uploads
Ports und Netzwerkzugriffe kontrollieren
SELinux erlaubt nur Verbindungen über Ports, die in den Policies freigegeben sind. Webserver nutzen typischerweise 80 und 443:
semanage port -l | grep http_port_t
sudo semanage port -a -t http_port_t -p tcp 8080
Damit kann Nginx oder Apache auf alternativen Ports laufen.
Boolean-Werte für Webserver
SELinux bietet Booleans, um bestimmte Operationen zu erlauben oder zu blockieren:
httpd_can_network_connect_db: Erlaubt Zugriff auf Datenbankenhttpd_enable_cgi: CGI-Skripte ausführenhttpd_execmem: Speicher für bestimmte Module erlauben
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect_db 1
Praktische Tipps
- Immer
restoreconstattchconfür dauerhafte Änderungen verwenden - Bei AVC-Denials zuerst Permissive-Modus nutzen, um Fehler zu analysieren:
sudo setenforce 0 - Docker-Container benötigen separate SELinux-Konfigurationen (z.B.
:zoder:Zbei Volumes) - Regelmäßig
audit2allowverwenden, um fehlende Policy-Einträge zu erkennen und neue Module zu erstellen
Audit2allow Beispiel
sudo ausearch -m AVC -ts recent | audit2allow -M myhttpd
sudo semodule -i myhttpd.pp
Fazit zur Policy-Konfiguration
Mit korrekt gesetzten SELinux-Policies lassen sich Webserver sicher betreiben, ohne dass unnötige Rechte vergeben werden müssen. Das Verständnis von Labels, Booleans und Ports ist entscheidend für den stabilen Betrieb in produktiven Umgebungen.
SELinux erhöht die Sicherheit deutlich, insbesondere in Multi-Tenant- oder öffentlichen Serverumgebungen. Durch das systematische Setzen von Policies, Überwachen von AVC-Denials und Nutzung von Booleans lassen sich Webserver flexibel und gleichzeitig sicher betreiben.
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.











