GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Konfigurieren Sie SELinux so, dass Daemons Dateien an nicht standardmäßigen Speicherorten verwenden können

Hintergrund

SELinux fügt eine weitere Ebene von Berechtigungsprüfungen auf Linux-Systemen hinzu. Auf SELinux-fähigen Systemen werden zuerst die regulären DAC-Berechtigungen überprüft, und wenn sie den Zugriff zulassen, die SELinux-Richtlinie konsultiert wird. Wenn die SELinux-Richtlinie den Zugriff verweigert, wird ein Protokolleintrag im Überwachungsprotokoll in /var/log/audit/audit.log generiert oder in dmesg wenn auditd läuft nicht auf dem System.

SELinux weist ein Label namens Sicherheitskontext zu , zu jedem Objekt (Datei, Prozess usw.) im System:

  • Dateien Sicherheitskontext in erweiterten Attributen gespeichert haben. Diese können mit ls -Z eingesehen werden .

    SELinux verwaltet eine Datenbank, die Pfadmuster auf Standarddateikontexte abbildet. Diese Datenbank wird verwendet, wenn Sie Standarddateikontexte manuell wiederherstellen müssen oder wenn das System umbenannt wird. Diese Datenbank kann mit semanage abgefragt werden Werkzeug.

  • Prozesse werden beim Ausführen einer ausführbaren Datei ein Sicherheitskontext zugewiesen (execve Systemaufruf). Prozesssicherheitskontexte können mit den meisten Systemüberwachungstools angezeigt werden, beispielsweise mit ps Z $PID .

  • Andere beschriftete Objekte sind ebenfalls vorhanden, aber für diese Antwort nicht relevant.

SELinux Richtlinie enthält die Regeln die angeben, welche Operationen zwischen Kontexten erlaubt sind. SELinux arbeitet auf einer Whitelist Regeln wird alles, was nicht ausdrücklich durch die Richtlinie erlaubt ist, verweigert. Die Referenzrichtlinie enthält Richtlinienmodule für viele Anwendungen und ist normalerweise die Richtlinie, die von SELinux-fähigen Distributionen verwendet wird. Diese Antwort beschreibt hauptsächlich, wie Sie mit einer Richtlinie arbeiten, die auf der Referenzrichtlinie basiert, die Sie höchstwahrscheinlich verwenden, wenn Sie die von der Distribution bereitgestellte Richtlinie verwenden.

Wenn Sie Ihre Anwendung als Ihr normaler Benutzer ausführen, bemerken Sie SELinux wahrscheinlich nicht, da die Standardkonfiguration die Benutzer in unbeschränkt versetzt Kontext. Prozesse, die uneingeschränkt ausgeführt werden Kontext haben nur sehr wenige Einschränkungen. Möglicherweise können Sie Ihr Programm ohne Probleme in der Benutzer-Shell im uneingeschränkten Kontext ausführen, aber wenn es mit dem Init-System gestartet wird, funktioniert es möglicherweise nicht mehr in einem eingeschränkten Kontext.

Typische Probleme

Wenn sich Dateien an einem nicht standardmäßigen Speicherort befinden (nicht in der Standardrichtlinie beschrieben), haben die Probleme häufig folgende Gründe:

  • Dateien haben einen falschen/inkompatiblen Dateikontext :Dateien verschoben mit mv ihre Metadaten, einschließlich Dateisicherheitskontexte, vom alten Speicherort behalten. An einem neuen Ort erstellte Dateien haben den Kontext vom übergeordneten Verzeichnis oder Erstellungsprozess geerbt.

  • Mehrere Daemons, die dieselben Dateien verwenden :Die Standardrichtlinie enthält keine Regeln, um die Interaktion zwischen den betreffenden Sicherheitskontexten zuzulassen.

Dateien mit falschem Sicherheitskontext

Wenn die Dateien nicht von einem anderen Daemon (oder einem anderen eingeschränkten Prozess) verwendet werden und die einzige Änderung der Speicherort der Dateien ist, sind die erforderlichen Änderungen an der SELinux-Konfiguration:

  • Neue Regel zur Dateikontextdatenbank hinzufügen
  • Korrekten Dateikontext auf vorhandene Dateien anwenden

