Hor - stock.adobe.com

SELinux-Befehle für Management und Problemlösungen lernen

SELinux hilft beim sicheren Betrieb von Linux-Servern. Wir haben wichtige Befehle für Problemlösung, Dateimanagement und Statusabfragen für Administratoren zusammengestellt.

Ursprünglich wurde SELinux (Security-Enhanced Linux) von der NSA als ein Satz von Linux-Kernel-Patches entwickelt. Er nutzt Linux-Security-Module, um Zugriffskontrollen innerhalb des Linux-Kernels zu ermöglichen.

Durch Security-Richtlinien definiert SELinux die Zugriffskontrolle für Anwendungen, Prozesse und Dateien. Will eine Anwendung oder ein Prozess auf ein Objekt (wie zum Beispiel eine Datei) zugreifen, dann prüft SELinux den Vorgang via Access Vector Cache. Ist alles in Ordnung, gestattet SELinux Zugriff auf das Objekt. Gibt es ein Problem, verweigert das System den Zugriff.

SELinux ist ein ziemlich komplexes System und kann Linux-Systemadministratoren Probleme bereiten. Die Kenntnis der folgenden Befehle, dürfte Ihnen das Handling aber erheblich erleichtern.

Status von SELinux setzen

Sie sollten auf jeden Fall den Befehl kennen, mit dem Sie den Status von SELinux festlegen können. Mit dem Befehl setenforce ändern Sie den Status von SELinux auf eine der folgenden Varianten:

  • disabled: SELinux ist deaktiviert

  • permissive: SELinux gibt Warnungen aus, ohne Richtlinien anzuwenden

  • enforcing: SELinux setzt die Security-Richtlinien durch

Sie können sich den derzeitigen Status von SELinux auch anzeigen lassen. Das funktioniert mit dem Befehl sudo sestatus.

Die Ausgabe sollte nun folgendermaßen aussehen:

SELInux Status STATUS

Der STATUS ist dabei entweder disabled oder enabled.

In einer weiteren Zeile sollten Sie sehen:

Current mode: MODUS

Anstelle von MODUS sehen Sie an dieser Stelle disabled, permissive oder enforcing.

Der Befehl getenforce ist eine weitere Möglichkeit, den Status von SELinux abzufragen.

Wollen Sie den Status von SELinux auf disabled setzen, dann führen Sie den nachfolgenden Befehl aus:

sudo setenforce disabled

Auf permissive setzen Sie den Status mit diesem Befehl:

sudo setenforce permissive

Mit folgendem Befehl ändern Sie den Status auf enforcing:

sudo setenforce enforcing

Sobald Sie den Status angepasst haben, müssen Sie die Maschine neu starten, damit das System die Änderungen übernimmt.

Bei diesem SELinux-Befehl gibt es allerdings einen Haken: Setzen Sie den Status von SELinux auf disabled, können Sie ihn nur über die Konfigurationsdatei wieder aktivieren. Öffnen Sie die Datei und ändern den Status auf permissive oder enforcing.

Sie bearbeiten die Datei, indem Sie folgenden Befehl ausführen: sudo nano etcselinux/config

Ändern Sie im Anschluss die Zeile

SELINUX=disabled

zu

SELINUX=enforcing

oder

SELINUX=permissive

Danach starten Sie die Maschine neu.

Es gibt gute Gründe, die Option permissive zu nutzen. Ist sie aktiv, dann überwacht SELinux die Prozesse, hindert sie aber nicht am Zugriff auf Dateien und Ordner.

Der Hauptvorteil des Permissive-Modus ist, dass das Betriebssystem Ihnen Hinweise darauf gibt, warum etwas nicht korrekt funktioniert. Ist das der Fall, müssen Sie vielleicht Zugriff auf eine Datei oder ein Verzeichnis erlauben. Dafür sind zwei sehr wichtige Befehle notwendig.

Zugriff auf eine Datei oder einen Ordner gewähren

