SELinux Cheat Sheet
Status & Modus
| Befehl |
Beschreibung
|
getenforce |
Aktuellen Modus anzeigen (Enforcing / Permissive / Disabled)
|
sestatus |
Detaillierter SELinux-Status
|
sestatus -v |
Verbose-Status mit Kontexten
|
Modus temporär ändern (bis zum Reboot)
setenforce 0 # Permissive (nur loggen, nicht blockieren)
setenforce 1 # Enforcing (aktiv blockieren)
Modus dauerhaft ändern
In /etc/selinux/config:
SELINUX=enforcing # aktiv
SELINUX=permissive # nur Logging
SELINUX=disabled # deaktiviert (Reboot nötig)
Kontexte anzeigen
| Befehl |
Beschreibung
|
ls -Z |
Datei-Kontext anzeigen
|
ps -eZ |
Prozess-Kontext anzeigen
|
id -Z |
Eigenen Benutzer-Kontext anzeigen
|
netstat -tnlpZ |
Netzwerk-Kontext anzeigen
|
Ein Kontext hat die Form: user:role:type:level, z. B.:
system_u:object_r:httpd_sys_content_t:s0
Kontexte setzen & wiederherstellen
| Befehl |
Beschreibung
|
chcon -t httpd_sys_content_t /var/www/html/index.html |
Typ temporär setzen
|
chcon -R -t httpd_sys_content_t /var/www/html/ |
Rekursiv setzen
|
restorecon -v /var/www/html/index.html |
Kontext auf Standard zurücksetzen
|
restorecon -Rv /var/www/html/ |
Rekursiv zurücksetzen
|
Standard-Kontext dauerhaft anpassen
# Regel hinzufügen
semanage fcontext -a -t httpd_sys_content_t "/srv/web(/.*)?"
# Danach anwenden
restorecon -Rv /srv/web/
Boolesche Werte (Booleans)
| Befehl |
Beschreibung
|
getsebool -a |
Alle Booleans anzeigen
|
getsebool httpd_can_network_connect |
Einzelnen Boolean anzeigen
|
setsebool httpd_can_network_connect on |
Temporär aktivieren
|
setsebool -P httpd_can_network_connect on |
Dauerhaft aktivieren (-P = persistent)
|
Nützliche Booleans:
| Boolean |
Zweck
|
httpd_can_network_connect |
Apache darf Netzwerkverbindungen aufbauen
|
httpd_can_sendmail |
Apache darf Mails senden
|
httpd_use_nfs |
Apache darf NFS-Shares nutzen
|
samba_export_all_rw |
Samba darf beliebige Verzeichnisse exportieren
|
ftpd_anon_write |
FTP-Anon darf schreiben
|
Ports verwalten
| Befehl |
Beschreibung
|
semanage port -l |
Alle erlaubten Ports auflisten
|
| grep http |
Ports für HTTP anzeigen
|
semanage port -a -t http_port_t -p tcp 8080 |
Port 8080 für HTTP freigeben
|
semanage port -d -t http_port_t -p tcp 8080 |
Port-Regel löschen
|
AVC-Logs & Fehleranalyse
| Befehl |
Beschreibung
|
ausearch -m avc -ts recent |
Aktuelle AVC-Denials anzeigen
|
ausearch -m avc -ts today |
Denials von heute
|
journalctl -t setroubleshoot |
SELinux-Troubleshoot-Meldungen
|
sealert -a /var/log/audit/audit.log |
Alle Alerts mit Erklärung anzeigen
|
audit2why – Ursache erklären
ausearch -m avc -ts recent | audit2why
audit2allow – Regel generieren
# Regel anzeigen
ausearch -m avc -ts recent | audit2allow
# Eigenes Modul erstellen und laden
ausearch -m avc -ts recent | audit2allow -M meinmodul
semodule -i meinmodul.pp
Module verwalten
| Befehl |
Beschreibung
|
semodule -l |
Alle geladenen Module auflisten
|
semodule -i meinmodul.pp |
Modul installieren
|
semodule -r meinmodul |
Modul entfernen
|
semodule -d meinmodul |
Modul deaktivieren
|
semodule -e meinmodul |
Modul aktivieren
|
Typische Szenarien
Webserver: eigenes DocumentRoot
semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
restorecon -Rv /srv/www/
Samba: Verzeichnis freigeben
setsebool -P samba_export_all_rw on
# oder gezielt mit Kontext:
semanage fcontext -a -t samba_share_t "/srv/samba(/.*)?"
restorecon -Rv /srv/samba/
SSH: anderen Port verwenden
semanage port -a -t ssh_port_t -p tcp 2222
Dienst läuft nicht an – schnell debuggen
# 1. Modus prüfen
getenforce
# 2. Auf Permissive stellen (testen)
setenforce 0
systemctl restart <dienst>
# 3. Logs sichten
ausearch -m avc -ts recent | audit2why
# 4. Gezielt beheben, dann zurück auf Enforcing
setenforce 1
Siehe auch