Einsteigerleitfaden zu SELinux

Einsteigerleitfaden zu SELinux

Übersetzung des Artikels für Studierende des Kurses „Linux-Sicherheit“

SELinux oder Security Enhanced Linux ist ein erweiterter Zugriffskontrollmechanismus, der von der National Security Agency (NSA) der USA entwickelt wurde, um böswillige Eindringlinge zu verhindern. Es implementiert ein verbindliches (oder mandatorisches) Zugriffssteuerungsmodell (Mandatory Access Control, MAC) über das bestehende diskretionäre (oder wahlweise) Modell (Discretionary Access Control, DAC), das die Berechtigungen für Lesen, Schreiben und Ausführen umfasst.

SELinux bietet drei Modi:

  1. Enforcing — verweigert den Zugriff basierend auf den Richtlinienregeln.
  2. Permissive — protokolliert Aktivitäten, die gegen die Richtlinie verstoßen und im Enforcing-Modus verboten wären.
  3. Disabled — vollständige Deaktivierung von SELinux.

Standardmäßig befinden sich die Einstellungen in /etc/selinux/config

Ändern der SELinux-Modi

Um den aktuellen Modus zu erfahren, führen Sie aus

$ getenforce

Um den Modus auf permissive zu ändern, führen Sie den folgenden Befehl aus

$ setenforce 0

oder, um den Modus von permissive findet man aufenforcing

, führen Sie aus

$ setenforce 1

Wenn Sie SELinux vollständig deaktivieren müssen, können Sie dies nur über die Konfigurationsdatei tun

$ vi /etc/selinux/config

SELINUX=disabled

Konfiguration von SELinux

Jede Datei und jeder Prozess wird mit einem SELinux-Kontext versehen, der zusätzliche Informationen wie Benutzer, Rolle, Typ usw. enthält. Wenn Sie SELinux zum ersten Mal aktivieren, müssen Sie zunächst den Kontext und die Labels konfigurieren. Der Prozess der Zuweisung von Labels und Kontexten wird als Labeling bezeichnet. Um mit dem Labeling zu beginnen, ändern wir den Modus in der Konfigurationsdatei auf permissive.

$ vi /etc/selinux/config
SELINUX=permissive

Nach der Festlegung des Modus permissive, erstellen wir im Stammverzeichnis eine leere versteckte Datei mit dem Namen .autorelabel

$ touch /.autorelabel

und starten den Computer neu

$ init 6

Hinweis: Wir verwenden den Modus permissive zum Labeling, da die Verwendung des Modus auf zu einem Systemabbruch während des Neustarts führen kann.

Keine Sorge, wenn das Booten bei einer bestimmten Datei hängen bleibt, das Labeling benötigt etwas Zeit. Nach Abschluss des Labelings und dem Hochfahren Ihres Systems können Sie zur Konfigurationsdatei zurückkehren und den Modus festlegen auf, sowie ausführen:

, führen Sie aus

Jetzt haben Sie SELinux erfolgreich auf Ihrem Computer aktiviert.

Wir überwachen die Protokolle

Möglicherweise gab es beim Labeling oder während des Betriebs des Systems einige Fehler. Um zu überprüfen, ob Ihr SELinux korrekt funktioniert und ob es den Zugriff auf einen Port, eine Anwendung usw. blockiert, sollten Sie die Protokolle prüfen. Die SELinux-Protokolldatei befindet sich in /var/log/audit/audit.log, aber Sie müssen es nicht vollständig lesen, um Fehler zu finden. Sie können das Tool audit2why verwenden, um nach Fehlern zu suchen. Führen Sie den folgenden Befehl aus:

$ audit2why < /var/log/audit/audit.log

Infolgedessen erhalten Sie eine Liste von Fehlern. Wenn es keine Fehler im Protokoll gab, werden keine Nachrichten angezeigt.

Konfiguration der SELinux-Richtlinie

Die SELinux-Richtlinie ist eine Sammlung von Regeln, die vom Sicherheitsmechanismus SELinux befolgt wird. Die Richtlinie definiert eine Reihe von Regeln für eine bestimmte Umgebung. Jetzt werden wir lernen, wie man Richtlinien konfiguriert, um den Zugriff auf gesperrte Dienste zu ermöglichen.

1. Logische Werte (Schalter)

Schalter (Booleans) ermöglichen es, Teile der Richtlinie während der Laufzeit zu ändern, ohne neue Richtlinien erstellen zu müssen. Sie ermöglichen es, Änderungen ohne Neustart oder Neukompilierung der SELinux-Richtlinien vorzunehmen.

