Montag, 8. November 2021

SELinux Dateikontext

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:

Option

Beschreibung

-a , --add

Einen Datensatz hinzufügen

-l, --list

Datensatz anzeigen

-d, --delete

Einen Datensatz löschen


Die Schreibweise '/wwwinhalt(/.*)?' ist leider sehr gewöhnungsbedürftig und ich habe keine Idee, warum man das nicht mit konventioneller Schreibweise gelöst hat. 

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. 

Kommando

Beschreibung

SELinux Modi verwalten

getenforce

Liefert den Betriebsmodus von SELinux zurück

sestatus

Wie getenforce mit weiteren Informationen

setenforce

Setzt den SELinux-Modus temporär

Kontext Verwalten

chcon

Ändert den Dateikontext

restorecon

Ändert den Dateikontext mit den Informationen aus dem /etc/selinux/targeted/contexts/files Verzeichnis

semange

Ändert den Dateikontext (mit fcontext)

Verwalten der SELinux Policies

seinfo

Informationen über SE-Policy Komponenten

semanage

Verwalten der Policy-Datenbank

sesearch

Sucht nach Regeln in der SELinux-Datenbank

Boolean Verwaltung

getsebool

Zeigt Booleans an

setsebool

Setzt Booleans

semange

Ändert Booleans in der Policy Datenbank

Fehlersuche

sealert

Suchtool für Fehler








Weiter geht es mit SELinux im Teil III


Keine Kommentare:

Kommentar veröffentlichen

Proxmox Memory Problem mit WIN2012 und SQL Server

 In meinen Kundenumgebungen beobachte ich eine sehr hohe Speicherauslastung bei Microsoft SQL Servern. Der Durchschnitt liegt bei >90% Sp...