linux-rhel-centos-fedora security selinux booleans hardening

SELinux Booleans: Policy Tuning (Artikel 071)

Anpassung des SELinux-Verhaltens ohne Neukompilierung der Policy. Einsatz von Booleans zur Freischaltung von Funktionen wie Netzwerkzugriff für Webserver oder Home-Directories.

# SELinux Booleans: Den Wächter flexibel konfigurieren

TL;DR / Management Summary Viele Admins schalten SELinux ab, wenn eine Applikation blockiert wird. Das ist fatal. Oft reicht es, einen Boolean umzulegen. Booleans sind “Lichtschalter” in der SELinux-Policy, die zur Laufzeit Funktionen ein- oder ausschalten (z.B. “Darf der Webserver Mails senden?”). In diesem Modul lernen wir, wie man Booleans findet, setzt und permanent speichert.


# 1. Einführung & Konzepte

Logikschalter statt Code-Änderung.

Eine SELinux-Policy ist komplex. Um sie nicht für jede Kleinigkeit neu schreiben zu müssen, haben Entwickler Variablen eingebaut.

Beispiel: Der Typ httpd_t darf standardmäßig keine Netzwerkverbindungen zu Datenbanken aufbauen (Sicherheitsrisiko bei SQL-Injection). Wenn Ihre PHP-App aber eine Datenbank braucht, legen Sie einfach den Schalter httpd_can_network_connect_db um.

graph LR
    A[Apache Process] --> B{SELinux Policy}
    B -->|Check Boolean: httpd_can_network_connect| C{Value: ON?}
    C -->|Yes| D[Allow Network Access]
    C -->|No| E[Deny & Log AVC]

# 2. Booleans finden und anzeigen

Was ist möglich?

Es gibt hunderte Booleans im System.

# Alle Booleans auflisten

getsebool -a

# Nach bestimmten Diensten suchen

getsebool -a | grep httpd

# Beschreibungen anzeigen (Sehr hilfreich!)

sudo semanage boolean -l | grep httpd

Dies zeigt Ihnen zusätzlich zum Status eine kurze Erklärung, was der Schalter bewirkt.


# 3. Booleans setzen

Den Schalter umlegen.

# Temporär (bis zum Reboot)

sudo setsebool httpd_can_network_connect on

# Permanent (Übersteht Reboot)

Nutzen Sie das Flag -P.

sudo setsebool -P httpd_can_network_connect on

Performance: Das Setzen mit -P kann einige Sekunden dauern, da die Policy-Datenbank auf der Disk neu geschrieben werden muss.


# 4. Wichtige Booleans für SysAdmins

Die “Must-Knows” im RZ.

Boolean Zweck
httpd_can_network_connect Erlaubt Webservern (Nginx/Apache), TCP-Verbindungen (Proxy/DB) aufzubauen.
httpd_enable_homedirs Erlaubt Zugriff auf /home/user/public_html.
ftp_home_dir Erlaubt FTP-Usern Zugriff auf ihre Home-Verzeichnisse.
virt_use_nfs Erlaubt KVM/QEMU das Speichern von VM-Images auf NFS-Shares.
ssh_sysadm_login Erlaubt SSH-Logins direkt in die System-Admin-Rolle.

# 5. Troubleshooting & “War Stories”

Wenn die Logik hinkt.

# Story 1: “Der Reverse Proxy Fail”

Symptom: Nginx als Reverse Proxy liefert “502 Bad Gateway”. In den Nginx-Logs steht “Permission Denied” beim Verbinden zum Upstream-Socket. SELinux ist auf Enforcing. Ursache: Der Boolean httpd_can_network_connect ist off. Lösung: sudo setsebool -P httpd_can_network_connect on.

# Story 2: “Mails werden nicht versendet”

Symptom: Eine PHP-Applikation kann keine Bestätigungs-Mails via sendmail verschicken. Ursache: Aus Sicherheitsgründen darf der Webserver-Kontext keine Mail-Binaries ausführen. Lösung: sudo setsebool -P httpd_can_sendmail on.


# 6. Fazit & Empfehlung

  • Reihenfolge: Bei Fehlern immer erst prüfen: Stimmen die Labels (ls -Z)? Wenn ja, gibt es einen passenden Boolean (getsebool -a)?
  • Dokumentation: Dokumentieren Sie gesetzte Booleans in Ihrem Setup-Script. Es gibt nichts ärgerlicheres als einen manuell gesetzten Boolean, der beim nächsten Server-Setup fehlt.
  • Minimalismus: Aktivieren Sie nur die Booleans, die absolut notwendig sind. Jeder aktivierte Schalter weicht die Isolation ein kleines Stück auf.

# Anhang: Cheatsheet

Aufgabe Befehl
Liste aller Booleans getsebool -a
Boolean permanent an setsebool -P <name> on
Boolean permanent aus setsebool -P <name> off
Beschreibung suchen `semanage boolean -l
Nur geänderte Booleans sehen semanage boolean -l -C
Status eines Booleans getsebool <name>