SELinux auf Debian

Wieso kein AppArmor?

Na ja, eigentlich eine gute Frage die ich mir auch gestellt habe. Mal kurz ein paar Schritte zurück. Normalerweise verwende ich auf meinen privaten Servern ein reines Debian ohne AppArmore oder SELinux. Bei der Arbeit bisher CentOS und jetzt Alma mit SELinux.

Eigentlich Unsinn, da wir mit SELinux um einiges sicherer Fahren. Aber ja man kennt ja die Sprüche „Der Metzger isst kein Fleisch.“ und so.

Doch da es immer mehr ZeroDays gibt (oder mehr darüber berichtet wird) stellt man sich auch im privaten Bereich mal die Frage. Also dachte ich erst, hey, bei Ubuntu ist AppArmor standard und bei Debian ist es eigentlich auch gut dokumentiert, etc. Hab mich da rein gelesen und festgestellt das es irgendwie in meinen Logicsektor nicht so ganz rein wollte.

Ja klar, nehmen wir unseren Apache2 mal als Beispiel. Bei AppArmor installiere ich den Apache2 und installiere/aktiviere das AppArmor Profil dafür. Jetzt ist er Rechtetechnisch eingeschränkt und Fertig. War doch einfach. Aber was ist jetzt mit dem Rest von der Kiste?

Bei SELinux installiere ich den Apache2 und gebe nun bestimmte Regeln frei damit der Apache2 auch sauber laufen kann. Da ich mit SELinux schonmal ein Grundprofil auf der ganzen Kiste habe ist da eigentlich schonmal „der Grundschutz“ drauf.

AppArmor == bestimmte Dinge verbieten

SELinux == alles verbieten und bestimmte Dinge frei geben

Also ja, dadurch leiten wir ab, was man ab und an mal im Netz lesen kann, SELinux ist komplizierter, schwieriger, „wie schalte ich das ab?“ und so weiter.

Doch mal ehrlich, bei Eurer Firewall macht ihr es hoffentlich doch auch so. Erstmal alles blockieren und nicht erlauben und dann nur die Ports aufmachen die wirklich offen sein müssen.

Daher werde ich mal schauen ob das auch mit SELinux auf Debian klappt, da hier ja niemand von RedHat die Pakete und Regeln pflegt, was vermutlich in noch mehr Arbeit ausarten wird.

Die SELinux Installation und Aktivierung

Der Teil ist auf der Debian Seite schon beschrieben: https://wiki.debian.org/SELinux/Setup

Der Eintrag ist aus dem Jahr 2020, dann mal sehen, da dürfte sich ja nicht viel geändert haben. Zum testen nehmen wir ein standard Bookworm Netinstall (nicht mehr als der ssh server drauf) mit einem ext4 und fangen mal an.

Die ganzen „Workarounds“ die dort gelisted sind irgnorieren wir erstmal gekonnt. Man bemerke, der Artikel ist von 2020 und die Debian BugListe hat sich um einiges geändert.

apt-get install selinux-basics selinux-policy-default auditd

Das ist erstmal ein Brocken. Wir installieren die „basics“ was auch immer da enthalten ist, dann die default policy und noch den auditd (der die SELinux meckereien protokolliert).

selinux-activate

reboot

Keine Panik, der reboot dauert ein wenig länger als gewohnt. Wir wollen ja alles „labeln“ auf dem System. Wer es vielleicht vorher schon bemerkt hat, bei einem „ls“ Befehl ohne SELinux, produziert das „-Z“ nur ein Fragezeichen (?) und das wollen wir ja ändern. So, wenn das alles durch ist einmal checken:

check-selinux-installation

Na ja, bei mir liefert der Befehl weder Fehler noch ok, also gehen wir mal davon aus das es gut ausschaut.

root@vmd114199:~# ls -Z
system_u:object_r:user_home_t:s0 update.txt
root@vmd114199:~# getenforce
Permissive

Jedenfalls sieht es jetzt so aus wie wenn unser SELinux auf Debian am Laufen ist.

Der audit Log ist aber auch schon voll (/var/log/audit/audit.log). Das sieht aber für mich nach Schritt zwei aus und das behandeln wir an einem anderen Tag 🙂