SELinux auf Debian

Aus Xinux Wiki
Version vom 28. Juli 2026, 12:56 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „= SELinux statt AppArmor auf Debian = Diese Seite dokumentiert die Migration von AppArmor zu SELinux auf it2XX und die anschließende Evaluierung für sshd, A…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

SELinux statt AppArmor auf Debian

Diese Seite dokumentiert die Migration von AppArmor zu SELinux auf it2XX und die anschließende Evaluierung für sshd, Apache2 und nginx.

Hintergrund

Im Rahmen der Kursvorbereitung wurde AppArmor auf Basis eines Praxistests mit dem sshd-Profil aus apparmor-profiles-extra evaluiert. Dabei zeigten sich mehrere strukturelle Schwächen:

  • Das mitgelieferte sshd-Profil ist laut Debian-Paketbeschreibung explizit als experimentell gekennzeichnet und nicht für den enforce-Mode vorgesehen
  • Nach dem OpenSSH-Split (Version 9.8, sshd-session als separater Prozess) war das Profil nicht mehr aktuell und musste manuell über mehrere aa-logprof-Durchläufe nachgezogen werden
  • aa-logprof kann journald nicht nativ lesen; ohne zusätzlich installiertes rsyslog schlägt die Log-Auswertung fehl
  • Die generierten Vorschläge waren teils unpassend (z. B. Vorschlag von abstractions/apache2-common für einen SSH-Prozess)

Daraus folgt die Entscheidung, AppArmor zu entfernen und SELinux als MAC-System auf Debian einzusetzen und für sshd, Apache2 und optional nginx zu evaluieren.

AppArmor entfernen

Dienst stoppen und deaktivieren
  • systemctl stop apparmor
  • systemctl disable apparmor
Pakete entfernen
  • apt purge apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra python3-apparmor python3-libapparmor
  • apt autoremove
AppArmor im Kernel deaktivieren

Bootparameter prüfen:

  • cat /proc/cmdline | grep -i apparmor

Falls kein expliziter Parameter gesetzt ist, in /etc/default/grub ergänzen:

GRUB_CMDLINE_LINUX_DEFAULT="... apparmor=0"
GRUB-Konfiguration neu erstellen und neu starten
  • update-grub
  • reboot

SELinux installieren

Pakete installieren
  • apt install selinux-basics selinux-policy-default auditd
SELinux aktivieren
  • selinux-activate
  • reboot

Beim ersten Boot nach der Aktivierung wird das komplette Dateisystem relabelt. Dieser Vorgang kann je nach Systemgröße mehrere Minuten dauern.

Zunächst im permissive Mode testen
  • setenforce 0
  • getenforce

Erst nach erfolgreicher Prüfung aller Dienste auf enforcing umstellen, in /etc/selinux/config:

SELINUX=enforcing

Evaluierung: sshd

Das ssh-Policy-Modul wird von der Standard-Policy automatisch anhand des installierten Pakets geladen.

Paket sicherstellen
  • apt install openssh-server
Kontext prüfen
  • ps -eZ | grep sshd
  • ls -Z /usr/sbin/sshd

Erwarteter Typ: sshd_t für den Prozess, sshd_exec_t für die Binary.

Denials nach Testlogin auswerten
  • ausearch -m avc -c sshd

Evaluierung: Apache2

Das httpd-Policy-Modul deckt Apache2 unter Debian standardmäßig ab.

Paket installieren
  • apt install apache2
  • systemctl restart apache2
Kontext prüfen
  • ps -eZ | grep apache2
Vorhandene Port-Labels prüfen
  • semanage port -l | grep http_port_t
Custom Webroot freischalten (Beispiel /srv/kurswebsite)

Niemals chcon verwenden, sondern dauerhaft über semanage fcontext:

  • semanage fcontext -a -t httpd_sys_content_t "/srv/kurswebsite(/.*)?"
  • restorecon -Rv /srv/kurswebsite
Boolean für Schreibzugriff (z. B. Upload-Verzeichnis)
  • setsebool -P httpd_unified off
  • semanage fcontext -a -t httpd_sys_rw_content_t "/srv/kurswebsite/uploads(/.*)?"
  • restorecon -Rv /srv/kurswebsite/uploads

Evaluierung: nginx

Für nginx existiert kein natives Policy-Modul in Debians selinux-policy-default. Zwei Optionen stehen zur Wahl:

  1. Community-Modul (z. B. simple10/selinux-nginx von GitHub) kompilieren und einspielen
  2. nginx unter dem bestehenden httpd_t-Kontext laufen lassen
Ist-Zustand nach Installation prüfen
  • apt install nginx
  • ps -eZ | grep nginx

Falls der Prozess als unconfined_t läuft oder Denials auftreten, ist das die erwartete Lücke, die dokumentiert werden soll.

Denials auswerten, falls vorhanden
  • ausearch -m avc -c nginx
  • audit2why -a

Vergleichstabelle (auszufüllen nach Testlauf)

Dienst Natives Policy-Modul Setup-Aufwand Ergebnis
sshd ja, automatisch niedrig
Apache2 ja, automatisch niedrig
nginx nein, nur Community mittel-hoch

Offene Punkte

  • nginx-Community-Modul testen und Ergebnis dokumentieren
  • Empfehlung für den Kurs formulieren, sobald alle drei Dienste durchgetestet sind
  • Vergleich mit dem AppArmor-Verhalten aus dem ursprünglichen Test (siehe Hintergrund) im Fazit gegenüberstellen