SELinux Anfängerleitfaden


Eine Übersetzung des Artikels wurde für Studenten des Linux-Sicherheitskurses vorbereitet




SELinux oder Security Enhanced Linux ist ein fortschrittlicher Zugriffskontrollmechanismus, der von der National Security Agency (NSA) der Vereinigten Staaten entwickelt wurde, um böswillige Eingriffe zu verhindern. Es implementiert ein erzwungenes (oder obligatorisches) Zugriffssteuerungsmodell (Eng. Mandatory Access Control, MAC) zusätzlich zu dem vorhandenen diskretionären (oder selektiven) Modell (Eng. Discretionary Access Control, DAC), dh Berechtigungen zum Lesen, Schreiben und Ausführen.


SELinux hat drei Modi:


  1. Durchsetzung - Verweigerung des Zugriffs basierend auf Richtlinienregeln.
  2. Zulässig - Protokollierungsaktionen, die gegen Richtlinien verstoßen, die im Durchsetzungsmodus verboten wären.
  3. Deaktiviert - Deaktivieren Sie SELinux vollständig.

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


Ändern der SELinux-Modi


Führen Sie den aktuellen Modus aus, um ihn herauszufinden


 $ getenforce 

Führen Sie den folgenden Befehl aus, um den Modus auf "Zulässig" zu ändern


 $ setenforce 0 

oder, um den Modus von " zulässig" auf " erzwingen" zu ändern, tun Sie dies


 $ setenforce 1 

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


 $ vi /etc/selinux/config 

Ändern Sie zum Deaktivieren den Parameter SELINUX wie folgt:


 SELINUX=disabled 

SELinux-Setup


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 zuerst den Kontext und die Beschriftungen konfigurieren. Der Prozess der Kennzeichnung und des Kontexts wird als Kennzeichnung bezeichnet. Um mit dem Markieren zu beginnen, ändern Sie in der Konfigurationsdatei den Modus in " Zulässig" .


 $ vi /etc/selinux/config SELINUX=permissive 

Erstellen Sie nach dem Festlegen des zulässigen Modus eine leere versteckte Datei mit dem Namen autorelabel im Stammverzeichnis


 $ touch /.autorelabel 

und starten Sie den Computer neu


 $ init 6 

Hinweis: Wir verwenden den zulässigen Modus zum Markieren, da die Verwendung des erzwungenen Modus beim Neustart zu einem Systemabsturz führen kann.


Machen Sie sich keine Sorgen, wenn der Download in einer Datei hängen bleibt. Das Markieren dauert einige Zeit. Nachdem Sie Ihr System markiert und geladen haben, können Sie zur Konfigurationsdatei gehen und den Durchsetzungsmodus festlegen sowie Folgendes ausführen:


 $ setenforce 1 

Sie haben SELinux jetzt erfolgreich auf Ihrem Computer aktiviert.


Protokolle überwachen


Möglicherweise liegt beim Markieren oder während der Ausführung des Systems ein Fehler vor. Um zu überprüfen, ob Ihr SELinux ordnungsgemäß funktioniert und den Zugriff auf einen Port, eine Anwendung usw. nicht blockiert, müssen Sie die Protokolle überprüfen. Das SELinux-Protokoll befindet sich in /var/log/audit/audit.log , Sie müssen es jedoch nicht vollständig lesen, um Fehler zu finden. Sie können audit2why verwenden, um Fehler zu finden. Führen Sie den folgenden Befehl aus:


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

Als Ergebnis erhalten Sie eine Liste von Fehlern. Wenn das Protokoll keine Fehler enthält, werden keine Meldungen angezeigt.


Konfigurieren der SELinux-Richtlinie


Eine SELinux-Richtlinie besteht aus einer Reihe von Regeln, die die SELinux-Sicherheit bestimmen. Eine Richtlinie definiert eine Reihe von Regeln für eine bestimmte Umgebung. Wir werden nun lernen, wie Richtlinien konfiguriert werden, um den Zugriff auf eingeschränkte Dienste zu ermöglichen.


1. Logische Werte (Schalter)


Mit Switches (Booleschen Werten) können Sie Teile einer Richtlinie während der Arbeit ändern, ohne neue Richtlinien erstellen zu müssen. Mit ihnen können Sie Änderungen vornehmen, ohne SELinux-Richtlinien neu zu starten oder neu zu kompilieren.


Beispiel
Angenommen, wir möchten das Home-Verzeichnis des Benutzers zum Lesen und Schreiben über FTP freigeben und haben es bereits freigegeben. Wenn wir jedoch versuchen, darauf zuzugreifen, wird nichts angezeigt. Dies liegt daran, dass die SELinux-Richtlinie dem FTP-Server das Lesen und Schreiben in das Home-Verzeichnis des Benutzers untersagt. Wir müssen die Richtlinie ändern, damit der FTP-Server auf die Home-Verzeichnisse zugreifen kann. Mal sehen, ob es dafür Schalter gibt


 $ semanage boolean -l 

Dieser Befehl zeigt eine Liste der verfügbaren Schalter mit ihrem aktuellen Status (Ein / Ein oder Aus / Aus) und einer Beschreibung an. Sie können Ihre Suche verfeinern, indem Sie grep hinzufügen, um nur FTP-bezogene Ergebnisse zu finden:


 $ semanage boolean -l | grep ftp 

und finde folgendes


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

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


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


2. Labels und Kontext


Dies ist die häufigste Methode zum Implementieren von SELinux-Richtlinien. Jede Datei, jeder Ordner, jeder Prozess und jeder Port ist mit einem SELinux-Kontext gekennzeichnet:


  • Bei Dateien und Ordnern werden Tags als erweiterte Attribute im Dateisystem gespeichert und können mit dem folgenden Befehl angezeigt werden:
     $ ls -Z /etc/httpd 
  • Bei Prozessen und Ports steuert der Kern die Markierung, und Sie können diese Beschriftungen wie folgt sehen:

der Prozess


 $ ps –auxZ | grep httpd 

Hafen


 $ netstat -anpZ | grep httpd 

Beispiel
Schauen wir uns nun ein Beispiel an, um Beschriftungen und Kontext besser zu verstehen. Angenommen, wir haben einen Webserver, /var/www/html/ /home/dan/html/ anstelle des Verzeichnisses /var/www/html/ /home/dan/html/ . SELinux betrachtet dies als Richtlinienverstoß und Sie können Ihre Webseiten möglicherweise nicht durchsuchen. Dies liegt daran, dass wir den mit den HTML-Dateien verknüpften Sicherheitskontext nicht eingerichtet haben. Verwenden Sie den folgenden Befehl, um den Standardsicherheitskontext anzuzeigen:


 $ 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 die HTML-Dateien. Wir müssen diesen Sicherheitskontext für unser aktuelles Verzeichnis festlegen, das jetzt den folgenden Kontext hat:


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

Alternativer Befehl zum Überprüfen 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. Führen Sie die folgenden Befehle aus, um den Kontext von / home / dan / html zu ändern:


 $ 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 jetzt Dateien aus dem Ordner /home/dan/html lesen, da der Sicherheitskontext für diesen Ordner in httpd_sys_content_t geändert wurde.


3. Lokale Richtlinien erstellen


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


Um Fehler zu beheben, können Sie eine lokale Richtlinie erstellen. Zum Beispiel erhalten wir einen Fehler in Bezug auf httpd (Apache) oder smbd (Samba), wir greifen nach Fehlern 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 sind http_policy und smb_policy 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 mehr in audit.log erhalten.




Es 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: https://habr.com/ru/post/de460387/


All Articles