Entwicklung

Wer sich nicht nur passiv mit der SE-Linux-Policy auseinandersetzten, sondern aktiv ins Geschehen eingreifen möchte, dem stehen hierfür unter Fedora 8 einige Tools zur Verfügung. So lässt sich beispielsweise die binäre Policy mittels »semanage« "on the Fly" modifizieren, ohne das hierfür die Sourcen notwendig sind. Natürlich sind nicht alle Eigenschaften auf diese Weise veränderbar, aber für einfache Änderungen reicht es allemal. Ein weiteres praktisches Beispiel soll im Folgenden die Anwendung demonstrieren.

Die SELinux-Policy erlaubt dem Apache-Webserver nur, sich an bestimmte Netzwerkports zu binden. Diese Ports werden in der Policy mit dem SELinux Typen »http_port_t« versehen. Ein Aufruf von »semanage« zeigt an, welche Ports über ein solches Label verfügen:

# semanage port -l | grep http_port_t
tcp      80, 443, 488, 8008, 8009

Möchte der Administrator nun einen neuen Port mit diesem Label versehen, so muss er »semanage« wie folgt aufrufen:

semanage port -a -t http_port_t -p tcp 777

Dieser Befehl versieht den TCP-Port 777 mit dem Label »httpd_port_t« . Das bestätigt der erneute Aufruf von »semanage« :

# semanage port -l |grep http_port_t
tcp      777, 80, 443, 488, 8008, 8009

Sucht der Admin mittels »apol« die Policy nach einer passenden Regel ab, wird er schnell fündig:

allow httpd_t http_port_t : tcp_socket↩
 { name_bind name_connect };

Die Regel gestattet Prozessen in der »httpd_t« -Domäne den Zugriff auf alle Netzworkports, die über das Label »http_port_t« verfügen, jetzt also 777, 80, 443, 488, 8008, und 8009.

Wer noch einen Schritt weiter gehen möchte und komplett neue Module erzeugen möchte, dem stehen mit »system-config-selinux« und »policygentool« zwei Tools zur Verfügung. »polciygentool« ist Teil des RPM »selinux-policy-devel« und befindet sich im Ordner »/usr/share/selinux/devel« . Es hilft beim Erzeugen der notwendigen Dateien, aus denen sich dann schließlich ein binäres Policy-Modul wird. Da eine Beschreibung aller einzelnen Schritte in dickes Buch füllen würde, hier nur ein grober Überblick der notwendigen Anweisungen. Ein ausführliches Tutorial zum Thema SE-Linux-Policy-Development gibt [2].

Zuerst ruft der Admin das Tool mit dem Namen der zu schützenden Applikation und dem Namen des neu zu erstellenden Policy-Moduls auf:

./policygentool foo /usr/bin/foo

Es stellt daraufhin einige Fragen bezüglich der Applikation, beispielsweise ob ein Init-Skript zur Verfügung steht, wo die Log-Dateien liegen und so weiter. Hat der Anwender alle Fragen beantwortet, erzeugt »policygentool« drei Dateien »foo.fc« , »foo.if« und »foo.te« . Hierbei handelt es sich um eine File-Context-, eine Type-Enforcement- und Interface-Datei. In der File-Context-Datei kann der Admin nun alle Dateien die zur Applikation gehören mit einem SELinux-Label verknüfen, in der Type-Enforcement-Datei sind die entsprechnenden Regel-Anweisungen aufzuführen, also was die Applikation alles darf. Die Interface-Datei stellt anderen Policy-Modulen Makros zur Verfügung.

Hat der Admin die Dateien entsprechend angepasst, kann er im Anschluss das eigentliche Policy-Modul wie folgt erzeugen:

make -f /usr/share/selinux/devel/Makefile

Anschließend findet sich die neue Datei »foo.pp« im aktuellen Verzeichnis, die der Admin mit »semodule -i foo.pp« in den Security-Server des Kernels laden kann.

Wem dieser ganzer Prozess zu aufwendig ist, der kann mittels »system-config-selinux« natürlich auch mit dem grafischen Frontend neue Policy-Module erzeugen. Unter [3] findet sich auch hierfür ein sehr ausfürliches Tutorial.

Abbildung 7: Mit

Fazit

SELinux stellt eine sinnvolle Sicherheitserweiterung aktueller Linux-Installationen dar. Einmal aktiviert arbeitet SELinux fast transparent im Hintergrund und überwacht das laufende System – sofern der Distributor entsprechende Vorarbeit geleistet hat und eine praxistaugliche Policy mitliefert. Fedora ist hier im Moment federführend.

Auch im Bereich Usability hat sich einiges getan, so sind SELinux-Logs dank dem »setroubleshootd« mittlerweile besser lesbar als früher. Selbst ungeübte Anwender können eigene Policy-Module, mit denen sich neue Programme unter das Schutzschild von SE Linux stellen lassen, mit Hilfe von »system-config-selinux« erstellen.

Infos

  1. NSA SELinux Website: http://www.nsa.gov/selinux
  2. Thorsten Scherf, SELinux-Tutorial I-III, Gut bewacht: Mandatory Access Control für Linux-Systeme, iX 8/2006-10/2006
  3. Dan Walsh, A step-by-step guide to building a new Policy Module, http://www.redhatmagazine.com/2007/08/21/a-step-by-step-guide-to-building-a-new-selinux-policy-module
  4. Russell Coker, SELinux Play-Machines: http://www.coker.com.au/selinux/play.html
  5. Dan Walsh, Creating a Kiosk Account: http://danwalsh.livejournal.com/13376.html
comments powered by Disqus
Mehr zum Thema

SELinux-Policy mit udica anpassen

Mit der steigenden Anzahl von produktiven Anwendungen, die in Containern ausgeführt werden, rückt das Thema Sicherheit weiter in den Fokus. Mithilfe von SELinux erhält ein Container nur auf ganz bestimmte Ressourcen Zugriff. Das Tool udica hilft dabei, die SELinux-Policy an die eigenen Bedürfnisse anzupassen. Wie Sie dieses Werkzeug am einfachsten einsetzen, zeigt Ihnen unser Open-Source-Tipp.

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

Ausgabe /2022