Der Dateikontext am Standardspeicherort kann als Vorlage für den neuen Speicherort verwendet werden. Die meisten Richtlinienmodule enthalten Manpage-Dokumentation (generiert mit sepolicy manpages ) erklären mögliche alternative Dateikontexte mit ihrer Zugriffssemantik.

Die Dateikontextdatenbank verwendet eine reguläre Ausdruckssyntax, die das Schreiben überlappender Spezifikationen ermöglicht. Beachten Sie, dass der angewandte Kontext die letzte gefundene Spezifikation ist.

So fügen Sie der Dateikontextdatenbank einen neuen Eintrag hinzu:

semanage fcontext -a -t <type> "/path/here/(/.*)?"

Nachdem der Datenbank ein neuer Kontexteintrag hinzugefügt wurde, kann der Kontext aus der Datenbank mit restorecon <files> auf Ihre Dateien angewendet werden . Ausführen von restorecon mit -vn Flags zeigen an, welche Dateikontexte geändert würden, ohne Änderungen anzuwenden.

Testen eines neuen Dateikontexts ohne Hinzufügen eines neuen Eintrags in der Datenbank

Kontext kann manuell mit chcon geändert werden Werkzeug. Dies ist nützlich, wenn Sie den neuen Dateikontext testen möchten, ohne der Dateikontextdatenbank einen Eintrag hinzuzufügen.

Der neue Dateikontext wird in den Argumenten zu chcon angegeben . Bei Verwendung mit --reference= Option wird der Sicherheitskontext aus einer Referenzdatei in die Zieldateien kopiert.

mit einem bestimmten Kontext (default_t ):

chcon -t default_t <target files>

oder mit einer Referenz:

chcon --reference=<path to default location> <target files>

Hinweis zu unterschiedlichen Dateisystemen und Einhängepunkten

Wenn der neue Speicherort ein eigener Einhängepunkt ist, kann der Kontext mit einer Einhängeoption festgelegt werden. Der mit der Einhängeoption gesetzte Kontext wird nicht auf der Festplatte gespeichert, daher kann er auch mit Dateisystemen verwendet werden, die keine erweiterten Attribute unterstützen.

mount <device> <mount point> -o context="<context>"

Prozessen, die in unterschiedlichen Sicherheitskontexten ausgeführt werden, erlauben, dieselben Dateien zu verwenden

Option 1:Boolesche Werte

Die Referenzrichtlinie enthält einstellbare Optionen, die als boolesche Werte bezeichnet werden , die bestimmte zusätzliche Regeln aktivieren/deaktivieren. Viele von ihnen ermöglichen die Zusammenarbeit verschiedener System-Daemons, die normalerweise nicht dieselben Dateien verwenden.

Eine Liste aller möglichen einstellbaren Optionen und ihrer Beschreibungen kann mit semanage boolean -l aufgelistet werden . audit2allow kann auch direkt erkennen, welcher boolesche Wert aktiviert werden muss.

So aktivieren/deaktivieren Sie einen booleschen Wert mit semanage :

semanage boolean --on <boolean name>
semanage boolean --off <boolean name>

Boolesche Werte sind die einfachste Möglichkeit, die Richtlinie zu ändern. Jedoch können nicht alle möglichen Situationen durch Umschalten eines booleschen Werts adressiert werden. Einige boolesche Werte erlauben auch einen sehr breiten Zugriff, da sie übermäßig freizügig sind.

Option 2:Richtlinie mit einem neuen Modul erweitern

Wenn kein boolescher Wert vorhanden ist, um den Zugriff zuzulassen, muss die Richtlinie geändert werden, indem ein benutzerdefiniertes Modul hinzugefügt wird.

