Zum Inhalt springen

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

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
== Werkzeuge ==
== Werkzeuge ==


=== ''getsebool'' ===
=== getsebool ===
Wird verwendet, um den '''aktuellen Zustand eines Boolean''' anzuzeigen.
Wird verwendet, um den '''aktuellen Zustand eines Boolean''' anzuzeigen.


* Alle aktuellen Booleans anzeigen:
* Alle aktuellen Booleans anzeigen:
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''getsebool -a''
getsebool -a
</syntaxhighlight>


* Einen einzelnen Boolean anzeigen:
* Einen einzelnen Boolean anzeigen:
<syntaxhighlight lang="bash" highlight="1" copy line>
getsebool httpd_use_nfs
</syntaxhighlight>


''getsebool httpd_use_nfs''
=== setsebool ===
 
=== ''setsebool'' ===
Wird verwendet, um den '''Zustand eines Boolean zu ändern'''.
Wird verwendet, um den '''Zustand eines Boolean zu ändern'''.


* Boolean einschalten (temporär):
* Boolean einschalten (temporär):
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''setsebool ftpd_anon_write on''
setsebool ftpd_anon_write on
</syntaxhighlight>


* Boolean einschalten (persistent):
* Boolean einschalten (persistent):
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''setsebool -P ftpd_anon_write on''
setsebool -P ftpd_anon_write on
</syntaxhighlight>


* Wenn mehrere Booleans gesetzt werden, müssen sie in der Form ''parameter=wert'' angegeben werden:
* 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>


''setsebool ftpd_anon_write=on ftpd_use_passive_mode=on''
=== semanage boolean ===
 
=== ''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.
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):
* Alle Booleans mit Beschreibung und Werten anzeigen (aktuell und Standard):
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''semanage boolean -l''
semanage boolean -l
</syntaxhighlight>


* Beschreibung eines bestimmten Boolean suchen:
* Beschreibung eines bestimmten Boolean suchen:
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''semanage boolean -l | grep httpd''
semanage boolean -l | grep httpd
</syntaxhighlight>


* Zustand eines Boolean ändern (funktional ähnlich zu ''setsebool -P''):
* Zustand eines Boolean ändern (funktional ähnlich zu ''setsebool -P''):
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''semanage boolean -m --on ftpd_anon_write''
semanage boolean -m --on ftpd_anon_write
</syntaxhighlight>


== Praktisches Beispiel ==
== Praktisches Beispiel ==
Zeile 53: Zeile 61:


* Vorbereitung der Umgebung:
* Vorbereitung der Umgebung:
 
<syntaxhighlight lang="bash" highlight="" copy line>
''mkdir -p /var/www/html/nfs_test
mkdir -p /var/www/html/nfs_test
echo "Hello from NFS" > /var/www/html/nfs_test/index.html
echo "Hello from NFS" > /var/www/html/nfs_test/index.html
chcon -R -t nfs_t /var/www/html/nfs_test
chcon -R -t nfs_t /var/www/html/nfs_test
setenforce 1 # Enforcing-Modus aktivieren''
setenforce 1 # Enforcing-Modus aktivieren
</syntaxhighlight>


* Versuch, die Seite aus dem NFS-Verzeichnis mit ''curl'' abzurufen:
* Versuch, die Seite aus dem NFS-Verzeichnis mit ''curl'' abzurufen:
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''curl -I <nowiki>http://localhost/nfs_test/index.html</nowiki>''
curl -I http://localhost/nfs_test/index.html
</syntaxhighlight>
Ergebnis:
Ergebnis:
''# curl -I <nowiki>http://localhost/nfs_test/index.html</nowiki>
<syntaxhighlight lang="bash" highlight="" copy line>
HTTP/1.1 403 Forbidden
# curl -I http://localhost/nfs_test/index.html
...''
HTTP/1.1 403 Forbidden
...
</syntaxhighlight>


* Relevante Rechte und zugehörige Booleans prüfen:
* Relevante Rechte und zugehörige Booleans prüfen:
 
