SELinux Basics: Enforcing vs. Permissive (Artikel 067)
Einführung in Security-Enhanced Linux (SELinux). Verständnis der Betriebsmodi, Label-basierte Sicherheit und die korrekte Handhabung von Enforcing und Permissive.
# SELinux Basics: Sicherheit durch Labels
TL;DR / Management Summary SELinux (Security-Enhanced Linux) ist eine zusätzliche Sicherheitsebene für den Kernel, die standardmäßig in RHEL, Rocky und Fedora aktiv ist. Es implementiert Mandatory Access Control (MAC). Anstatt nur auf User-Rechte zu schauen, prüft SELinux, ob ein Prozess (Subjekt) mit einem bestimmten Label auf eine Datei (Objekt) mit einem passenden Label zugreifen darf. Goldene Regel: Schalten Sie SELinux niemals aus (
Disabled). Nutzen Sie stattdessenPermissivezum Debuggen.
# 1. Einführung & Architektur
Subjekte, Objekte und Typen.
In SELinux hat alles ein Label. Ein Label besteht aus: user:role:type:level. Für die meisten Admins ist der Typ (Type) das Wichtigste.
# Der Entscheidungsfluss (Mermaid)
graph TD
A[Process: httpd_t] -->|Access File| B{Kernel Check}
B -->|1. Standard DAC| C[Check Permissions rwx]
C -->|Allow| D{2. SELinux MAC}
D -->|Match Label?| E[Allow Access]
D -->|No Match| F[Deny & Log AVC]
F --> G[Audit Log /var/log/audit/audit.log]
# 2. Die drei Betriebsmodi
Wie scharf ist der Wächter?
- Enforcing: Standard. Regeln werden durchgesetzt, Zugriffe blockiert und geloggt.
- Permissive: Regeln werden nicht durchgesetzt, aber Verstöße werden geloggt (ideal zum Troubleshooting).
- Disabled: Der Kernel-Code für SELinux wird beim Booten gar nicht erst geladen.
# Status prüfen
sestatus
# oder
getenforce
# 3. Modi zur Laufzeit ändern
Debuggen ohne Reboot.
# Umschalten (Enforcing <-> Permissive)
# In den Test-Modus schalten
sudo setenforce 0
# Zurück in den harten Modus
sudo setenforce 1
# Permanent ändern
Datei: /etc/selinux/config
SELINUX=permissive
Vorsicht: Das Ändern auf Disabled erfordert einen Reboot und ein zeitaufwändiges Relabeling des gesamten Systems, wenn man es wieder aktivieren will. Nutzen Sie Permissive.
# 4. Day-2 Operations: Labels anzeigen
Die vierte Dimension der Berechtigungen.
Nutzen Sie das -Z Flag bei fast jedem Linux-Befehl, um die SELinux-Kontexte zu sehen.
# Dateien listen
ls -Z /var/www/html/
# Output: unconfined_u:object_r:httpd_sys_content_t:s0 index.html
# Prozesse listen
ps -eZ | grep httpd
# Output: system_u:system_r:httpd_t:s0 nginx
# 5. Troubleshooting & “War Stories”
Wenn die Applikation ‘Permission Denied’ sagt.
# Story 1: “Der faule Admin (Disabled)”
Symptom: Ein Server wurde gehackt. Der Angreifer konnte vom Webserver aus direkt auf die Datenbank-Konfigurationsdateien in /root/ zugreifen.
Ursache: SELinux wurde während der Installation auf Disabled gesetzt, weil “PHP nicht funktionierte”.
Lösung: Hätten wir SELinux auf Enforcing gelassen, hätte der Typ httpd_t niemals auf admin_home_t (Root Home) zugreifen dürfen, selbst wenn der Webserver als Root gelaufen wäre.
# Story 2: “Das verschobene Verzeichnis”
Symptom: Ein Admin kopiert HTML-Dateien von /home/user/ nach /var/www/html/. Nginx liefert 403 Forbidden. Die Rechte (chmod 755) stimmen.
Ursache: Mit mv behält die Datei ihr altes Label (user_home_t). Nginx darf diesen Typ nicht lesen.
Lösung: Nutzen Sie restorecon, um die korrekten Standard-Labels für den neuen Ort wiederherzustellen:
sudo restorecon -Rv /var/www/html/
# 6. Fazit & Empfehlung
- Enforcing: Bleibt immer an.
- Permissive: Nur zum Testen neuer Applikationen.
- Disabled: Existiert für uns nicht.
- Logging: Schauen Sie bei Fehlern immer in
/var/log/audit/audit.log(siehe Artikel 072).
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Detaillierter Status | sestatus |
| Kurz-Status | getenforce |
| In Test-Modus | setenforce 0 |
| In Hard-Modus | setenforce 1 |
| Labels reparieren | restorecon -Rv /pfad |
| Label manuell setzen | chcon -t httpd_sys_content_t file.html |