SElinux Boolsche Variablen
Wenn SELinux allgemein eingesetzt werden soll, müssen einfache
Änderungen an der Richtlinie leicht durch den Administrator
durchzuführen sein. Obwohl sich viele Linux-Systeme gleichen, ist es
doch so, dass die eingesetzten Applikationen sich im Detail doch
unterscheiden.
Ein Beispiel sind zwei Linux-Systeme, die als Webserver
eingesetzt werden. Ein Apache Webserver bietet auch die Heimatverzeichnisse der
Benutzer an, während der zweite ein Content-Management-System mit
einer MySQL-Datenbank im Hintergrund betreibt. Während der erste
Zugriff auf die Heimatverzeichnisse der Benutzer benötigt, muss der
zweite Netzwerkverbindungen zur MySQL-Datenbank aufbauen
dürfen.
Es wäre nun unsinnig, eine SELinux-Richtlinie zu erzeugen, die alle
diese Zugriffe erlaubt. Diese Richtlinie wäre zu löchrig. Daher wählten
die SELinux Entwickler einen anderen Weg und haben diese Zugriffe in
Ihrer Richtlinie vorgesehen und Boolsche Variablen eingeführt, über
die Sie die entsprechenden Regeln fein granuliert an- und abschalten
können.
In diesem Kapitel werde ich Ihnen zeigen, wie Sie diese boolschen
Variablen nutzen und konfigurieren. Die Verwendung der boolschen
Variablen in eigenen Richtlinien wird in Kapitel
33 besprochen.
Zunächst sollten Sie sich einen Überblick verschaffen, welche
boolschen Variablen Ihr System unterstützt. Dies hängt von der
eingesetzten Richtlinie ab und kann sich daher auch bei einem Update
der Richtlinie ändern.
Der Befehl, mit dem Sie die boolschen Variablen und ihren aktuellen
Wert anzeigen können, lautet getsebool. Mit der Option -a zeigt er alle Variablen an:
[root@supergrobi ~]# getsebool -a
allow_cvs_read_shadow --> off
allow_execheap --> off
allow_execmem --> off
allow_execmod --> off
allow_execstack --> off
allow_ftpd_anon_write --> off
allow_gpg_execstack --> off
allow_gssd_read_tmp --> on
...
allow_httpd_anon_write --> off
allow_httpd_apcupsd_cgi_script_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
...
Einige dieser Variablen sind in einzelnen Manpages erläutert. So
existiert eine Manpage httpd_selinux(8), welche die SELinux
Policy für den Apache Webserver einschließlich der hier wichtigen boolschen Variablen
erläutert. Da diese Manpages leider nicht immer vollständig sind und
auch nicht alle boolschen Variablen in Manpages erläutert werden,
werde ich zunächst die aktuell in Fedora Core 5 vorhanden Variablen erläutern.
- allow_cvs_read_shadow
- Diese Variable entscheidet, ob
der CVS-Dienst die Datei /etc/shadow lesen darf, um Benutzer
zu authentifizieren.
- allow_execheap
- Hiermit entscheiden Sie, ob Prozesse
Code auf dem Heap ausführen dürfen.
- allow_execmem
- Hiermit entscheiden Sie, ob Prozesse
Speicher, der ursprünglich zur Speicherung von Daten genutzt wurde, als Code ausführen dürfen. Dies ist bei neu
generiertem Code durch die Applikation der Fall.
- allow_execmod
- Hiermit entscheiden Sie, ob im Speicher
geladene (mmapped) modifizierte Dateien ausgeführt werden dürfen.
- allow_execstack
- Hiermit entscheiden Sie, ob Daten auf
dem Stapel ausgeführt werden dürfen (benötigt auch allow_execmem).
- allow_ftpd_anon_write
- Hiermit entscheiden Sie, ob die
Policy dem FTP-Server Schreibrechte an den öffentlichen Dateien
einräumt. Als öffentliche Dateien werden Dateien mit dem Typ
public_content_t und public_content_rw_t bezeichnet. Wenn Sie möchten, dass der FTP-Server die Daten mit dem
zweiten Typ schreiben darf, müssen Sie diese Variable setzen.
- allow_gpg_execstack
- Diese Variable erlaubt spezifisch
GnuPG-Domäne das Ausführen von Code auf dem Stack.
- allow_gssd_read_tmp -> on
- Diese Variable erlaubt dem
rpc.gssd-Daemon das Lesen der temporären Verzeichnisse.
- allow_httpd_anon_write
- Hiermit erlauben Sie dem
Apache die Modifikation der öffentlichen Dateien (siehe allow_ftpd_anon_write).
- allow_httpd_staff_script_anon_write
- Hiermit
verwalten Sie das entsprechende Recht für Skripte in der httpd_staff-Domäne.
- allow_httpd_sys_script_anon_write
- Hiermit
verwalten Sie das entsprechende Recht für Skripte in der httpd_sys-Domäne.
- allow_httpd_sysadm_script_anon_write
- Hiermit
verwalten Sie das entsprechende Recht für Skripte in der httpd_sysadm-Domäne.
- allow_httpd_user_script_anon_write
- Hiermit
verwalten Sie das entsprechende Recht für Skripte in der httpd_user-Domäne.
- allow_java_execstack
- Dies erlaubt der Java Virtual
Machine das Ausführen von Code auf dem Stack. Die
Java-Virtual-Machine benötigt diese Funktion unter Umständen.
- allow_kerberos
- Dies erlaubt dem System für die
Authentifizierung Kerberos einzusetzen.
- allow_ptrace
- Hiermit erlauben Sie auf dem System die
Verwendung von ptrace zur Fehlersuche.
- allow_rsync_anon_write
- Dies erlaubt dem Rsync-Daemon
die öffentlichen Dateien zu lesen (siehe allow_ftpd_anon_write).
- allow_saslauthd_read_shadow
- Dies erlaubt dem
Saslauthd-Daemon die Datei /etc/shadow zu lesen.
- allow_smbd_anon_write
- Mit dieser Variable darf der
Samba-Dienst die öffentlichen Dateien lesen (siehe allow_ftpd_anon_write).
- allow_ssh_keysign
- Diese Variable erlaubt die
Authentifizierung bei der SSH mit Public Keys.
- allow_user_mysql_connect
- Diese Variable erlaubt den
Benutzer, eine Verbindung zum Mysql-DBMS aufzubauen.
- allow_write_xshm
- Diese Variable erlaubt das Schreiben
des gemeinsam genutzten Speichers des X-Servers (X-Server shared memory).
- allow_ypbind
- Dies erlaubt es dem System zur
Authentifizierung einen NIS-Server zu verwenden.
- cdrecord_read_content
- Dies erlaubt es dem Befehl
cdrecord verschiedenste Dateien zu lesen.
- cron_can_relabel
- Hiermit darf der Cron-Daemon Dateien
einen neuen Security-Context zuweisen.
- fcron_crond
- Diese Variable erweitert die Regeln für den
Cron-Daemon, so dass auch der
Fcron-Daemon
funktioniert.
- ftp_home_dir
- Hier entscheiden Sie, ob der FTP-Daemon
Benutzerverzeichnisse lesen und schreiben darf.
- ftpd_is_daemon
- Diese Variable erlaubt den Betrieb des
FTP-Daemons ohne Inetd.
- httpd_builtin_scripting
- Diese Variable erlaubt dem
Webserver die Verwendung von eingebauten Skriptsprachen
(mod_php, mod_perl etc.).
- httpd_can_network_connect
- Diese Variable erlaubt dem
Webserver den Aufbau von Netzwerkverbindungen.
- httpd_can_network_connect_db
- Hiermit darf der
Webserver Netzwerkverbindungen zu MySQL und PostgreSQL-DBMS aufbauen.
- httpd_can_network_relay
- Der Apache darf
Netzwerkverbindungen weiterleiten.
- httpd_enable_cgi
- Diese Variable aktiviert die Regeln,
die CGI-Programme erlauben.
- httpd_enable_ftp_server
- Diese Variable erlaubt dem
Webserver die Bindung auf dem FTP-Port.
- httpd_enable_homedirs
- Diese Variable erlaubt dem
Webserver den Zugriff auf die Heimatverzeichnisse der Benutzer.
- httpd_ssi_exec
- Mit dieser Variable werden Server Side
Includes in der httpd_script_t-Domäne ausgeführt.
- httpd_tty_comm
- Mit dieser Variable, darf der Webserver
mit dem Terminal kommunizieren, von dem er aufgerufen wurde.
- httpd_unified
- Mit dieser Variable werden CGI-Skripte in
der httpd_t-Domäne gestartet.
- named_write_master_zones
- Diese Variable erlaubt es
dem Bind-Nameserver, die Masterzonen zu verändern. Dies wird bei
dynamischen DNS benötigt.
- nfs_export_all_ro
- Diese Variable erzwingt den
read-only Export der Dateisysteme durch den NFS-Server.
- nfs_export_all_rw
- Diese Variable erlaubt es dem
NFS-Server Verzeichnisse auch read/write zu exportieren.
- pppd_can_insmod
- Mit dieser Variable erlauben Sie dem
PPP-Daemon notwendige Kernelmodule nachzuladen.
- pppd_for_user
- Diese Variable erlaubt es normalen
Benutzern, den PPP-Daemon zu verwenden.
- read_default_t
- Diese Variable erlaubt das Lesen von
Dateien mit dem default_t.
- read_untrusted_content
- Diese Variable erlaubt das
Lesen von Dateien aus unbekannten Quellen (Internet). Ansonsten
müssen die Dateien zunächst umgelabelt werden.
- run_ssh_inetd
- Hiermit darf der SSH-Daemon über den
Inetd gestartet werden.
- samba_enable_home_dirs
- Diese Variabel erlaubt es dem
Samba-Dienst auf die Heimatverzeichnisse der Benutzer zuzugreifen.
- secure_mode
- Ist diese Variable gesetzt, dürfen
Programme wie newrole nicht mehr in administrative Domänen wechseln.
- secure_mode_insmod
- Ein Wechsel in die Domäne
insmod ist nicht mehr erlaubt. Module können nicht mehr
geladen werden.
- secure_mode_policyload
- Wurde diese Variable gesetzt,
ist ein Reload der Policy, ein Ändern der boolschen Variablen und das
Deaktivieren von SELinux erst durch einen Reboot möglich.
- spamassasin_can_network
- Diese Variable ist aus
historischen Gründen erforderlich.
- spamassassin_can_network
- SpamAssassin darf
Netzwerkverbindungen zu DNS-Server, etc. aufbauen.
- squid_connect_any
- Hiermit darf der Squid sich mit
jedem beliebigen Port verbinden. Ist die Variable nicht gesetzt,
beschränkt sich das auf die HTTP-, HTTPS, FTP und Gopher-Ports.
- ssh_sysadm_login
- Mit dieser Variable entscheiden Sie,
ob eine Anmeldung per SSH als sysadm_r:sysadm_t möglich ist.
- staff_read_sysadm_file
- Hiermit entscheiden Sie, ob
Personen in der Rolle staff_r Dateien vom Typ
sysadm_t lesen dürfen.
- stunnel_is_daemon
- Diese Variable erlaubt den Betrieb
von stunnel als Daemon.
- use_nfs_home_dirs
- Mit dieser Variable erlauben Sie
den Betrieb der Heimatverzeichnisse über NFS.
- use_samba_home_dirs
- Diese Variable erlaubt analog
Heimatverzeichnisse auf einem Samba-Server.
- user_direct_mouse
- Mit dieser Variable dürfen Benutzer
direkt auf die Maus zugreifen.
- user_dmesg
- Dies erlaubt normalen Benutzern den Befehl
dmesg zu benutzen.
- user_net_control
- Hiermit erlauben Sie es Benutzern,
bestimmte Netzwerkgeräte (USERCTL=true) zu aktivieren.
- user_ping
- Dies erlaubt es einfachen Benutzern, den
Befehl ping zu verwenden.
- user_rw_noexattrfile
- Mit dieser Variable erlauben Sie
einfachen Benutzern, Dateien auf Dateisystemen zu lesen und zu
schreiben, die keine erweiterten Attribute unterstützen. Auf diesen
Dateisystemen kann SELinux keinen Schutz bieten.
- user_rw_usb
- Hiermit erlauben Sie Benutzern das Lesen
und Schreiben von USB-Geräten.
- user_tcp_server
- Hiermit erlauben Sie einfachen
Benutzern das Betreiben von TCP-Netzwerkdiensten. Dies ist
erforderlich zum Beispiel für aktives FTP.
- user_ttyfile_stat
- Hiermit definieren Sie das Verhalten
der Befehle w, who, etc. Die Variable entscheidet, ob
alle Benutzer angezeigt werden können.
- write_untrusted_content
- Diese Variable entscheidet, ob
Applikationen Dateien unbekannter Quelle speichern dürfen. Ist diese
Variable nicht gesetzt, können Daten aus dem Internet nicht
gespeichert werden.
- xdm_sysadm_login
- Mit dieser Variable entscheiden Sie,
ob grafische Anmeldungen als sysadm_r:sysadm_t möglich sind.
Unterabschnitte
Ralf Spenneberg
2007-11-13