Zum Inhalt springen

Linux/SELinux/01 Grundlagen/Quickstart

Aus Foxwiki

SELinux/Debian - SELinux unter Debian

Beschreibung

SELinux einrichten

Die Unterstützung von SELinux ist in den von Debian bereitgestellten Standard-Kerneln enthalten

  • Die Kernprogramme von Unix unterstützen SELinux ohne Änderungen
  • Es ist daher recht einfach, SELinux zu aktivieren

Der Befehl

apt install selinux-basics selinux-policy-default auditd

installiert automatisch die Pakete, die zur Konfiguration eines SELinux-Systems erforderlich sind

Paket selinux-policy-default

Enthält einen Satz von Standardregeln

  • Standardmäßig beschränkt dieses Regelwerk nur den Zugang für einige besonders gefährdete Dienste
  • Die Nutzersitzungen sind nicht eingeschränkt und es ist daher unwahrscheinlich, dass SELinux legitime Nutzeraktionen blockieren würde
  • Dieses erhöht jedoch die Sicherheit von Systemdiensten, die auf dem Rechner laufen
  • Um ein Regelwerk einzurichten, das den alten „strengen“ Regeln entspricht, müssen Sie nur das Modul unconfined deaktivieren (Linux/SELinux/01 Grundlagen/Debian/Module)

Sobald das Regelwerk installiert ist, sollten Sie alle verfügbaren Dateien kennzeichnen (das heißt, sie einem Typ zuzuordnen)

  • Dieser Vorgang muss mit dem Befehl fixfiles relabel von Hand gestartet werden
Das SELinux-System ist nun einsatzbereit
  • Um es zu aktivieren, sollten Sie den Parameter selinux=1 security=selinux zum Linux-Kernel hinzufügen
  • Der Parameter audit=1 aktiviert bei SELinux das Protokollieren, durch das alle unterbundenen Vorgänge aufgezeichnet werden
  • Schließlich bringt der Parameter enforcing=1 das Regelwerk zur Anwendung
    • ohne ihn läuft SELinux in seinem standardmäßigen permissive-Modus
    • bei dem unterbundene Vorgänge zwar protokolliert, aber dennoch ausgeführt werden

Sie sollten daher die Konfigurationsdatei des GRUB-Bootloaders anpassen, indem Sie die gewünschten Parameter anhängen

  • Ein einfacher Weg, dies zu tun, besteht darin, die Variable GRUB_CMDLINE_LINUX in der Datei /etc/default/grub zu ändern und dann den Befehl update-grub auszuführen
  • SELinux ist dann nach einem Neustart aktiv
Hinweis

Das Skript selinux-activate automatisiert diese Vorgänge und erzwingt das Kennzeichnen der Dateien beim nächsten Rechnerstart

  • wodurch vermieden wird, dass neue, nicht gekennzeichnete Dateien erstellt werden, während SELinux noch nicht aktiv ist und das Kennzeichnen noch andauert

SELinux-System verwalten

Das SELinux-Regelwerk ist ein modularer Satz von Regeln, und mit seiner Installation werden automatisch alle relevanten Module entsprechend den bereits installierten Diensten erkannt und aktiviert

  • Das System ist hierdurch sofort funktionsfähig
  • Wenn jedoch ein Dienst später als das SELinux-Regelwerk installiert wird, müssen Sie in der Lage sein, das entsprechende Modul manuell zu aktivieren
  • Hierzu dient der Befehl semodule
  • Darüber hinaus müssen Sie in der Lage sein, die Rollen festzulegen, die jeder Nutzer bestätigen kann
  • Dies geschieht mit dem Befehl semanage

Diese beiden Befehle können somit dazu benutzt werden, die aktuelle SELinux-Konfiguration, die in /etc/selinux/default/ gespeichert ist, zu ändern

  • Im Gegensatz zu anderen Konfigurationsdateien, die Sie in /etc/ finden, dürfen diese Dateien nicht manuell verändert werden
  • Sie sollten hierzu die für diesen Zweck vorgesehenen Programme verwenden

Module verwalten

Identitäten verwalten

Jedes Mal, wenn sich ein Benutzer anmeldet, wird ihm eine SELinux-Identität zugewiesen

  • Diese bestimmt die Rollen, die er bestätigen kann
  • Diese beiden Zuordnungen (des Benutzers zur Identität und der Identität zu den Rollen) können mit dem Befehl semanage konfiguriert werden

Sie sollten die Handbuchseite zu semanage(8) lesen

  • Alle verwalteten Konzepte verfügen über eine eigene Handbuchseite
    • Beispiel: semanage-login(8)
  • Auch wenn die Syntax des Befehls für alle verwalteten Konzepte in der Regel ähnlich ist, wird empfohlen, die jeweilige Handbuchseite zu lesen
