Ähnlich verhält es sich mit dem Apache-Modul Mod-SELinux. Mit ihm ist es möglich, unterschiedliche Webserver-Instanzen mit einem individuellen Security Context zu starten, anstatt für jeden Prozess immer wieder den gleichen Kontext zu verwenden. Welcher Security Context für eine Webserver-Instanz zum Einsatz kommt, hängt nun von dem zugreifenden Benutzer ab.
Das Vorgehen ähnelt dem eines klassischen Shell-Login: Nach erfolgreicher Authentifizierung mit
»login
«
oder
»ssh
«
bekommt die Shell des Benutzers einen Security Context zugewiesen. Der Anwender kann nun, gemäß den in diesem Kontext gestatteten Rechten, auf dem System arbeiten. Will er eine Aktion ausführen, die für seinen Kontext nicht erlaubt ist, verhindert dies SELinux.
Im Fall von Mod-SELinux ist es der Webserver Apache, der als Agent/Proxy für einen zugreifenden Benutzer agiert. Meldet er sich mit seinem Benutzerkonto an, verwendet der Webserver-Prozess den Kontext des Benutzers. Über eine Abfrage des Security-Servers im Kernel wird erkennbar, welche Rechte dieser Prozess hat und auf welche Objekte der Benutzer – über den Webserver als Agent/Proxy – nun Zugriff erhält und auf welche nicht. Wer SE PostgreSQL als Backend für die Webapplikation verwendet, weitet die Zugriffskontrolle sogar auf einzelne Objekte innerhalb der Datenbank aus.
Bevor es an die Konfiguration geht, ist erst einmal das Paket Mod-SELinux zu installieren. Es ist in den Software-Repositories der großen Linux-Distribution standardmäßig enthalten, alternativ finden sich auf der Projektseite
[2]
die Quellen. Nach erfolgreicher Installation liegt auf einem Fedora-11-System die Datei
»mod_SELinux.conf
«
im Verzeichnis
»/etc/httpd/conf.d
«
.
Was ist nun der Security Context für den Benutzer einer Webapplikation? Mod-SELinux bietet hierfür mehrere Möglichkeiten an, die in der Konfigurationsdatei des Moduls genauer beschrieben sind. Zuerst muss der Administrator Apache natürlich mitteilen, für welches Verzeichnis oder welche Location eine Authentifizierung erfolgen soll. Listing 1 zeigt ein solches Beispiel für die Authentifizierung der Benutzer mit Hilfe einer lokalen Datei, die Benutzernamen und die MD5-Passworthashes der Benutzer enthält. Das folgende Kommando nimmt einen User mit MD5-Hash in die Passwortdatei auf:
Listing 1
/etc/httpd/conf.d/mod_SELinux.conf (1)
htpasswd -m /var/www/htpasswd Benutzer
Listing 2
zeigt die weiteren Einstellungen. Die Anweisung
»SELinuxDomainMap
«
bestimmt eine lokale Datei, die jedem Benutzer einen Security Context zuweist, alternativ lässt sich mittels
»SELinuxDomainVal
«
ein Default-Kontext setzen. Eine solche Map-Datei kann wie in
Listing 3
aussehen.
Listing 3
/var/www/mod_SELinux.map
Listing 2
/etc/httpd/conf.d/mod_SELinux.conf (2)
Nach einer erfolgreichen Authentifizierung laufen die Webserver-Prozesse der beiden Benutzeranfragen jeweils in der SELinux-Domäne
»user_webapp_t
«
mit einem MLS-Sensitiviätslevel von
»s0
«
und einer MCS-Kategorie von
»c0
«
(foo) und
»c1
«
(bar). Somit ist ein Zugriff nur auf Objekte möglich, die ebenfalls diesen Kategorien angehören und auf die Domäne
»user_webapp_t
«
zugreifen dürfen. MCS-Kategorien an Datei-Objekten setzt das Tool
»chcat
«
(
Listing 4
).
Listing 4
chcat