<syntaxhighlight lang="bash" highlight="" copy line>
''semanage boolean -l | grep httpd
semanage boolean -l | grep httpd
semanage boolean -l | grep nfs
semanage boolean -l | grep nfs
sesearch -A -s httpd_t -t nfs_t -c file -p read''
sesearch -A -s httpd_t -t nfs_t -c file -p read
</syntaxhighlight>
Mithilfe von ''sesearch'' lässt sich der Lösungsweg bestimmen:
Mithilfe von ''sesearch'' lässt sich der Lösungsweg bestimmen:
''# sesearch -A -s httpd_t -t nfs_t -c file -p read
<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
# sesearch -A -s httpd_t -t nfs_t -c file -p read
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 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 getattr ioctl map open read }; [ httpd_use_nfs && httpd_enable_cgi ]: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 { getattr ioctl lock open read }; [ use_nfs_home_dirs && httpd_enable_homedirs ]: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.
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:
* 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''
getsebool httpd_use_nfs httpd_builtin_scripting
</syntaxhighlight>


* Beide Booleans testweise temporär aktivieren:
* Beide Booleans testweise temporär aktivieren:
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''setsebool httpd_use_nfs=on httpd_builtin_scripting=on''
setsebool httpd_use_nfs=on httpd_builtin_scripting=on
</syntaxhighlight>


* Erneute Prüfung:
* Erneute Prüfung:
 
<syntaxhighlight lang="bash" highlight="1" copy line>
''curl -I <nowiki>http://localhost/nfs_test/index.html</nowiki>''
curl -I http://localhost/nfs_test/index.html
</syntaxhighlight>
Ergebnis:
Ergebnis:
''HTTP/1.1 200 OK
<syntaxhighlight lang="bash" highlight="" copy line>
...''
HTTP/1.1 200 OK
...
</syntaxhighlight>
'''Erfolgreich!'''
'''Erfolgreich!'''


* Wenn das Verhalten den Erwartungen entspricht, können die Änderungen persistent gespeichert werden:
* 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''
setsebool -P httpd_use_nfs=on httpd_builtin_scripting=on
</syntaxhighlight>


==== Auflisten von Booleanen ====
==== Auflisten von Booleanen ====

Version vom 28. März 2026, 12:42 Uhr

Booleane

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 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

Praktisches Beispiel

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:

# curl -I http://localhost/nfs_test/index.html
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:

# sesearch -A -s httpd_t -t nfs_t -c file -p read
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

Auflisten von Booleanen

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

Das folgende Beispiel listet nicht alle Booleans auf, und die Ausgabe wurde der Kürze halber gekürzt

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
Um detailliertere Beschreibungen zu erhalten, installieren Sie das Paket selinux-policy-devel

Die Spalte SELinux-Boolean listet die Namen der Booleans auf

  • Die Spalte Beschreibung gibt an, ob die Booleans aktiviert oder deaktiviert sind und welche Funktion sie haben

Der Befehl getsebool -a listet Boolesche Werte auf, unabhängig davon, ob sie aktiviert oder deaktiviert sind, gibt jedoch keine Beschreibung zu jedem einzelnen

  • Das folgende Beispiel listet nicht alle Booleschen Werte auf
getsebool -a
cvs_read_shadow --> off
daemons_dump_core --> on

Führen Sie den Befehl getsebool ‚‘ boolean-name'‚ aus, um nur den Status des Booleschen Werts ‘'boolean-name aufzulisten

getsebool cvs_read_shadow
cvs_read_shadow --> off

Verwenden Sie eine durch Leerzeichen getrennte Liste, um mehrere Boolesche Werte aufzulisten

getsebool cvs_read_shadow daemons_dump_core
cvs_read_shadow --> off
daemons _dump_core --> on

Konfigurieren von Booleschen Werten

Führen Sie das Dienstprogramm setsebool im Format setsebool ‚'boolean_name‘' on/off aus, um Boolesche Werte zu aktivieren oder zu deaktivieren

Das folgende Beispiel zeigt die Konfiguration des Booleschen Werts httpd_can_network_connect_db

Konfigurieren von Booleschen Werten
  1. 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
getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> off
  1. 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
  1. 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

  1. Diese Änderung bleibt nach einem Neustart nicht erhalten
sudo setsebool -P httpd_can_network_connect_db on

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, 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

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