Ein Leitfaden für Anfänger zu SELinux

Ein Leitfaden für Anfänger zu SELinux

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

SELinux oder Security Enhanced Linux ist ein verbesserter Zugriffskontrollmechanismus, der von der US-amerikanischen National Security Agency (NSA) entwickelt wurde, um böswillige Eindringlinge zu verhindern. Es implementiert ein erzwungenes (oder obligatorisches) Zugriffskontrollmodell (engl. Mandatory Access Control, MAC) zusätzlich zum bestehenden diskretionären (oder selektiven) Modell (engl. Discretionary Access Control, DAC), also Berechtigungen zum Lesen, Schreiben und Ausführen.

SELinux verfügt über drei Modi:

  1. Durchsetzung – Zugriffsverweigerung basierend auf Richtlinienregeln.
  2. Zulässig – Führen eines Protokolls über Aktionen, die gegen die Richtlinie verstoßen, was im Durchsetzungsmodus verboten wäre.
  3. Deaktiviert — vollständige Deaktivierung von SELinux.

Standardmäßig sind die Einstellungen in /etc/selinux/config

SELinux-Modi ändern

Um den aktuellen Modus herauszufinden, führen Sie aus

$ getenforce

Um den Modus in „permissiv“ zu ändern, führen Sie den folgenden Befehl aus

$ setenforce 0

oder, um den Modus zu ändern freizügig auf Durchsetzung, ausführen

$ setenforce 1

Wenn Sie SELinux vollständig deaktivieren müssen, kann dies nur über die Konfigurationsdatei erfolgen

$ vi /etc/selinux/config

Zum Deaktivieren ändern Sie den SELINUX-Parameter wie folgt:

SELINUX=disabled

SELinux einrichten

Jede Datei und jeder Prozess ist mit einem SELinux-Kontext gekennzeichnet, 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 Beschriftungen konfigurieren. Der Vorgang der Zuweisung von Labels und Kontext wird als Tagging bezeichnet. Um mit dem Markieren zu beginnen, ändern wir in der Konfigurationsdatei den Modus auf freizügig.

$ vi /etc/selinux/config
SELINUX=permissive

Nach dem Einstellen des Modus freizügig, erstellen Sie im Stammverzeichnis eine leere versteckte Datei mit dem Namen autorelabel

$ touch /.autorelabel

und starten Sie den Computer neu

$ init 6

Hinweis: Wir verwenden den Modus freizügig zum Markieren, seit der Verwendung des Modus Durchsetzung kann dazu führen, dass das System beim Neustart abstürzt.

Machen Sie sich keine Sorgen, wenn der Download bei einer Datei hängen bleibt, das Markieren dauert eine Weile. Sobald die Markierung abgeschlossen ist und Ihr System gebootet ist, können Sie zur Konfigurationsdatei gehen und den Modus festlegen Durchsetzungund auch ausführen:

$ setenforce 1

Sie haben SELinux nun erfolgreich auf Ihrem Computer aktiviert.

Überwachung der Protokolle

Möglicherweise sind beim Markieren oder während des Systembetriebs einige Fehler aufgetreten. Um zu überprüfen, ob Ihr SELinux ordnungsgemäß funktioniert und den Zugriff auf keinen Port, keine Anwendung usw. blockiert, müssen Sie sich die Protokolle ansehen. Das SELinux-Protokoll befindet sich in /var/log/audit/audit.log, aber Sie müssen nicht alles lesen, um Fehler zu finden. Sie können das Dienstprogramm audit2why verwenden, um Fehler zu finden. Führen Sie den folgenden Befehl aus:

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

Als Ergebnis erhalten Sie eine Fehlerliste. Wenn im Protokoll keine Fehler aufgetreten sind, werden keine Meldungen angezeigt.

Konfigurieren der SELinux-Richtlinie

Eine SELinux-Richtlinie ist eine Reihe von Regeln, die den SELinux-Sicherheitsmechanismus regeln. Eine Richtlinie definiert eine Reihe von Regeln für eine bestimmte Umgebung. Jetzt erfahren Sie, wie Sie Richtlinien konfigurieren, um den Zugriff auf verbotene Dienste zu ermöglichen.

1. Logische Werte (Schalter)

