Linux/SELinux/04/06 Booleane
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
- 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, 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