SELinux Teil II
SELinux Kontext
Ordner und Dateien tragen einen SELinux-Label der wie folgt aufgebaut ist:
SELinux_User : Rolle : Type : Level File
Beispiel:
Wir betrachten einmal den Apache-Webserver, welcher mit dem Kontext httpd_t läuft:
ps axZ | grep httpd
system_u:system_r:httpd_t:s0 115777 ? Ss 0:00 /usr/sbin/httpd -DFORGROUND
Dazu werfen wir noch einen Blick das Verzeichnis /var/www/html an:
ls -dZ /var/www/html
system_u:object_r:httpd_sys_content_t:s0 /var/www/html
Wir stellen fest, dass der Apache-Webserver mit dem Kontext httpd_t läuft und das Verzeichnis /var/www/html den Dateikontext httpd_sys_content_t besitzt.
Wenn SELinux aktiv ist, existiert eine Regel, die besagt, dass der httpd-Prozess mit dem Kontext http_t auf das Verzeichnis /var/www/html mit dem Dateikontext httpd_sys_content_t Zugriff hat. Der Webserver darf aber nicht auf das Verzeichnis (Beispiel) /tmp oder /var/tmp mit dem Dateikontext tmp_t zugreifen.
Ein böswilliger Angreifer, der nun irgendwie den httpd-Prozess kompromittiert und damit zumindest die Rechte des Users apache und der Gruppe apache erhält, ist in seinem tun und handeln dennoch stark eingeschränkt. SELinux sei Dank.
Anpassen der SELinux Kontexte
Unser Apache-Webserver soll nun nicht mehr seinen Inhalt unter /var/www/html finden, sondern ganz einfach unter /wwwinhalt. Die Konfigdatei für den Apache wird dementsprechend angepasst und das Verzeichnis angelegt:
mkdir /wwwinhalt
Wir stellen fest, dass der Webserver zwar startet aber beim Versuch die Webseite abzurufen, kommt es zu einem Fehler.
curl http://localhost --> Access denied
Wir schauen uns das Verzeichnis /wwwinhalt nochmal genau an
ls -dZ /wwwinhalt
unconfined_u:object_r:default_t:s0 /wwwinhalt/
und stellen fest, dass der Typkontext (default_t) nicht zum Webserver passt. Der Typkontext muss geändert werden.
Dazu wird zuerst ein Eintrag in der SELinux-Datenbank erzeugt (semange fcontext) und dann dieser Eintrag auf dem Verzeichnis /wwwinhalt angewendet (restorecon):
semange fcontext Befehle:
Jetzt wo der Kontext-Typ auf dem Verzeichnis /wwwinhalt auf http_sys_content_t gesetzt ist, darf der Webserver die Dateien lesen und im Web präsentieren.
Das Problem hätte man mit dem Kommando chcon (change context) temporär lösen können. Damit hätte man aber keinen Eintrag in der SELinux-Datenbank erzeugt. Nach einem Reboot wäre das Verzeichnis also wieder mit dem Inhalt dieser Datenbank gelabelt worden und der Webserver hätte seine Berechtigung wieder verloren.
Weiter geht es mit SELinux im Teil III
Keine Kommentare:
Kommentar veröffentlichen