SELinux Cheat-Sheet

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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