High Availability lässt sich heute mit günstiger Hardware und einer großen Auswahl an kommerzieller sowie freier Software realisieren. ADMIN erklärt die ... (mehr)

SELinux als Apache-Modul

Ä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« .

Security-Kontext

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

 

comments powered by Disqus

Artikel der Woche

Eigene Registry für Docker-Images

Wer selber Docker-Images herstellt, braucht auch eine eigene Registry. Diese gibt es ebenfalls als Docker-Image, aber nur mit eingeschränkter Funktionalität. Mit einem Auth-Server wird daraus ein brauchbares Repository für Images. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Google+

Ausgabe /2019