Linux/SELinux/05 SEPolicy
Linux/SELinux/05 SEPolicy - Sepolicy-Suite
Beschreibung
sepolicy bietet eine Reihe von Funktionen zur Abfrage der installierten SELinux-Richtlinie
- Diese Funktionen sind entweder neu oder wurden zuvor von separaten Dienstprogrammen wie sepolgen oder setrans bereitgestellt
- Mit dieser Suite können Sie Übergangsberichte, Manpages oder sogar neue Richtlinienmodule erstellen, wodurch Benutzer einen einfacheren Zugang zur SELinux-Richtlinie erhalten und diese besser verstehen können
Das Paket policycoreutils-devel stellt sepolicy bereit
Geben Sie als Root-Benutzer den folgenden Befehl ein, um sepolicy zu installieren
sudo yum install policycoreutils-devel
- Funktionen von sepolicy
Die sepolicy-Suite bietet die folgenden Funktionen, die als Befehlszeilenparameter aufgerufen werden:
| Funktion | Beschreibung |
|---|---|
| booleans | Abfrage der SELinux-Richtlinie zur Anzeige der Beschreibung von Booleschen Werten |
| communicate | Abfrage der SELinux-Richtlinie, um zu prüfen, ob Domänen miteinander kommunizieren können |
| generate | Erstellung einer Vorlage für ein SELinux-Richtlinienmodul |
| gui | Grafische Benutzeroberfläche für die SELinux-Richtlinie |
| interface | Auflistung der SELinux-Richtlinien-Schnittstellen |
| manpage | SELinux-Manpages generieren |
| network | Netzwerkinformationen der SELinux-Richtlinie abfragen |
| transition | SELinux-Richtlinie abfragen und einen Prozessübergangsbericht generieren |
Python-Bindings
- sepolicy-Python-Bindings
In früheren Linux-Versionen enthielt das setools-Paket die Dienstprogramme sesearch und seinfo
- Das Dienstprogramm sesearch dient zum Suchen von Regeln in einer SELinux-Richtlinie, während das Dienstprogramm seinfo es ermöglicht, verschiedene andere Komponenten der Richtlinie abzufragen
In Linux wurden Python-Bindings für sesearch und seinfo hinzugefügt, sodass Sie die Funktionalität dieser Dienstprogramme über die sepolicy-Suite nutzen können
- Beispiel
> python >>> import sepolicy >>> sepolicy.info(sepolicy.ATTRIBUTE) Returns a dictionary of all information about SELinux Attributes >>>sepolicy.search([sepolicy.ALLOW]) Returns a dictionary of all allow rules in the policy.
Richtlinienmodule
Richtlinienmodule generieren
- sepolicy generate
In früheren Linux-Versionen wurden die Dienstprogramme sepolgen oder selinux-polgengui zum Generieren einer SELinux-Richtlinie verwendet
- Diese Tools wurden in die sepolicy-Suite integriert
- Unter Linux wird der Befehl sepolicy generate verwendet, um eine erste Vorlage für ein SELinux-Richtlinienmodul zu generieren
Im Gegensatz zu sepolgen ist es nicht erforderlich, sepolicy generate als Root-Benutzer auszuführen
- Dieses Dienstprogramm erstellt außerdem eine RPM-Spec-Datei, mit der ein RPM-Paket erstellt werden kann, das die Policy-Paketdatei (NAME.pp) und die Schnittstellendatei (NAME.if) am richtigen Ort installiert, die SELinux-Policy in den Kernel integriert und die Labeling-Einstellungen anpasst
- Das Setup-Skript installiert anschließend die SELinux-Policy und richtet das Labeling ein
- Darüber hinaus wird mit dem Befehl sepolicy manpage eine Handbuchseite basierend auf der installierten Richtlinie generiert. [7] Schließlich erstellt und kompiliert sepolicy generate die SELinux-Richtlinie und die Handbuchseite zu einem RPM-Paket, das zur Installation auf anderen Systemen bereit ist
- sepolicy generate erzeugt folgenden Dateien
| NAME.te | Typ-Enforcing-Datei | Diese Datei definiert alle Typen und Regeln für eine bestimmte Domäne |
| NAME.if | Schnittstellendatei | Diese Datei definiert den Standard-Dateikontext für das System
|
| NAME_selinux.spec | RPM-Spezifikationsdatei | Diese Datei ist eine RPM-Spezifikationsdatei, die die SELinux-Richtlinie installiert und die Labeling-Einstellungen vornimmt
|
| NAME.sh | Hilfs-Shell-Skript | Dieses Skript hilft beim Kompilieren, Installieren und Korrigieren der Kennzeichnung auf dem System
|
Wenn es möglich ist, ein SELinux-Richtlinienmodul zu generieren, gibt sepolicy generate alle generierten Pfade von der Quelldomäne zur Zieldomäne aus
- Weitere Informationen zu sepolicy generate finden Sie auf der Man-Seite sepolicy-generate(8)
Domänenübergänge
Domänenübergänge verstehen
- sepolicy transition
Früher wurde das Dienstprogramm setrans verwendet, um zu prüfen, ob ein Übergang zwischen zwei Domänen- oder Prozesstypen möglich ist, und es gab alle Zwischentypen aus, die für den Übergang zwischen diesen Domänen oder Prozessen verwendet werden
- Unter Linux ist setrans als Teil der sepolicy-Suite verfügbar, und stattdessen wird nun der Befehl sepolicy transition verwendet
Der Befehl sepolicy transition fragt eine SELinux-Richtlinie ab und erstellt einen Prozessübergangsbericht
- Der Befehl sepolicy transition benötigt zwei Befehlszeilenargumente – eine Quelldomäne (angegeben mit der Option ‚‘-s'‚) und eine Zieldomäne (angegeben mit der Option -t)
- Wenn nur die Quelldomäne angegeben wird, listet sepolicy transition alle möglichen Domänen auf, zu denen die Quelldomäne wechseln kann
- Die folgende Ausgabe enthält nicht alle Einträge
Das Zeichen @ bedeutet ausführen:
sepolicy transition -s httpd_t httpd_t @ httpd_suexec_exec_t --> httpd_suexec_t httpd_t @ mailman_cgi_exec_t --> mailman_cgi_t httpd_t @ abrt_retrace_worker_exec_t --> abrt_retrace_worker_t httpd_t @ dirsrvadmin_unconfined_script_exec_t --> dirsrvadmin_unconfined_script_t httpd_t @ httpd_unconfined_script_exec_t --> httpd_unconfined_script_t
Wenn die Zieldomäne angegeben ist, untersucht sepolicy transition die SELinux-Richtlinie auf alle Übergangspfade von der Quelldomäne zur Zieldomäne und listet diese Pfade auf
Die folgende Ausgabe ist unvollständig:
sepolicy transition -s httpd_t -t system_mail_t httpd_t @ exim_exec_t --> system_mail_t httpd_t @ courier_exec_t --> system_mail_t httpd_t @ sendmail_exec_t --> system_mail_t httpd_t ... httpd_suexec_t @ sendmail_exec_t --> system_mail_t httpd_t ... httpd_suexec_t @ exim_exec_t --> system_mail_t httpd_t ... httpd_suexec_t @ courier_exec_t --> system_mail_t httpd_t ... httpd_suexec_t ... httpd_mojomojo_script_t @ sendmail_exec_t --> system_mail_t
Weitere Informationen zum sepolicy-transition finden Sie in der sepolicy-transition(8)-Handbuchseite
Manpage erstellen
- Erstellen von Handbuchseiten
- sepolicy manpage
Der Befehl sepolicy manpage generiert Handbuchseiten auf Basis der SELinux-Richtlinie, die Prozessdomänen dokumentieren
- Dadurch ist diese Dokumentation stets auf dem neuesten Stand
- Jeder Name der automatisch generierten Handbuchseiten besteht aus dem Namen der Prozessdomäne und dem Suffix _selinux, zum Beispiel httpd_selinux
Die Handbuchseiten enthalten mehrere Abschnitte, die Informationen zu verschiedenen Teilen der SELinux-Richtlinie für eingeschränkte Domänen bereitstellen:
| Entrypoints | enthält alle ausführbaren Dateien, die während eines Domänenübergangs ausgeführt werden müssen |
| Process Types | listet alle Prozesstypen auf, die mit demselben Präfix wie die Zieldomäne beginnen |
| Booleans | listet die mit der Domäne verbundenen Booleschen Werte auf |
| Port Types | enthält die Porttypen, die mit demselben Präfix wie die Domäne übereinstimmen, und beschreibt die diesen Porttypen zugewiesenen Standardportnummern |
| Managed Files | beschreibt die Typen, in die die Domäne schreiben darf, sowie die diesen Typen zugeordneten Standardpfade |
| File Contexts | enthält alle mit der Domäne verbundenen Dateitypen und beschreibt, wie diese Dateitypen zusammen mit der Standard-Pfadkennzeichnung auf einem System verwendet werden |
| Sharing Files | erläutert die Verwendung der Domänen-Freigabetypen, wie public_content_t |
Weitere Informationen zu sepolicy manpage finden Sie auf der sepolicy-manpage(8)-Handbuchseite
[7] Weitere Informationen zu sepolicy manpage finden Sie in Abschnitt Erstellen von Handbuchseiten: sepolicy manpage
Arbeit mit Modulen
Um eine maximale Performance auf Ebene der Systemaufrufe (Syscalls) zu gewährleisten, verwendet SELinux eine kompilierte binäre Zugriffsmatrix.
Der Quellcode der Policy (Type Enforcement-Dateien — .te) muss eine spezielle Kompilierungs- und Build-Pipeline durchlaufen, bevor er in den Kernel geladen werden kann.
Diese Pipeline besteht aus drei wesentlichen Werkzeugen:
checkmodule
Dieses Tool nimmt eine Textdatei (.te), prüft deren Syntax und kompiliert sie in ein binäres Zwischenformat — ein Modul (.mod). In diesem Schritt stellt das Programm sicher, dass alle deklarierten Typen und Klassen tatsächlich existieren.
- Wichtige Optionen
- -M: Aktiviert die Unterstützung für MLS/MCS. Bei modernen Distributionen ist diese Option zwingend erforderlich, da deren Basis-Policies Kategorien verwenden.
- -m: Gibt an, dass ein ladbares Modul für eine bereits existierende Policy kompiliert wird.
- -o <FILE.mod>: Legt den Namen der ausgegebenen kompilierten Datei fest.
- Beispiel
checkmodule -M -m -o my_rule.mod my_rule.te
semodule_package
Der SELinux-Kernel akzeptiert keine .mod-Dateien direkt. Diese müssen in ein spezielles Policy-Paket — Policy Package (.pp) — verpackt werden. Der Packager nimmt das kompilierte Modul und fügt (falls erforderlich) Dateikontext-Regeln hinzu.
- Wichtige Optionen
- -m <FILE.mod>: Gibt das binäre Eingangsmodul an.
- -o <FILE.pp>: Legt den Namen des resultierenden Policy-Pakets fest.
- -fc <FILE.fc>: (Optional) Fügt eine Datei mit Regeln zur Markierung des Dateisystems (File Contexts) hinzu.
- Beispiel
semodule_package -o my_rule.pp -m my_rule.mod
semodule
Dies ist das primäre Administrationswerkzeug zur Verwaltung der im System geladenen Module. Es integriert das fertige Paket (.pp) in die aktive SELinux-Datenbank und wendet die Regeln im laufenden Betrieb an, ohne dass ein Systemneustart erforderlich ist.
- Wichtige Optionen
- -i <FILE.pp>: Ein neues Modul installieren oder ein bestehendes aktualisieren.
- -r <MODULE_NAME>: Ein installiertes Modul aus dem System entfernen.
- -l: Listet alle aktuell geladenen Module auf.
- -X <PRIORITY>: Legt die Priorität des Moduls fest (standardmäßig werden benutzerdefinierte Module mit der Priorität 400 installiert).
- Beispiel
semodule -i my_rule.pp