Beispiel
Angenommen, wir möchten den Zugriff auf das Home-Verzeichnis eines Benutzers über FTP zum Lesen und Schreiben bereitstellen, und wir haben es bereits freigegeben, aber beim Zugriff sehen wir nichts. Das liegt daran, dass die SELinux-Richtlinie dem FTP-Server verbietet, im Home-Verzeichnis des Benutzers zu lesen und zu schreiben. Wir müssen die Richtlinie ändern, damit der FTP-Server auf die Home-Verzeichnisse zugreifen kann. Schauen wir, ob es dafür irgendwelche Schalter gibt, indem wir ausführen

$ semanage boolean -l

Dieser Befehl gibt eine Liste der verfügbaren Schalter mit ihrem aktuellen Status (eingeschaltet/on oder ausgeschaltet/off) und einer Beschreibung aus. Sie können die Suche verfeinern, indem Sie grep hinzufügen, um nur die Ergebnisse zu finden, die sich auf ftp beziehen:

$ semanage boolean -l | grep ftp

und finden Sie Folgendes

ftp_home_dir        -> off       Ermöglichen Sie ftp, Dateien im Benutzer-Home-Verzeichnis zu lesen und zu schreiben

Dieser Schalter ist ausgeschaltet, daher werden wir ihn mit setsebool ftp_home_dir on

Jetzt kann unser FTP-Dämon auf das Home-Verzeichnis des Benutzers zugreifen.
Hinweis: Sie können auch eine Liste der verfügbaren Schalter ohne Beschreibung erhalten, indem Sie getsebool -a

2. Labels und Kontext

Dies ist die gängigste Methode zur Implementierung der SELinux-Politik. Jede Datei, jeder Ordner, jeder Prozess und jeder Port wird mit einem SELinux-Kontext gekennzeichnet:

  • Bei Dateien und Ordnern werden die Labels als erweiterte Attribute im Dateisystem gespeichert und können mit dem folgenden Befehl angezeigt werden:
    $ ls -Z /etc/httpd
  • Für Prozesse und Ports wird die Kennzeichnung vom Kernel verwaltet, und diese Labels können wie folgt angesehen werden:

ein Prozess.

$ ps -auxZ | grep httpd

Port

$ netstat -anpZ | grep httpd

Beispiel
Lassen Sie uns nun ein Beispiel betrachten, um die Labels und den Kontext besser zu verstehen. Angenommen, wir haben Webserver, das anstelle des Verzeichnisses /var/www/html/ использует /home/dan/html/. SELinux wird dies als Verstoß gegen die Politik betrachten, und Sie werden Ihre Webseiten nicht anzeigen können. Dies liegt daran, dass wir den Sicherheitskontext, der mit HTML-Dateien verbunden ist, nicht festgelegt haben. Um den Standard-Sicherheitskontext anzuzeigen, verwenden Sie den folgenden Befehl:

$ ls -lz /var/www/html
 -rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Hier haben wir httpd_sys_content_t als Kontext für HTML-Dateien erhalten. Wir müssen diesen Sicherheitskontext für unser aktuelles Verzeichnis festlegen, das derzeit den folgenden Kontext hat:

-rw-r--r--. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Alternativer Befehl zur Überprüfung des Sicherheitskontexts einer Datei oder eines Verzeichnisses:

$ semanage fcontext -l | grep '/var/www'

Wir werden auch semanage verwenden, um den Kontext zu ändern, nachdem wir den richtigen Sicherheitskontext gefunden haben. Um den Kontext für /home/dan/html zu ändern, führen Sie die folgenden Befehle aus:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? alle Dateien system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Nachdem der Kontext mit semanage geändert wurde, lädt der Befehl restorecon den Standardkontext für Dateien und Verzeichnisse. Unser Webserver kann jetzt Dateien aus dem Ordner lesen, /home/dan/html, da der Sicherheitskontext für diesen Ordner auf httpd_sys_content_t.

3. Erstellung lokaler Richtlinien

Es kann Situationen geben, in denen die oben genannten Methoden für Sie nutzlos sind, und Sie erhalten Fehler (avc/denial) im audit.log. Wenn dies geschieht, muss eine lokale Richtlinie (Local policy) erstellt werden. Alle Fehler können mit audit2why gefunden werden, wie oben beschrieben.

Um Fehler zu beheben, kann eine lokale Richtlinie erstellt werden. Zum Beispiel, wenn wir einen Fehler im Zusammenhang mit httpd (apache) oder smbd (samba) erhalten, filtern wir die Fehler und erstellen eine Richtlinie dafür:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Hier http_policy und smb_policy — das sind die Namen der lokal erstellten Richtlinien. Nun müssen wir diese erstellten lokalen Richtlinien in die aktuelle SELinux-Richtlinie laden. Dies kann folgendermaßen erfolgen:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

Unsere lokalen Richtlinien wurden geladen, und wir sollten keine weiteren avc oder denials im audit.log erhalten.

Das war mein Versuch, Ihnen zu helfen, SELinux zu verstehen. Ich hoffe, dass Sie sich nach dem Lesen dieses Artikels mit SELinux wohler fühlen.

Quelle: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster