linux-rhel-centos-fedora security selinux hardening rhel rocky-linux

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 stattdessen Permissive zum 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?

  1. Enforcing: Standard. Regeln werden durchgesetzt, Zugriffe blockiert und geloggt.
  2. Permissive: Regeln werden nicht durchgesetzt, aber Verstöße werden geloggt (ideal zum Troubleshooting).
  3. 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