Ein einfaches Modul, das die erforderlichen Regeln zum Zulassen des Zugriffs hinzufügt, kann mithilfe von audit2allow aus Protokolldateien generiert werden mit folgenden Schritten:

  1. Legen Sie die Domäne des Daemons fest (Sicherheitskontext) in den permissiven Modus . Im zulassenden Modus wird die Richtlinie nicht erzwungen , aber es werden Protokolle für den Zugriff generiert, den die Richtlinie normalerweise verweigern würde.

    semanage permissive -a <domain>
    
  2. Testen Sie Ihren Daemon im Normalbetrieb, um Protokolleinträge zu generieren.

  3. Erstellen Sie ein neues Richtlinienmodul und fügen Sie es ein.

    audit2allow -a -M <name>
    semodule -i <name>.pp'
    
  4. Erzwingungsmodus erneut aktivieren

    semanage permissive -d <domain>
    

Diese Methode funktioniert am besten, wenn nur wenige Sicherheitskontexte beteiligt sind. In einer komplexen Konfiguration müssen Sie höchstwahrscheinlich Ihr eigenes Richtlinienmodul schreiben. Einige Ressourcen für den Einstieg sind das Gentoo-Wiki und die Referenzrichtlinien-API-Dokumentation.


Mit diesem Befehl:

# semanage fcontext -l /oldpath/

Sie können die standardmäßigen SElinux-Kontexte in den Ordnern in Ihrem System überprüfen, sodass Sie mit diesem Befehl den Standardkontext dieses Daemon-Ordners sehen können.

Dann können Sie überprüfen, welche SELinux-Kontexte Sie in dem Verzeichnis konfigurieren sollten, in das Sie Ihre Inhalte verschieben möchten.

Nehmen wir an, Sie sehen, dass Ihr Daemon-Ordner diesen Kontext hat (es ist der Apache-Kontext):

# semanage fcontext -l
...
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

Dann wenden Sie diese Kontexte wie folgt auf den neuen Pfad an (Beispiel mit dem Standardsicherheitskontext des Apache-Daemons)

# semanage fcontext -a -t httpd_sys_content_t '/newpath(/.*)?'

Nachdem Sie dies getan haben, sollten Sie in Anbetracht der Tatsache, dass sich Ihr Inhalt bereits im neuen Pfad befindet, alles unter diesem Pfad erzwingen, um diesen Kontext zu erhalten:

# restorecon -RFvv /newpath

Sie können mit diesem Befehl überprüfen, ob es funktioniert hat:

# ls -Zd /newpath/

Denken Sie daran, dass beim Verschieben eines Verzeichnisses oder von Dateien der Sicherheitskontext beibehalten wird. Wenn Sie einen Ordner oder ein Verzeichnis kopieren, wird der Kontext auf den des übergeordneten Ordners gesetzt.

Wenn Sie die Handbuchseiten nach bestimmter Software durchsuchen müssen, können Sie die Handbuchseiten installieren mit:

# yum install -y selinux-policy-devel

Vergessen Sie nicht, diesen Befehl auszuführen, um die man db neu zu indizieren:

# mandb

Dann können Sie diese ausführen und alle Selinux-Manpages überprüfen.

# man -k selinux

Vorschlag, führen Sie diesen Befehl vor und nach der Installation dieses Pakets aus, um den Unterschied zu sehen:

# man -k selinux | wc -l

Linux
  1. So konfigurieren Sie den SAMBA-Server und übertragen Dateien zwischen Linux und Windows

  2. Wie verwendet man Inotifywait, um ein Verzeichnis für die Erstellung von Dateien einer bestimmten Erweiterung zu überwachen?

  3. Wie benenne ich Dateien speziell in einer Liste um, die Wget verwendet?

  4. Verwenden Sie den cPanel-Dateimanager, um Dateien zu komprimieren/dekomprimieren

  5. Ist es eine gute Idee, Git für die Versionskontrolle der Konfigurationsdatei zu verwenden?

So verwenden Sie den SCP-Befehl zum sicheren Übertragen von Dateien

Verwenden Sie den CAT-Befehl, um Textdateien in Ubuntu 20.04 zu kombinieren

Wie verwende ich den Dateimanager von cPanel?

So konfigurieren Sie vsftpd für die Verwendung von SSL/TLS auf einem Ubuntu 20.04

So konfigurieren Sie VSFTPD für die Verwendung von SSL/TLS auf einem CentOS-VPS

So verwenden Sie Linux zum Wiederherstellen gelöschter Dateien