Auf produktiven Maschinen sollten der Modus von SELinux auf enforcing stehen. Deaktivieren Sie SELinux, dann schalten Sie damit eine wichtige Security-Kontrolle auf dem System ab. SELinux kann jedoch Probleme verursachen, wenn eine Anwendung keinen Zugriff auf eine Datei hat, die eine Anwendung für den Betrieb benötigt.

Nehmen wir an, Sie haben einen Webserver, wollen aber Inhalte von außerhalb des üblichen Ordners /var/www ausliefern. Sie können Apache oder Nginx so konfigurieren, dass ein entsprechender Datentransfer möglich ist. SELinux wird dem Webserver aber den Zugriff auf das Nicht-Standard-Verzeichnis verweigern.

Nehmen wir an, das andere Verzeichnis heißt /srv/www. Das Problem an dieser Stelle ist, dass SELinux nichts von dem alternativen Verzeichnis weiß. Deswegen gibt es kein Zugriffsrecht darauf. Sie wollen SELinux nun anweisen, den Zugriff auf das Verzeichnis /srv/www zu gestatten. Dafür müssen Sie einen entsprechenden SELinux-Befehl ausführen. Sie können semanage wie folgt einsetzen:

sudo semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'

Der oben angegeben Befehl fügt eine neue Context-Datei (mit der Option -a) des Typs httpd_sys_content_t innerhalb des Verzeichnisses /srv/www hinzu.

Danach müssen Sie restorecon ausführen, um den entsprechenden Context im Verzeichnis zu kennzeichnen und zu setzen. Der Befehl legt den Standard-Context für Dateien und Verzeichnisse anhand der SELinux-Richtlinie fest.

Mit nachfolgendem Befehl führen Sie restorecon für /srv/www aus:

sudo restorecon -Rv /srv/www

Sobald das erledigt ist, kann Apache Inhalte aus dem Verzeichnis /srv/www ausliefern, weil der Webserver das Recht hat, httpd_sys_content_t-Dateien zu lesen und /srv/www wurde korrekt gekennzeichnet.

Probleme von SELinux-Dateien überprüfen

SELinux bietet außerdem das Tool fixfiles für die Problemlösung an. Damit können Sie Anwendungsdateien-Context zurücksetzen. Der Befehl fixfiles bietet drei Optionen:

  • check: zeigt alle dateirelevanten Objekte, bei denen Sicherheits-Context nicht übereinstimmt oder falsch zugeordnet ist.

  • restore: kennzeichnet alle dateirelevanten Objekte neu, bei denen Security-Context nicht übereinstimmt oder falsch zugeordnet ist.

  • relabel: erfüllt einen ähnlichen Zweck wie restore, kann aber optional auch Dateien im Verzeichnis /tmp entfernen, bevor die Prüfung stattfindet und die Wiederherstellung durchgeführt wird.

Wollen Sie Ihr System überprüfen, müssen Sie den Befehl fixfiles check ausführen.

Dieser SELinux-Befehl gibt eine ganze Palette von Informationen aus. Wichtig sind für Administratoren vor allem die Would-relabel-Statements und andere Warnungen. Sollten Sie Fehler angezeigt bekommen, können Sie diese mit dem Befehl sudo fixfiles restore reparieren.

Wie lange der Vorgang dauert, hängt davon ab, wie viele Probleme fixfiles findet. Warten Sie, bis der Prozess abgeschlossen ist. Zur Überprüfung führen Sie den Befehl sudo fixfiles abermals aus. Die Warnungen sollten nun nicht mehr auftauchen.

Andere nützliche SELinux-Befehle

chcon: kennzeichnet Datei(en) mit speziellem Sicherheits-Context.

checkpolicy: kompiliert Quellen von Richtlinien in eine binäre Policy-Datei. Der Befehl wird nicht direkt aufgerufen, sondern ein Makefile der Richtlinie ruft sie auf.

newrole: ändert Administratorrollen. Häufig wird der Befehl als newrole -r sysadm_r verwendet, um die sysadm_r-Rolle für die Systemadministration zu übertragen.

getsebool: zeigt die booleschen Bedingungen von SELinux an.

setsebool: setzt die booleschen Bedingungen von SELinux.

Erfahren Sie mehr über Identity and Access Management (IAM)