Linux/SELinux/05 SEPolicy: Unterschied zwischen den Versionen
Die Seite wurde neu angelegt: „ Kategorie:SELinux/DOC“ |
K Textersetzung - „ “ durch „ “ |
||
| (40 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
'''Linux/SELinux/05 SEPolicy''' - Sepolicy-Suite | |||
{{navigation|Linux/SELinux/04/16 Miniaturansichten|Linux/SELinux/06 Benutzer}} | |||
== 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 | |||
[[Kategorie:SELinux | 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: | |||
{| class="wikitable options big" | |||
!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 | |||
{| class="wikitable options big" | |||
| ''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 | |||
* Sie übernimmt die in der Datei '''NAME.te''' erstellten Dateitypen und ordnet den Typen Dateipfade zu | |||
* Dienstprogramme wie '''restorecon''' und '''rpm''' verwenden diese Pfade, um Labels zu schreiben | |||
|- | |||
| ''NAME''_selinux.spec || RPM-Spezifikationsdatei || Diese Datei ist eine RPM-Spezifikationsdatei, die die SELinux-Richtlinie installiert und die Labeling-Einstellungen vornimmt | |||
* Diese Datei installiert außerdem die Schnittstellendatei und eine Man-Seite, die die Richtlinie beschreibt | |||
* Sie können den Befehl '''sepolicy manpage -d '''NAME''' verwenden, um die Man-Seite zu generieren | |||
|- | |||
| ''NAME''.sh || Hilfs-Shell-Skript || Dieses Skript hilft beim Kompilieren, Installieren und Korrigieren der Kennzeichnung auf dem System | |||
* Es generiert außerdem eine Man-Seite basierend auf der installierten Richtlinie, kompiliert und erstellt ein RPM-Paket, das für die Installation auf anderen Systemen geeignet ist | |||
|} | |||
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: | |||
{| class="wikitable options big" | |||
| 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 | |||
<syntaxhighlight lang="bash" highlight="1" copy line> | |||
checkmodule -M -m -o my_rule.mod my_rule.te | |||
</syntaxhighlight> | |||
=== 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 | |||
<syntaxhighlight lang="bash" highlight="1" copy line> | |||
semodule_package -o my_rule.pp -m my_rule.mod | |||
</syntaxhighlight> | |||
=== 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 | |||
<syntaxhighlight lang="bash" highlight="1" copy line> | |||
semodule -i my_rule.pp | |||
</syntaxhighlight> | |||
---- | |||
{{navigation|Linux/SELinux/04/16 Miniaturansichten|Linux/SELinux/06 Benutzer}} | |||
[[Kategorie:Linux/SELinux]] | |||
Aktuelle Version vom 14. Juni 2026, 00:49 Uhr
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