SELinux für Webserver: Policies verstehen und korrekt setzen

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ürfen
  • httpd_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/uploads oder /var/log/httpd bei 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 Datenbanken
  • httpd_enable_cgi: CGI-Skripte ausführen
  • httpd_execmem: Speicher für bestimmte Module erlauben
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect_db 1

Praktische Tipps

  • Immer restorecon statt chcon fü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. :z oder :Z bei Volumes)
  • Regelmäßig audit2allow verwenden, 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.

Related Articles