Optionen, die für die meisten Unterbefehle gelten
  • -a to add
  • -d to delete
  • -m to modify
  • -l to list
  • -t to indicate a type (or domain)
semanage login -l

Führt die aktuellen Zuordnungen zwischen Benutzerkennungen und SELinux-Identitäten auf

  • Benutzer, die keinen ausdrücklichen Eintrag haben, erhalten die Identität, die im Eintrag __default__ angegeben ist
semanage login -a -s user_u benutzer

Ordnet die Identität user_u dem angegebenen Benutzer zu

semanage login -d benutzer

Entfernt den Zuordnungseintrag, der an diesen Benutzer vergeben war

sudo semanage login -a -s user_u rhertzog
sudo semanage login -l

Login Name SELinux User MLS/MCS Range Service

__default__ unconfined_u s0-s0:c0.c1023 *
rhertzog user_u s0 *
root unconfined_u s0-s0:c0.c1023 *
sudo semanage login -d rhertzog
semanage user -l

Listet die Zuordnungen zwischen den SELinux-Benutzeridentitäten und den erlaubten Rollen auf

  • Um eine neue Identität hinzuzufügen, ist es erforderlich, sowohl die entsprechenden Rollen als auch ein kennzeichnendes Präfix festzulegen, das dazu benutzt wird, einem Typ persönliche Dateien (/home/benutzer/*) zuzuordnen
  • Als Präfix muss user, staff oder sysadm gewählt werden
  • Das Präfix „staff“ ergibt Dateien des Typs „staff_home_dir_t“


  • Das Erstellen einer neuen SELinux-Benutzeridentität geschieht mit dem Befehl semanage user -a -R rollen -P präfix identität

Schließlich kann eine SELinux-Benutzeridentität mit dem Befehl semanage user -d identität entfernt werden

sudo semanage user -a -R 'staff_r user_r' -P staff test_u
sudo semanage user -l

Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles

root sysadm s0 s0-s0:c0.c1023 staff_r sysadm_r system_r
staff_u staff s0 s0-s0:c0.c1023 staff_r sysadm_r
sysadm_u sysadm s0 s0-s0:c0.c1023 sysadm_r
system_u user s0 s0-s0:c0.c1023 system_r
test_u staff s0 s0 staff_r user_r
unconfined_u unconfined s0 s0-s0:c0.c1023 system_r unconfined_r
user_u user s0 s0 user_r
sudo semanage user -d test_u

Dateikontexte, Ports und Boolesche Optionen verwalten

Jedes SELinux-Modul stellt einen Satz von Dateibezeichnungsregeln zur Verfügung, aber es ist auch möglich, eigene Bezeichnungsregeln hinzuzufügen, um einen speziellen Fall abzudecken

Wenn Sie zum Beispiel möchten, dass der Webserver in der Lage ist, Dateien innerhalb der /srv/www/-Dateihierarchie zu lesen, könnten Sie

semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?" 
restorecon -R /srv/www/ ausführen

Der erste Befehl registriert die neue Bezeichnungsregel und der zweite gleicht die Dateitypen gemäß den derzeitigen Bezeichnungsregeln an

Ebenso sind die TCP/UDP-Ports in einer Weise gekennzeichnet, die sicherstellt, dass nur die entsprechenden Daemons an ihnen Verbindungen annehmen können

  • Wenn Sie zum Beispiel möchten, dass der Web-Server am Port 8080 Verbindungen annehmen kann, sollten Sie den Befehl
semanage port -m -t http_port_t -p tcp 8080 ausführen

Einige SELinux-Module exportieren boolesche Optionen, die Sie anpassen können, um das Verhalten der Standardregeln zu ändern

  • Mit dem Dienstprogramm getsebool können Sie diese Optionen einsehen (getsebool „boolean“ zeigt eine Option an, getsebool -a alle)
  • Der Befehl setsebool „boolean“ „value“ ändert den aktuellen Wert einer booleschen Option
  • Die Option -P macht die Änderung dauerhaft, d. h., der neue Wert wird zum Standardwert und bleibt auch nach einem Neustart erhalten

Das folgende Beispiel gewährt Webservern Zugriff auf Home-Verzeichnisse (dies ist nützlich, wenn Benutzer persönliche Websites in ~/public_html/ haben)

sudo getsebool httpd_enable_homedirs
 httpd_enable_homedirs --> off
sudo setsebool -P httpd_enable_homedirs on
sudo getsebool httpd_enable_homedirs
 httpd_enable_homedirs --> on

Regeln anpassen

Linux/SELinux/Regeln anpassen


Anhang

Siehe auch



Dokumentation

Projekt