Zum Inhalt springen

Linux/SELinux/05 SEPolicy: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „ “ durch „ “
 
(31 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Die sepolicy-Suite ===
'''Linux/SELinux/05 SEPolicy''' - Sepolicy-Suite
Das Dienstprogramm ‚'sepolicy‘' bietet eine Reihe von Funktionen zur Abfrage der installierten SELinux-Richtlinie
{{navigation|Linux/SELinux/04/16 Miniaturansichten|Linux/SELinux/06 Benutzer}}
* Diese Funktionen sind entweder neu oder wurden zuvor von separaten Dienstprogrammen wie 'sepolgen‘' oder 'setrans‘' bereitgestellt
 
== 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
* 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
Das Paket [[policycoreutils-devel]] stellt [[sepolicy]] bereit


Geben Sie als Root-Benutzer den folgenden Befehl ein, um ‚'sepolicy‘' zu installieren
Geben Sie als Root-Benutzer den folgenden Befehl ein, um [[sepolicy]] zu installieren
  yum install policycoreutils-devel
  sudo yum install policycoreutils-devel


; Die Funktionen von sepolicy
; Funktionen von sepolicy
Die 'sepolicy‘'-Suite bietet die folgenden Funktionen, die als Befehlszeilenparameter aufgerufen werden:
Die '''sepolicy'''-Suite bietet die folgenden Funktionen, die als Befehlszeilenparameter aufgerufen werden:
{| class="wikitable options big"
{| class="wikitable options big"
!Funktion
!Funktion
Zeile 40: Zeile 43:
|}
|}


=== Die sepolicy-Python-Bindings ===
== Python-Bindings ==
In früheren Linux-Versionen enthielt das setools-Paket die Dienstprogramme 'sesearch‘' und 'seinfo‘'
; sepolicy-Python-Bindings
* 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 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
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


Siehe das folgende Beispiel:
; Beispiel
   
  > python
‚‘> python
  >>> import sepolicy
  >>> import sepolicy
  >>> sepolicy.info(sepolicy.ATTRIBUTE)
  >>> sepolicy.info(sepolicy.ATTRIBUTE)
  Gibt ein Wörterbuch mit allen Informationen zu SELinux-Attributen zurück
  Returns a dictionary of all information about SELinux Attributes
  >>>sepolicy.search([sepolicy.ALLOW])
  >>>sepolicy.search([sepolicy.ALLOW])
  Gibt ein Wörterbuch mit allen Zulassungsregeln in der Richtlinie zurück.‚‘
  Returns a dictionary of all allow rules in the policy.


=== Generieren von SELinux-Richtlinienmodulen: sepolicy generate ===
== Richtlinienmodule ==
In früheren Linux-Versionen wurden die Dienstprogramme „sepolgen“ oder „selinux-polgengui“ zum Generieren einer SELinux-Richtlinie verwendet
Richtlinienmodule generieren
* 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
; sepolicy generate
* 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
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
* 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
* 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


Wenn ‚'sepolicy generate‘' ausgeführt wird, werden die folgenden Dateien erzeugt:
; ''sepolicy generate'' erzeugt folgenden Dateien
 
{| class="wikitable options big"
; ‚‘''NAME'.te‘' – Typ-Enforcing-Datei
| ''NAME''.te || Typ-Enforcing-Datei || Diese Datei definiert alle Typen und Regeln für eine bestimmte Domäne
: Diese Datei definiert alle Typen und Regeln für eine bestimmte Domäne
|-
; ‚‘''NAME'.if‘' – Schnittstellendatei
| ''NAME''.if || Schnittstellendatei || Diese Datei definiert den Standard-Dateikontext für das System
: 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
* 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
* Dienstprogramme wie 'restorecon‘' und 'rpm‘' verwenden diese Pfade, um Labels zu schreiben
|-
; ‚‘''NAME'‚_selinux.spec‘' – RPM-Spezifikationsdatei
| ''NAME''_selinux.spec || RPM-Spezifikationsdatei || Diese Datei ist eine RPM-Spezifikationsdatei, die die SELinux-Richtlinie installiert und die Labeling-Einstellungen vornimmt
: 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
* 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
* 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
| ''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
* 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
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)
* Weitere Informationen zu '''sepolicy generate''' finden Sie auf der Man-Seite sepolicy-generate(8)


=== Domänenübergänge verstehen: sepolicy transition ===
== Domänenübergänge ==
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
Domänenübergänge verstehen
* 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
; sepolicy transition
* 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'')
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
* Wenn nur die Quelldomäne angegeben wird, listet „sepolicy transition“ alle möglichen Domänen auf, zu denen die Quelldomäne wechseln kann
* 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
* Die folgende Ausgabe enthält nicht alle Einträge
* Das Zeichen @bedeutet „ausführen“:
 
  ‚‘~]$ sepolicy transition -s httpd_t
