SELinux (Security-Enhanced Linux; engl. „sicherheitsverbessertes Linux“) ist eine Erweiterung des Linux-Kernels, die den ersten Versuch darstellt, das FLASK-Konzept („Flux Advanced Security Kernel“) des US-amerikanischen Geheimdienstes NSA umzusetzen. Es implementiert die Zugriffskontrollen auf Ressourcen im Sinne von Mandatory Access Control. SELinux wurde maßgeblich von der NSA und von dem Linux-Distributor Red Hat entwickelt. Unternehmen wie Network Associates, Secure Computing Corporation und Tresys sind bzw. waren ebenfalls an der Arbeit an SELinux beteiligt, besonders Tresys übernahm vermehrt Aufgaben am Projekt.
SELinux ist Open-Source-Software und setzt sich aus einem Kernel-Patch und aus zahlreichen Erweiterungen für Systemprogramme sowie den SELinux-Policies zusammen. Für das Festlegen dieser Regeln, die Zugriffskontrolle auf Ressourcen, bieten einige, nicht alle Linux-Distributionen spezielle SELinux-Policy-Pakete für ihre Distribution an.
Integration in Linux-Kernel und -Distributionen
SELinux ist seit Linux-2.6.x im Kernel integriert. Die Linux-Distribution Fedora (ein durch Red Hat gesponsertes Projekt) war die erste Distribution, die standardmäßig SELinux-Unterstützung mitliefert. Fedora Core 3 und Red Hat Enterprise Linux 4 wurden als erste Distributionen mit voller SELinux-Unterstützung ausgeliefert. Mittlerweile ist es ebenfalls fester Bestandteil von AlmaLinux, Rocky Linux, Oracle Linux sowie CentOS und Hardened Gentoo. Bei Ubuntu, Debian und openSUSE bzw. SLES sind die SELinux-Tools sowie stellenweise auch SELinux-Policies über die Paketverwaltung nachinstallierbar.[1][2] Jedoch kann man nicht immer ausgefeilte Policies wie bei den RHEL-basierten Distributionen erwarten.[3] Die Implementierung für Slackware ist noch in Arbeit. Mit Einführung von Android 4.3 wurde auch offiziell der auf dem Linux-Kernel basierende Android-Kernel um SELinux erweitert.[4] Zuvor haben bereits Hersteller wie HTC und Samsung in ihren Smartphone-Modellen die Kernelerweiterung eingesetzt, um erweiterte Sicherheitsfunktionen zu implementieren.[5]
Ziele
Die beiden Hauptziele von SELinux sind:
- Mandatory Access Control stellt sicher, dass eine Applikation (oder ein Benutzer) sich nicht über administrative Vorgaben hinwegsetzen kann. Ein Beispiel dafür ist, dass eine Applikation anderen Applikationen keinen Zugriff auf ihre Dateien gewähren kann und sie auch nicht ausführbar machen kann.
- Da viele Daemonen als
rootlaufen (oder zumindest starten), möchte man einen Schutzmechanismus haben, über den der root-Benutzer sich nicht hinwegsetzen kann, so dass man wirksam einschränken kann, was ein Prozess tun kann, der alsrootoder mit entsprechenden capabilities läuft.
Technik
SELinux ist ein Linux Security Module (LSM), das heißt, es fügt sich in eine Sicherheitsstruktur des Kernels ein. SELinux läuft gleichzeitig mit kleinen, spezialisierten LSMs (die Beispielausgabe ist von Debian Trixie)
$ cat /sys/kernel/security/lsm lockdown,capability,landlock,yama,selinux,bpf,ipe,ima,evm
aber es kann nicht gleichzeitig mit einem der großen anderen LSMs laufen (AppArmor, Smack, TOMOYO).
SELinux identifiziert die Sicherheitskategorie von Dateien über das geschützte erweiterte Dateiattribut security.selinux (AppArmor identifiziert sie über Pfade). Damit können Dateien im selben Verzeichnis auf einem SELinux-System völlig unterschiedlichen Regeln unterworfen sein, je nachdem, welcher Prozess(-Kontext) sie dort angelegt hat.
geschützte Ressourcen / Aktionen
Die häufigste Prüfung ist die, ob ein Prozess den gewünschten Zugriff (erzeugen, lesen, schreiben, löschen, umbenennen) auf eine Datei bekommt. Aber SELinux schützt nicht nur Dateien:
- SELinux verhindert, dass ein Prozess sich an einen nicht erlaubten TCP-Port bindet oder mit einem nicht erlaubten Port eines anderen Systems verbindet.
- SELinux verhindert, dass ein Prozess sich mit nicht erlaubten IP-Adressen eines anderen Systems verbindet.
- SELinux verhindert, dass ein Prozess einen Wechsel zu einer nicht erlaubten Domain (type des SELinux-Kontexts) durchführt.
- SELinux verhindert, dass ein Benutzer einen Wechsel zu einer nicht erlaubten role durchführt.
- SELinux kann verhindern, dass ein Prozess capabilities (granulare
root-Privilegien) verwendet. - SELinux kontrolliert, welche Prozesse Dateisysteme mounten können.
- SELinux kontrolliert nicht nur den Zugriff auf IP-Adressen und Ports, sondern auch auf Sockets.
Domain / Object
SELinux-Kontext
Kontext anzeigen
grundlegender Kontext: User, Role, Type
erweiterter Kontext: MLS/MCS
Kontext setzen
Policies / Type-Enforcement
Werkzeuge
Neben den offiziellen SELinux-Werkzeugen existieren zahlreiche Werkzeuge, die das Arbeiten mit SELinux erleichtern sollen.
Setroubleshoot benachrichtigt über ein Task-Symbol über durchgesetzte Beschränkungen von Programmen und stellt auf Anfrage zusätzliche Informationen wie auch mögliche Lösungsvorschläge bereit, um das Problem zu beheben. SLIDE ist eine IDE für die Entwicklung der Richtlinie, die in Form einer Eclipse-Erweiterung veröffentlicht wird. Das Programm apol ist für die Analyse von Richtlinien zuständig.
Siehe auch
Weblinks
- SELinux Project (englisch)
- Ehemaliges SELinux Project Wiki im Internet Archive (englisch)
- Ehemalige NSA-Projektseite im Internet Archive (englisch)
- Der Standard: Die NSA und die vermeintliche Linux/Android-Verschwörung
Einzelnachweise
- ↑ SpecSELinux - Ubuntu Wiki. Abgerufen am 6. Januar 2019.
- ↑ HardySELinux - Ubuntu Wiki. Abgerufen am 6. Januar 2019.
- ↑ SUSE Linux Enterprise Server Documentation / Security and Hardening Guide / SELinux / Configuring SELinux. Abgerufen am 7. Februar 2025.
- ↑ Neuerungen von Android 4.3 ( vom 5. August 2013 im Internet Archive)
- ↑ Eike Kuehl: Android: Die NSA ist nicht nur böse. In: Zeit Online. 11. Juli 2013, abgerufen am 26. Juli 2013.