Zum Inhalt springen

Linux/SELinux/04/06 Booleane: Unterschied zwischen den Versionen

Aus Foxwiki
K Dirkwagner verschob die Seite Linux/SELinux/DOC/04/06 Booleane nach Linux/SELinux/04/06 Booleane: Textersetzung - „Linux/SELinux/DOC/0“ durch „Linux/SELinux/0“
K Textersetzung - „ )“ durch „)“
 
(20 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Booleane ===
{{Navigation|Linux/SELinux/04/05 Systemstart|Linux/SELinux/04/07 Kontexte}}
Booleane ermöglichen es, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen
'''Linux/SELinux/04/06 Booleane'''
* Dies ermöglicht Änderungen, wie z. B. das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu zu laden oder neu zu kompilieren


==== Auflisten von Booleanen ====
=== Beschreibung ===
Um eine Liste der Booleans, eine Erklärung zu deren Bedeutung sowie Angaben dazu, ob sie aktiviert oder deaktiviert sind, zu erhalten, führen Sie den Befehl [[semanage boolean -l]] als Linux-Root-Benutzer aus
'''Booleans''' sind in die Policy integrierte Schalter (on/off), mit denen bestimmte Regelblöcke ('''Conditional Rules''') innerhalb der bereits kompilierten Policy aktiviert oder deaktiviert werden.


Das folgende Beispiel listet nicht alle Booleans auf, und die Ausgabe wurde der Kürze halber gekürzt
== Werkzeuge ==
sudo semanage boolean -l
SELinux-Boolean Status Standard Beschreibung
smartmon_3ware (aus , aus) Legt fest, ob smartmon...
mpd_enable_homedirs (aus, aus) Legt fest, ob mpd...


; Hinweis
=== getsebool ===
: Um detailliertere Beschreibungen zu erhalten, installieren Sie das Paket selinux-policy-devel
Wird verwendet, um den '''aktuellen Zustand eines Boolean''' anzuzeigen.


Die Spalte [[SELinux-Boolean]] listet die Namen der Booleans auf
Alle aktuellen Booleans anzeigen
* Die Spalte [[Beschreibung]] gibt an, ob die Booleans aktiviert oder deaktiviert sind und welche Funktion sie haben
<syntaxhighlight lang="bash" highlight="1" copy line>
getsebool -a
</syntaxhighlight>


Der Befehl [[getsebool -a]] listet Boolesche Werte auf, unabhängig davon, ob sie aktiviert oder deaktiviert sind, gibt jedoch keine Beschreibung zu jedem einzelnen
Einen einzelnen Boolean anzeigen
* Das folgende Beispiel listet nicht alle Booleschen Werte auf
<syntaxhighlight lang="bash" highlight="1" copy line>
getsebool -a
getsebool httpd_use_nfs
cvs_read_shadow --> off
</syntaxhighlight>
daemons_dump_core --> on


Führen Sie den Befehl [[getsebool ‚‘ boolean-name'‚]] aus, um nur den Status des Booleschen Werts ‘'boolean-name'' aufzulisten
=== setsebool ===
getsebool cvs_read_shadow
Wird verwendet, um den '''Zustand eines Boolean zu ändern'''.
cvs_read_shadow --> off


Verwenden Sie eine durch Leerzeichen getrennte Liste, um mehrere Boolesche Werte aufzulisten
* Boolean einschalten (temporär):
getsebool cvs_read_shadow daemons_dump_core
<syntaxhighlight lang="bash" highlight="1" copy line>
cvs_read_shadow --> off
setsebool ftpd_anon_write on
daemons _dump_core --> on
</syntaxhighlight>


==== Konfigurieren von Booleschen Werten ====
* Boolean einschalten (persistent):
Führen Sie das Dienstprogramm [[setsebool]] im Format [[setsebool ‚'boolean_name‘' on/off]] aus, um Boolesche Werte zu aktivieren oder zu deaktivieren
<syntaxhighlight lang="bash" highlight="1" copy line>
setsebool -P ftpd_anon_write on
</syntaxhighlight>


Das folgende Beispiel zeigt die Konfiguration des Booleschen Werts [[httpd_can_network_connect_db]]
* Wenn mehrere Booleans gesetzt werden, müssen sie in der Form ''parameter=wert'' angegeben werden:
<syntaxhighlight lang="bash" highlight="1" copy line>
setsebool ftpd_anon_write=on ftpd_use_passive_mode=on
</syntaxhighlight>


; Konfigurieren von Booleschen Werten
=== semanage ===
# Standardmäßig ist der Boolesche Wert [[httpd_can_network_connect_db]] deaktiviert, wodurch Skripte und Module des Apache-HTTP-Servers daran gehindert werden, eine Verbindung zu Datenbankservern herzustellen
; semanage boolean
getsebool httpd_can_network_connect_db
Wird verwendet, um '''Boolean-Einstellungen als Teil der Policy-Konfiguration''' zu verwalten. Außerdem lassen sich damit eine menschenlesbare Beschreibung jedes Schalters sowie dessen Standardwert anzeigen.
httpd_can_network_connect_db --> off
# Um Skripte und Module des Apache-HTTP-Servers vorübergehend die Verbindung zu Datenbankservern zu ermöglichen, geben Sie als Root den folgenden Befehl ein
sudo setsebool httpd_can_network_connect_db on
# Verwenden Sie das Dienstprogramm [[getsebool]], um zu überprüfen, ob der Boolean-Wert aktiviert wurde
getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> on


Dadurch können Skripte und Module des Apache-HTTP-Servers eine Verbindung zu Datenbankservern herstellen
Alle Booleans mit Beschreibung und Werten anzeigen (aktuell und Standard):
# Diese Änderung bleibt nach einem Neustart nicht erhalten
<syntaxhighlight lang="bash" highlight="1" copy line>
#*Um Änderungen auch nach einem Neustart beizubehalten, führen Sie den Befehl [[setsebool -P ‚‘ boolean-name'' on]] als Root aus:[3]
semanage boolean -l
sudo setsebool -P httpd_can_network_connect_db on
</syntaxhighlight>


==== Shell-Autovervollständigung ====
Beschreibung eines bestimmten Boolean suchen:
Es ist möglich, die Shell-Autovervollständigung mit den Dienstprogrammen [[getsebool]], [[setsebool]] und [[semanage]] zu verwenden
<syntaxhighlight lang="bash" highlight="1" copy line>
* Verwenden Sie die Autovervollständigung mit [[getsebool]] und [ [setsebool]], um sowohl Befehlszeilenparameter als auch Boolesche Werte zu vervollständigen
semanage boolean -l | grep httpd
* Um nur die Befehlszeilenparameter aufzulisten, fügen Sie das Bindestrichzeichen („-“) hinter dem Befehlsnamen ein und drücken Sie die [[Tab]]-Taste
</syntaxhighlight>
sudo setsebool -[Tab]
-P


Um einen Booleschen Wert zu vervollständigen, beginnen Sie mit der Eingabe des Booleschen Werts und drücken Sie dann die [[Tab]]-Taste
Zustand eines Boolean ändern (funktional ähnlich zu ''setsebool -P''):
getsebool samba_[Tab]
<syntaxhighlight lang="bash" highlight="1" copy line>
samba_create_home_dirs samba_export_all_ro samba_run_unconfined
semanage boolean -m --on ftpd_anon_write
samba_domain_controller samba_export_all_rw samba_share_fusefs
</syntaxhighlight>
samba_enable_home_dirs samba_portmapper samba_share_nfs
 
== Anwendung ==
=== Aufgabe ===
Es soll erreicht werden, dass die Web-Anfrage mit ''curl'' eine Datei lesen kann, die als auf NFS liegend gelabelt ist – und zwar ausschließlich mithilfe des Boolean-Mechanismus.
 
=== Lösung ===
Vorbereitung der Umgebung:
<syntaxhighlight lang="bash" highlight="" copy line>
mkdir -p /var/www/html/nfs_test
echo "Hello from NFS" > /var/www/html/nfs_test/index.html
chcon -R -t nfs_t /var/www/html/nfs_test
setenforce 1 # Enforcing-Modus aktivieren
</syntaxhighlight>
 
Versuch, die Seite aus dem NFS-Verzeichnis mit ''curl'' abzurufen:
<syntaxhighlight lang="bash" highlight="1" copy line>
curl -I http://localhost/nfs_test/index.html
</syntaxhighlight>
Ergebnis:
<syntaxhighlight lang="console" highlight="" copy line>
HTTP/1.1 403 Forbidden
...
</syntaxhighlight>
 
Relevante Rechte und zugehörige Booleans prüfen:
<syntaxhighlight lang="bash" highlight="" copy line>
semanage boolean -l | grep httpd
semanage boolean -l | grep nfs
sesearch -A -s httpd_t -t nfs_t -c file -p read
</syntaxhighlight>
 
Mithilfe von ''sesearch'' lässt sich der Lösungsweg bestimmen:
<syntaxhighlight lang="bash" highlight="" copy line>
allow httpd_t nfs_t:file { execute execute_no_trans getattr ioctl map open read }; [ (httpd_builtin_scripting && use_nfs_home_dirs && httpd_enable_homedirs) ]:True
allow httpd_t nfs_t:file { execute execute_no_trans getattr ioctl map open read }; [ httpd_builtin_scripting && httpd_use_nfs ]:True
allow httpd_t nfs_t:file { execute getattr ioctl map open read }; [ httpd_use_nfs && httpd_enable_cgi ]:True
allow httpd_t nfs_t:file { getattr ioctl lock open read }; [ use_nfs_home_dirs && httpd_enable_homedirs ]:True
</syntaxhighlight>
 
Es ist zu erkennen, dass in der Liste unter anderem ''httpd_use_nfs'' vorkommt, dieses Boolean allein jedoch nicht ausreicht, damit eine passende Regel aktiv wird. Deshalb wird entschieden, ''httpd_builtin_scripting'' als zweiten Aktivierungsfaktor zu verwenden.
 
Den aktuellen Zustand von ''httpd_use_nfs'' und ''httpd_builtin_scripting'' prüfen:
<syntaxhighlight lang="bash" highlight="1" copy line>
getsebool httpd_use_nfs httpd_builtin_scripting
</syntaxhighlight>
 
Beide Booleans testweise temporär aktivieren:
<syntaxhighlight lang="bash" highlight="1" copy line>
setsebool httpd_use_nfs=on httpd_builtin_scripting=on
</syntaxhighlight>
 
Erneute Prüfung
<syntaxhighlight lang="bash" highlight="1" copy line>
curl -I http://localhost/nfs_test/index.html
</syntaxhighlight>
Ergebnis:
<syntaxhighlight lang="console" highlight="" copy line>
HTTP/1.1 200 OK
...
</syntaxhighlight>
'''Erfolgreich!'''
 
Wenn das Verhalten den Erwartungen entspricht, können die Änderungen persistent gespeichert werden:
<syntaxhighlight lang="bash" highlight="1" copy line>
setsebool -P httpd_use_nfs=on httpd_builtin_scripting=on
</syntaxhighlight>
 
=== Autovervollständigung ===
; Shell-Autovervollständigung
Es ist möglich, die Shell-Autovervollständigung mit den Dienstprogrammen ''getsebool'', ''setsebool'' und ''semanage'' zu verwenden
* Verwenden Sie die Autovervollständigung mit ''getsebool'' und ''setsebool'', um sowohl Befehlszeilenparameter als auch Boolesche Werte zu vervollständigen
* Um nur die Befehlszeilenparameter aufzulisten, fügen Sie das Bindestrichzeichen („-“) hinter dem Befehlsnamen ein und drücken Sie die ''Tab''-Taste
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo setsebool -[Tab]
-P
</syntaxhighlight>
 
Um einen Booleschen Wert zu vervollständigen, beginnen Sie mit der Eingabe des Booleschen Werts und drücken Sie dann die ''Tab''-Taste
<syntaxhighlight lang="bash" highlight="1" copy line>
getsebool samba_[Tab]
samba_create_home_dirs samba_export_all_ro samba_run_unconfined
samba_domain_controller samba_export_all_rw samba_share_fusefs
samba_enable_home_dirs samba_portmapper samba_share_nfs
</syntaxhighlight>
 
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo setsebool -P virt_use_[Tab]
sudo setsebool -P virt_use_[Tab]
virt_use_comm virt_use_nfs virt_use_sanlock
virt_use_comm virt_use_nfs virt_use_sanlock
virt_use_execmem virt_use_rawip virt_use_usb
virt_use_execmem virt_use_rawip virt_use_usb
virt_use_fusefs virt_use_samba virt_use_xserver
virt_use_fusefs virt_use_samba virt_use_xserver
</syntaxhighlight>


Das Dienstprogramm [[semanage]] wird mit mehreren Befehlszeilenargumenten verwendet, die nacheinander vervollständigt werden
Das Dienstprogramm ''semanage'' wird mit mehreren Befehlszeilenargumenten verwendet, die nacheinander vervollständigt werden
* Das erste Argument eines [[semanage]]-Befehls ist eine Option, die angibt, welcher Teil der SELinux-Richtlinie verwaltet wird
* Das erste Argument eines ''semanage''-Befehls ist eine Option, die angibt, welcher Teil der SELinux-Richtlinie verwaltet wird
sudo semanage [Tab]
<syntaxhighlight lang="bash" highlight="1" copy line>
boolean export import login node port
sudo semanage [Tab]
dontaudit fcontext interface module permissive user
boolean export import login node port
dontaudit fcontext interface module permissive user
</syntaxhighlight>


Anschließend folgen ein oder mehrere Befehlszeilenparameter
Anschließend folgen ein oder mehrere Befehlszeilenparameter
sudo semanage fcontext -[Tab]
<syntaxhighlight lang="bash" highlight="1" copy line>
-a -D --equal --help -m -o
sudo semanage fcontext -[Tab]
--add --delete -f -l --modify -S
-a -D --equal --help -m -o
-C --deleteall --ftype --list -n -t
--add --delete -f -l --modify -S
-d -e -h --locallist --noheading --type
-C --deleteall --ftype --list -n -t
-d -e -h --locallist --noheading --type
</syntaxhighlight>
 
Geben Sie schließlich den Namen eines bestimmten SELinux-Eintrags ein, beispielsweise einen Booleschen Wert, einen SELinux-Benutzer, eine Domäne oder einen anderen
 
Beginnen Sie mit der Eingabe des Eintrags und drücken Sie ''Tab''
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo semanage fcontext -a -t samba<tab>


Geben Sie schließlich den Namen eines bestimmten SELinux-Eintrags ein, z. B. einen Booleschen Wert, einen SELinux-Benutzer, eine Domäne oder einen anderen
* Beginnen Sie mit der Eingabe des Eintrags und drücken Sie [[Tab]]
sudo semanage fcontext -a -t samba<tab>
samba_etc_t samba_secrets_t
samba_etc_t samba_secrets_t
sambagui_exec_t samba_share_t
sambagui_exec_t samba_share_t
samba_initrc_exec_t samba_unconfined_script_exec_t
samba_initrc_exec_t samba_unconfined_script_exec_t
samba_log_t samba_unit_file_t
samba_log_t samba_unit_file_t
samba_net_exec_t
samba_net_exec_t
</syntaxhighlight>
 
Befehls- Parameter können in einem Befehl verkettet werden
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo semanage port -a -t http_port_t -p tcp 81
</syntaxhighlight>


Befehls- -Parameter können in einem Befehl verkettet werden
{{Navigation|Linux/SELinux/04/05 Systemstart|Linux/SELinux/04/07 Kontexte}}
sudo semanage port -a -t http_port_t -p tcp 81


[[Kategorie:Linux/SELinux/DOC/04]]
[[Kategorie:Linux/SELinux/04]]

Aktuelle Version vom 17. Juni 2026, 10:40 Uhr

Linux/SELinux/04/06 Booleane

Beschreibung

Booleans sind in die Policy integrierte Schalter (on/off), mit denen bestimmte Regelblöcke (Conditional Rules) innerhalb der bereits kompilierten Policy aktiviert oder deaktiviert werden.

Werkzeuge

getsebool

Wird verwendet, um den aktuellen Zustand eines Boolean anzuzeigen.

Alle aktuellen Booleans anzeigen

getsebool -a

Einen einzelnen Boolean anzeigen

getsebool httpd_use_nfs

setsebool

Wird verwendet, um den Zustand eines Boolean zu ändern.

  • Boolean einschalten (temporär):
setsebool ftpd_anon_write on
  • Boolean einschalten (persistent):
setsebool -P ftpd_anon_write on
  • Wenn mehrere Booleans gesetzt werden, müssen sie in der Form parameter=wert angegeben werden:
setsebool ftpd_anon_write=on ftpd_use_passive_mode=on

semanage

semanage boolean

Wird verwendet, um Boolean-Einstellungen als Teil der Policy-Konfiguration zu verwalten. Außerdem lassen sich damit eine menschenlesbare Beschreibung jedes Schalters sowie dessen Standardwert anzeigen.

Alle Booleans mit Beschreibung und Werten anzeigen (aktuell und Standard):

semanage boolean -l

Beschreibung eines bestimmten Boolean suchen:

semanage boolean -l | grep httpd

Zustand eines Boolean ändern (funktional ähnlich zu setsebool -P):

semanage boolean -m --on ftpd_anon_write

Anwendung

Aufgabe

Es soll erreicht werden, dass die Web-Anfrage mit curl eine Datei lesen kann, die als auf NFS liegend gelabelt ist – und zwar ausschließlich mithilfe des Boolean-Mechanismus.

Lösung

Vorbereitung der Umgebung:

mkdir -p /var/www/html/nfs_test
echo "Hello from NFS" > /var/www/html/nfs_test/index.html
chcon -R -t nfs_t /var/www/html/nfs_test
setenforce 1 # Enforcing-Modus aktivieren

Versuch, die Seite aus dem NFS-Verzeichnis mit curl abzurufen:

curl -I http://localhost/nfs_test/index.html

Ergebnis:

HTTP/1.1 403 Forbidden
...

Relevante Rechte und zugehörige Booleans prüfen:

semanage boolean -l | grep httpd
semanage boolean -l | grep nfs
sesearch -A -s httpd_t -t nfs_t -c file -p read

Mithilfe von sesearch lässt sich der Lösungsweg bestimmen:

allow httpd_t nfs_t:file { execute execute_no_trans getattr ioctl map open read }; [ (httpd_builtin_scripting && use_nfs_home_dirs && httpd_enable_homedirs) ]:True
allow httpd_t nfs_t:file { execute execute_no_trans getattr ioctl map open read }; [ httpd_builtin_scripting && httpd_use_nfs ]:True
allow httpd_t nfs_t:file { execute getattr ioctl map open read }; [ httpd_use_nfs && httpd_enable_cgi ]:True
allow httpd_t nfs_t:file { getattr ioctl lock open read }; [ use_nfs_home_dirs && httpd_enable_homedirs ]:True

Es ist zu erkennen, dass in der Liste unter anderem httpd_use_nfs vorkommt, dieses Boolean allein jedoch nicht ausreicht, damit eine passende Regel aktiv wird. Deshalb wird entschieden, httpd_builtin_scripting als zweiten Aktivierungsfaktor zu verwenden.

Den aktuellen Zustand von httpd_use_nfs und httpd_builtin_scripting prüfen:

getsebool httpd_use_nfs httpd_builtin_scripting

Beide Booleans testweise temporär aktivieren:

setsebool httpd_use_nfs=on httpd_builtin_scripting=on

Erneute Prüfung

curl -I http://localhost/nfs_test/index.html

Ergebnis:

HTTP/1.1 200 OK
...

Erfolgreich!

Wenn das Verhalten den Erwartungen entspricht, können die Änderungen persistent gespeichert werden:

setsebool -P httpd_use_nfs=on httpd_builtin_scripting=on

Autovervollständigung

Shell-Autovervollständigung

Es ist möglich, die Shell-Autovervollständigung mit den Dienstprogrammen getsebool, setsebool und semanage zu verwenden

  • Verwenden Sie die Autovervollständigung mit getsebool und setsebool, um sowohl Befehlszeilenparameter als auch Boolesche Werte zu vervollständigen
  • Um nur die Befehlszeilenparameter aufzulisten, fügen Sie das Bindestrichzeichen („-“) hinter dem Befehlsnamen ein und drücken Sie die Tab-Taste
sudo setsebool -[Tab]
-P

Um einen Booleschen Wert zu vervollständigen, beginnen Sie mit der Eingabe des Booleschen Werts und drücken Sie dann die Tab-Taste

getsebool samba_[Tab]
samba_create_home_dirs samba_export_all_ro samba_run_unconfined
samba_domain_controller samba_export_all_rw samba_share_fusefs
samba_enable_home_dirs samba_portmapper samba_share_nfs
sudo setsebool -P virt_use_[Tab]
virt_use_comm virt_use_nfs virt_use_sanlock
virt_use_execmem virt_use_rawip virt_use_usb
virt_use_fusefs virt_use_samba virt_use_xserver

Das Dienstprogramm semanage wird mit mehreren Befehlszeilenargumenten verwendet, die nacheinander vervollständigt werden

  • Das erste Argument eines semanage-Befehls ist eine Option, die angibt, welcher Teil der SELinux-Richtlinie verwaltet wird
sudo semanage [Tab]
boolean export import login node port
dontaudit fcontext interface module permissive user

Anschließend folgen ein oder mehrere Befehlszeilenparameter

sudo semanage fcontext -[Tab]
-a -D --equal --help -m -o
--add --delete -f -l --modify -S
-C --deleteall --ftype --list -n -t
-d -e -h --locallist --noheading --type

Geben Sie schließlich den Namen eines bestimmten SELinux-Eintrags ein, beispielsweise einen Booleschen Wert, einen SELinux-Benutzer, eine Domäne oder einen anderen

Beginnen Sie mit der Eingabe des Eintrags und drücken Sie Tab

sudo semanage fcontext -a -t samba<tab>

samba_etc_t samba_secrets_t
sambagui_exec_t samba_share_t
samba_initrc_exec_t samba_unconfined_script_exec_t
samba_log_t samba_unit_file_t
samba_net_exec_t

Befehls- Parameter können in einem Befehl verkettet werden

sudo semanage port -a -t http_port_t -p tcp 81