Das Zeichen '''@''' bedeutet '''ausführen''':
  sepolicy transition -s httpd_t
  httpd_t @ httpd_suexec_exec_t --> httpd_suexec_t
  httpd_t @ httpd_suexec_exec_t --> httpd_suexec_t
   
  httpd_t @ mailman_cgi_exec_t --> mailman_cgi_t
httpd_t @ mailman_cgi_exec_t --> mailman_cgi_t
  httpd_t @ abrt_retrace_worker_exec_t --> abrt_retrace_worker_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 @ dirsrvadmin_unconfined_script_exec_t --> dirsrvadmin_unconfined_script_t
   
  httpd_t @ httpd_unconfined_script_exec_t --> httpd_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
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:
 
   
Die folgende Ausgabe ist unvollständig:  
‚‘~]$ sepolicy transition -s httpd_t -t system_mail_t
  sepolicy transition -s httpd_t -t system_mail_t
  httpd_t @ exim_exec_t --> system_mail_t
  httpd_t @ exim_exec_t --> system_mail_t
  httpd_t @ courier_exec_t --> system_mail_t
  httpd_t @ courier_exec_t --> system_mail_t
  httpd_t @ sendmail_exec_t --> system_mail_t
  httpd_t @ sendmail_exec_t --> system_mail_t
  httpd_t ..
  httpd_t ... httpd_suexec_t @ sendmail_exec_t --> system_mail_t
* httpd_suexec_t @ sendmail_exec_t --> system_mail_t
  httpd_t ... httpd_suexec_t @ exim_exec_t --> system_mail_t
  httpd_t ..
  httpd_t ... httpd_suexec_t @ courier_exec_t --> system_mail_t
* httpd_suexec_t @ exim_exec_t --> system_mail_t
  httpd_t ... httpd_suexec_t ... httpd_mojomojo_script_t @ sendmail_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
Weitere Informationen zum '''sepolicy-transition''' finden Sie in der sepolicy-transition(8)-Handbuchseite


=== Erstellen von Handbuchseiten: sepolicy manpage ===
== Manpage erstellen ==
Der Befehl „sepolicy manpage“ generiert Handbuchseiten auf Basis der SELinux-Richtlinie, die Prozessdomänen dokumentieren
; 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
* 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‘'
* 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:
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>


* Der Abschnitt ‚'Entrypoints‘' enthält alle ausführbaren Dateien, die während eines Domänenübergangs ausgeführt werden müssen
----
* Der Abschnitt „Process Types“ listet alle Prozesstypen auf, die mit demselben Präfix wie die Zieldomäne beginnen
* Der Abschnitt „Booleans“ listet die mit der Domäne verbundenen Booleschen Werte auf
* Der Abschnitt „Port Types“ enthält die Porttypen, die mit demselben Präfix wie die Domäne übereinstimmen, und beschreibt die diesen Porttypen zugewiesenen Standardportnummern
* Der Abschnitt „Managed Files“ beschreibt die Typen, in die die Domäne schreiben darf, sowie die diesen Typen zugeordneten Standardpfade
* Der Abschnitt „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
* Der Abschnitt „Sharing Files“ erläutert die Verwendung der Domänen-Freigabetypen, wie z. B. „public_content_t“


Weitere Informationen zu „sepolicy manpage“ finden Sie auf der sepolicy-manpage(8)-Handbuchseite
{{navigation|Linux/SELinux/04/16 Miniaturansichten|Linux/SELinux/06 Benutzer}}
----[7]                Weitere Informationen zu „sepolicy manpage“ finden Sie in Abschnitt 5.4, „Erstellen von Handbuchseiten: „sepolicy manpage““


[[Kategorie:SELinux/DOC]]
[[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
  • 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:

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