SELinux Grundlagen und Konfiguration – Linux Mandatory Access Control | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

303 Dokumentationen verfügbar

Wissensdatenbank

SELinux Grundlagen Konfiguration

Zuletzt aktualisiert: 05.04.2026 um 19:42 Uhr

SELinux Grundlagen und Konfiguration – Linux Mandatory Access Control

Was ist SELinux?

SELinux (Security Enhanced Linux) ist ein Mandatory Access Control (MAC) System, das über die klassische Discretionary Access Control (DAC) hinausgeht. Während DAC-Systeme nur Dateiberechtigungen prüfen, erzwingt SELinux zusätzliche Sicherheitsrichtlinien auf Basis von Sicherheitskontexten und Policies.

💡 Tipp: SELinux ist auf RHEL, CentOS und Fedora Standard. Ubuntu verwendet stattdessen AppArmor als MAC-System.

DAC vs. MAC

DAC (Discretionary Access Control): Der Dateieigentümer entscheidet über Zugriff. Ein Prozess mit Dateiberechtigungen kann beliebig handeln.

MAC (Mandatory Access Control): Ein zentrales System erzwingt Richtlinien unabhängig von Eigentümerrechten. Selbst der Root-Benutzer muss sich SELinux-Policies unterordnen.

SELinux Modi

SELinux kennt drei Betriebsmodi:

Modus Beschreibung Use-Case
Enforcing SELinux ist aktiv und blockiert unerlaubte Zugriffe. Verstöße werden geloggt. Produktionsumgebungen
Permissive SELinux ist aktiv, blockiert aber nicht. Verstöße werden geloggt zur Diagnose. Troubleshooting und Konfiguration
Disabled SELinux ist deaktiviert. Keine Sicherheitsüberprüfungen. Nicht empfohlen

SELinux Status prüfen

Aktuellen Modus anzeigen

$ getenforce
Enforcing

Oder mit ausführlicheren Informationen:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Policy from config file:        targeted
Mode from config file:          enforcing
Current mode:                   enforcing
Mode from command line:         Not specified
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     enabled

SELinux Modi ändern

Temporär ändern (bis Neustart)

$ sudo setenforce 0    # Zu Permissive
$ sudo setenforce 1    # Zu Enforcing
⚠️ Wichtig: Der Wechsel von Enforcing zu Disabled erfordert einen Neustart. Mit setenforce ist dies nicht möglich.

Persistent ändern (permanent)

Bearbeite die SELinux-Konfigurationsdatei:

$ sudo nano /etc/selinux/config

Ändere die Zeile:

SELINUX=enforcing    # auf permissive oder disabled ändern

Nach einem Neustart wird die neue Einstellung aktiv:

$ sudo reboot

SELinux Kontexte verstehen

Was sind Kontexte?

SELinux-Kontexte definieren die Sicherheitsidentität von Dateien und Prozessen. Ein Kontext hat die Form:

user:role:type:level

Beispiel: system_u:object_r:httpd_exec_t:s0

Dateikontexte anzeigen

$ ls -Z /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 index.html
system_u:object_r:httpd_sys_content_t:s0 about.html

Prozesskontexte anzeigen

$ ps -Z | grep apache
system_u:system_r:httpd_t:s0          1234 ?  Ss  0:00 /usr/sbin/httpd

Häufige SELinux Kontexte

Kontext Beschreibung
httpd_t Apache/nginx Webserver Prozess
httpd_sys_content_t Webserver-Inhalte (lesbar)
httpd_sys_rw_content_t Webserver-Inhalte (lesbar/schreibbar)
sshd_t SSH-Daemon Prozess
admin_home_t Admin-Home-Verzeichnis
user_home_t Benutzer-Home-Verzeichnis

Kontexte verwalten

Kontexte mit restorecon zurücksetzen

SELinux hat einen Standard-Kontext für jede Datei basierend auf ihrem Pfad. Mit restorecon wird dieser wiederhergestellt:

