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