Ein Leitfaden für Anfänger zu SELinux

Ein Leitfaden für Anfänger zu SELinux

Die Übersetzung des Artikels wurde für die Studierenden des Kurses vorbereitet „Sicherheit von Linux“

SELinux oder Security Enhanced Linux ist ein verbesserter Zugriffskontrollmechanismus, der von der National Security Agency der USA (NSA) entwickelt wurde, um bösartige Angriffe zu verhindern. Es implementiert ein zwingendes (oder mandatorisches) Zugriffssteuerungsmodell (engl. Mandatory Access Control, MAC) über das bestehende diskretionäre (oder wahlweise) Modell (engl. Discretionary Access Control, DAC), das heißt, die Berechtigungen zum Lesen, Schreiben und Ausführen.

SELinux hat drei Modi:

  1. Enforcing – Verweigerung des Zugriffs auf der Grundlage der Richtlinienregeln.
  2. Permissive – Protokollierung von Aktionen, die gegen die Richtlinien verstoßen, die 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 auf aufenforcing

, führen Sie aus

$ setenforce 1

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

$ vi /etc/selinux/config

Um es zu deaktivieren, ändern Sie den SELINUX-Wert wie folgt:

SELINUX=disabled

Konfiguration von SELinux permissive.

Jede Datei und jeder Prozess wird mit einem SELinux-Kontext gekennzeichnet, der zusätzliche Informationen enthält, wie Benutzer, Rolle, Typ usw. 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 in der Konfigurationsdatei den Modus auf

$ vi /etc/selinux/config SELINUX=permissive permissiveNach der Festlegung des Modus , erstellen wir eine leere versteckte Datei mit dem Namen

$ touch /.autorelabel

und starten den Computer neu

$ init 6

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

Keine Sorge, wenn der Bootvorgang an einer Datei hängenbleibt, dauert das Labeling eine gewisse Zeit. Nach Abschluss des Labelings und dem Start Ihres Systems können Sie zur Konfigurationsdatei gehen und den Modus einstellen auf, sowie ausführen:

, führen Sie aus

Jetzt haben Sie SELinux erfolgreich auf Ihrem Computer aktiviert.

Überwachung der Protokolle

Möglicherweise haben Sie Fehler beim Markieren oder während des Betriebs des Systems gemacht. Um zu überprüfen, ob Ihr SELinux ordnungsgemäß funktioniert und ob es den Zugriff auf einen bestimmten Port, eine Anwendung usw. blockiert, müssen Sie die Protokolle überprüfen. Das SELinux-Protokoll 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

In der Folge erhalten Sie eine Liste von Fehlern. Wenn im Protokoll keine Fehler vorhanden sind, werden keine Meldungen angezeigt.

Konfiguration der SELinux-Policy

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

1. Logische Werte (Schalter)

Schalter (Booleans) ermöglichen es, Teile der Policy zur Laufzeit zu ändern, ohne neue Policies erstellen zu müssen. Sie ermöglichen Änderungen ohne Neustart oder Neukompilierung der SELinux-Policies.

Beispiel
Angenommen, wir möchten den Zugriff auf das Benutzer-Heimverzeichnis per FTP zum Lesen und Schreiben gewähren, und wir haben es bereits freigegeben, aber beim Zugriff sehen wir nichts. Dies liegt daran, dass die SELinux-Policy dem FTP-Server das Lesen und Schreiben im Benutzer-Heimverzeichnis verbietet. Wir müssen die Policy ändern, damit der FTP-Server auf die Heimverzeichnisse zugreifen kann. Lassen Sie uns überprüfen, ob es dafür Schalter gibt, indem wir ausführen

$ semanage boolean -l

Dieser Befehl gibt eine Liste der verfügbaren Schalter mit ihrem aktuellen Status (aktiv/on oder inaktiv/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 Sie finden Folgendes

ftp_home_dir        -> off       Erlaube ftp, Dateien im Benutzer-Heimverzeichnis zu lesen und zu schreiben

Dieser Schalter ist deaktiviert, also aktivieren wir ihn mit setsebool ftp_home_dir on

Jetzt kann unser FTP-Daemon auf das Benutzer-Heimverzeichnis zugreifen.
Hinweis: Sie können auch eine Liste der verfügbaren Schalter ohne Beschreibung erhalten, indem Sie ausführen getsebool -a

2. Labels und Kontexte

Dies ist der gebräuchlichste Weg, SELinux-Policies umzusetzen. Jede Datei, jeder Ordner, jeder Prozess und jeder Port wird mit einem SELinux-Kontext gekennzeichnet:

  • Für Dateien und Ordner 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 verwaltet der Kernel die Markierung, und man kann diese Labels folgendermaßen einsehen:

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 einen Webserver, der anstelle eines Verzeichnisses /var/www/html/ использует /home/dan/html/. SELinux wird dies als Verstoß gegen die Richtlinie betrachten, und Sie können Ihre Webseiten nicht anzeigen. Das liegt daran, dass wir den Sicherheitskontext, der mit den HTML-Dateien verbunden ist, nicht gesetzt 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 setzen, 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 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(\/.*)? all files 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 nun Dateien aus dem Ordner /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 Fehler (avc/denial) im audit.log erhalten. Wenn dies passiert, müssen Sie eine lokale Richtlinie (Local policy) erstellen. Alle Fehler können Sie mit audit2why finden, wie oben beschrieben.

Um die Fehler zu beheben, kann eine lokale Richtlinie erstellt werden. Zum Beispiel, wenn wir einen Fehler im Zusammenhang mit httpd (apache) oder smbd (samba) erhalten, verwenden wir grep, um die Fehler zu erfassen 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 — dies 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 geladen, und wir sollten keine avc- oder denail-Meldungen mehr 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 werden.

Quelle: habr.com

60GB SSD 8Gb DDR4