$ sudo restorecon -v /var/www/html/
Relabeled /var/www/html from system_u:object_r:admin_home_t:s0
            to system_u:object_r:httpd_sys_content_t:s0

Rekursiv für ein ganzes Verzeichnis:

$ sudo restorecon -Rv /var/www/html/

Kontexte mit semanage ändern

semanage erlaubt permanente Kontextänderungen:

$ sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/custom(/.*)?"
$ sudo restorecon -Rv /var/www/custom/

SELinux Booleans

Booleans sind Schalter, um SELinux-Policies zu aktivieren/deaktivieren:

Alle Booleans anzeigen

$ getsebool -a
allow_execheap --> off
allow_execmem --> on
httpd_can_network_connect --> off
httpd_can_sendmail --> off

Boolean aktivieren/deaktivieren

$ sudo setsebool httpd_can_network_connect on    # Temporär
$ sudo setsebool -P httpd_can_network_connect on  # Persistent (-P)

Fehlerbehandlung mit Audit-Logs

SELinux Denials finden

Wenn SELinux eine Aktion blockiert, wird dies geloggt:

$ sudo ausearch -m avc -ts recent
time->Fri Mar 05 14:32:10 2026
type=AVC msg=audit(1646498530.123:456): avc: denied { getattr }
  for pid=1234 comm="httpd" name="upload" dev="dm-0" ino=654321
  scontext=system_u:system_r:httpd_t:s0
  tcontext=system_u:object_r:admin_home_t:s0 tclass=dir permissive=0

Policy-Vorschläge mit audit2allow

audit2allow generiert Policy-Module basierend auf Denials:

$ sudo audit2allow -a -M httpd_custom
$ sudo semodule -i httpd_custom.pp
✅ Gut zu wissen: audit2allow sollte nur als Leitfaden verwendet werden. Überprüfe immer, ob die vorgeschlagenen Policies sicherheitsmäßig sinnvoll sind.

Praktisches Beispiel: Webserver mit SELinux

Szenario

Du möchtest Apache mit custom Content im Verzeichnis /opt/webapp ausführen. SELinux blockiert den Zugriff.

Schritte

1. Problem diagnostizieren:

$ sudo ausearch -m avc -ts recent | grep -i apache

2. Kontext für Verzeichnis setzen:

$ sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapp(/.*)?"
$ sudo restorecon -Rv /opt/webapp/

3. Wenn Apache Dateien schreiben muss:

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/opt/webapp/uploads(/.*)?"
$ sudo restorecon -Rv /opt/webapp/uploads/

4. Wenn Apache auf andere Services zugreifen muss:

$ sudo setsebool -P httpd_can_network_connect on

5. Änderungen testen und verifizieren:

$ ls -Z /opt/webapp/
$ getsebool httpd_can_network_connect

Troubleshooting Checkliste

Problem Diagnose Lösung
Apache kann Dateien nicht lesen ls -Z zeigt falschen Kontext restorecon -Rv oder semanage fcontext
Datenbankverbindung fehlgeschlagen ausearch zeigt denied für Port-Zugriff setsebool httpd_can_network_connect on
Socket-Zugriff verweigert ausearch zeigt unix_stream_socket denied Custom Policy mit audit2allow

Wichtige Befehle Zusammenfassung

# Status prüfen
getenforce
sestatus

# Modus ändern
setenforce 0|1          # Temporary
/etc/selinux/config     # Permanent

# Kontexte anzeigen und ändern
ls -Z /path
ps -Z
restorecon -Rv /path
semanage fcontext -a -t TYPE "/path"

# Booleans verwalten
getsebool -a
setsebool -P NAME on|off

# Fehlerbehandlung
ausearch -m avc -ts recent
audit2allow -a -M MODULNAME
semodule -i MODULNAME.pp

Weitere Ressourcen

Weitere Ressourcen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120