Mit Schaltern (booleschen Werten) können Sie Teile einer Richtlinie zur Laufzeit ändern, ohne neue Richtlinien erstellen zu müssen. Sie ermöglichen es Ihnen, Änderungen vorzunehmen, ohne die SELinux-Richtlinien neu starten oder neu kompilieren zu müssen.

Beispiel
Nehmen wir an, wir möchten das Home-Verzeichnis eines Benutzers per FTP-Lese-/Schreibzugriff freigeben und haben es bereits freigegeben, aber wenn wir versuchen, darauf zuzugreifen, sehen wir nichts. Dies liegt daran, dass die SELinux-Richtlinie verhindert, dass der FTP-Server im Home-Verzeichnis des Benutzers liest und schreibt. Wir müssen die Richtlinie ändern, damit der FTP-Server auf Home-Verzeichnisse zugreifen kann. Mal sehen, ob es dafür irgendwelche Schalter gibt

$ semanage boolean -l

Dieser Befehl listet die verfügbaren Schalter mit ihrem aktuellen Status (ein oder aus) und ihrer Beschreibung auf. Sie können Ihre Suche verfeinern, indem Sie grep hinzufügen, um nur FTP-Ergebnisse zu finden:

$ semanage boolean -l | grep ftp

und Sie werden Folgendes finden

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Dieser Schalter ist deaktiviert, daher werden wir ihn mit aktivieren setsebool $ setsebool ftp_home_dir on

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

2. Etiketten und Kontext

Dies ist die gebräuchlichste Methode zur Implementierung einer SELinux-Richtlinie. Jede Datei, jeder Ordner, jeder Prozess und jeder Port ist mit dem SELinux-Kontext gekennzeichnet:

  • Für Dateien und Ordner werden Beschriftungen 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 Beschriftung vom Kernel verwaltet und Sie können diese Beschriftungen wie folgt anzeigen:

Prozess

$ ps –auxZ | grep httpd

Port

$ netstat -anpZ | grep httpd

Beispiel
Schauen wir uns nun ein Beispiel an, um Beschriftungen und Kontext besser zu verstehen. Nehmen wir an, wir haben einen Webserver anstelle eines Verzeichnisses /var/www/html/ использует /home/dan/html/. SELinux betrachtet dies als Verstoß gegen die Richtlinien und Sie können Ihre Webseiten nicht anzeigen. Dies liegt daran, dass wir den Sicherheitskontext für die HTML-Dateien nicht festgelegt haben. Um den Standardsicherheitskontext 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/

Da sind wir angekommen httpd_sys_content_t als Kontext für HTML-Dateien. 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/

Ein alternativer Befehl zum Überprüfen des Sicherheitskontexts einer Datei oder eines Verzeichnisses:

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

Wir werden Semanage auch verwenden, um den Kontext zu ändern, sobald wir den richtigen Sicherheitskontext gefunden haben. Um den Kontext von /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(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Nachdem der Kontext mithilfe von „semanage“ geändert wurde, lädt der Befehl „restorecon“ den Standardkontext für Dateien und Verzeichnisse. Unser Webserver kann nun Dateien aus dem Ordner lesen /home/dan/htmlweil der Sicherheitskontext für diesen Ordner in geändert wurde httpd_sys_content_t.

3. Erstellen Sie lokale Richtlinien

Es kann Situationen geben, in denen die oben genannten Methoden für Sie nutzlos sind und Sie Fehlermeldungen (avc/denial) in audit.log erhalten. In diesem Fall müssen Sie eine lokale Richtlinie erstellen. Sie können alle Fehler wie oben beschrieben mit audit2why finden.

Sie können eine lokale Richtlinie erstellen, um Fehler zu beheben. Wenn wir beispielsweise einen Fehler im Zusammenhang mit httpd (Apache) oder smbd (Samba) erhalten, prüfen wir die Fehler und erstellen eine Richtlinie für sie:

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 и smb_policy sind die Namen der lokalen Richtlinien, die wir erstellt haben. Jetzt müssen wir diese erstellten lokalen Richtlinien in die aktuelle SELinux-Richtlinie laden. Dies kann wie folgt erfolgen:

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

Unsere lokalen Richtlinien wurden heruntergeladen und wir sollten in audit.log keine AVC oder Denail mehr erhalten.

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

Source: habr.com

Kommentar hinzufügen