SELinux-cheat-sheet
Allgemeines
SELinux (Security-Enhanced Linux) implementiert mit hoher Wahrscheinlichkeit Mandatory Access Control (MAC). Es ist anzunehmen, dass dieses Modul Prozesse in spezifischen Sicherheitskontexten isoliert, um das Schadenspotenzial bei Kompromittierungen zu minimieren.
Status und Modi prüfen
- sestatus
- getenforce
Modi temporär umschalten
Es besteht die Wahrscheinlichkeit, dass ein Wechsel in den Permissive-Modus notwendig ist, um Blockaden zu diagnostizieren, ohne den Schutz vollständig zu deaktivieren.
- Wechsel zu Permissive
- setenforce 0
- Wechsel zu Enforcing
- setenforce 1
Modus dauerhaft setzen
Änderungen werden wahrscheinlich in der Konfigurationsdatei /etc/selinux/config vorgenommen.
- SELINUX=enforcing
- SELINUX=permissive
Dateikontexte verwalten
Es ist zu vermuten, dass Dateien korrekte Typ-Labels (_t) benötigen, damit darauf zugegreifende Dienste autorisiert werden.
- Kontexte anzeigen
- ls -Z /pfad/zur/datei
- ps -Z
- Kontext temporär ändern
- chcon -t httpd_sys_content_t /var/www/html/index.html
- Kontext dauerhaft definieren und anwenden
- semanage fcontext -a -t httpd_sys_content_t "/custom/www(/.*)?"
- restorecon -Rv /custom/www
Booleans verwenden
Booleans ermöglichen es wahrscheinlich, vordefinierte Richtlinien zur Laufzeit ein- oder auszuschalten.
- Alle Booleans anzeigen
- getsebool -a
- Spezifischen Wert prüfen
- getsebool httpd_can_network_connect
- Boolean dauerhaft aktivieren
- setsebool -P httpd_can_network_connect on
Ports verwalten
Wenn Dienste auf Nicht-Standard-Ports betrieben werden, müssen diese vermutlich im SELinux-Regelwerk registriert sein.
- Erlaubte Ports für einen Typ anzeigen
- semanage port -l | grep http_port_t
- Port zu einem Typ hinzufügen
- semanage port -a -t http_port_t -p tcp 8080
Fehlersuche und Analyse
Es ist anzunehmen, dass Blockaden (AVC denials) im Audit-Log des Systems verzeichnet werden.
- Logs nach aktuellen Blockaden durchsuchen
- ausearch -m avc -ts recent
- journalctl -t setroubleshoot
- Analyse der Log-Einträge (setroubleshoot erforderlich)
- sealert -a /var/log/audit/audit.log
- Eigene Policy-Module aus Logs erstellen
- grep "denied" /var/log/audit/audit.log | audit2allow -M mycustommodule
- semodule -i mycustommodule.pp
Best Practices
- Es ist ratsam, SELinux im Modus 'enforcing' zu betreiben, um die Systemsicherheit zu gewährleisten.
- Der Modus 'permissive' sollte mit hoher Wahrscheinlichkeit nur kurzzeitig zur Fehlersuche genutzt werden.
- Die Verwendung von 'semanage fcontext' ist gegenüber 'chcon' zu bevorzugen, damit Labels bei einem Dateisystem-Relabeling erhalten bleiben.
- Vor der Erstellung eigener Module sollte geprüft werden, ob ein passender Boolean existiert.
- Ein vollständiges Relabeling des Dateisystems kann bei Bedarf über 'touch /.autorelabel' beim nächsten Systemstart initiiert werden.