Verwalten von SELinux in Oracle Linux

Beschreibt SELinux und bietet Anleitungen zur Administration von SELinux in Oracle Linux.

Die herkömmliche Linux-Sicherheit basiert auf einer DAC-Richtlinie (Discretionary Access Control). Im DAC-Modell der Systemsicherheit basiert der Zugriff auf Ressourcen wie Dateien und Prozesse ausschließlich auf Benutzeridentität und -eigentum. Wenn Malware oder beschädigte Software auf dem System vorhanden ist, kann sie alles mit Dateien und Ressourcen tun, zu denen der Benutzer, der den Prozess gestartet hat, berechtigt ist. Wenn der Benutzer root ist oder die Anwendung mit erhöhten Berechtigungen (setuid oder setgid bis root) ausgeführt wird, hat der Prozess die root-Zugriffskontrolle über das gesamte Dateisystem.

Um dieses Problem zu beheben, hat die National Security Agency Security Enhanced Linux (SELinux) entwickelt, um eine größere Kontrolle über Dateien, Prozesse, Benutzer und Anwendungen im Linux-Betriebssystem zu bieten. Die SELinux-Erweiterung für den Linux-Kernel implementiert die Mandatory Access Control (MAC)-Richtlinie, mit der Sie eine Sicherheitsrichtlinie definieren können, die granulare Berechtigungen für alle Benutzer, Programme, Prozesse, Dateien und Geräte konfiguriert. Die Zugriffskontrollentscheidungen des Kernels basieren darauf, wie sensibel die Ressourcen aus Sicherheitsgründen sind, und nicht nur auf der authentifizierten Benutzeridentität.

Wenn ein sicherheitsrelevanter Zugriff erfolgt, z. B. wenn ein Prozess eine Datei öffnet, fängt SELinux den Vorgang im Kernel ab. Wenn eine MAC-Richtlinienregel den Vorgang zulässt, wird der Vorgang fortgesetzt. Andernfalls blockiert SELinux den Vorgang und gibt einen Fehler an den Prozess zurück. Der Kernel prüft und erzwingt DAC-Richtlinienregeln vor MAC-Regeln, sodass er die SELinux-Richtlinienregeln nicht überprüft, wenn DAC-Regeln den Zugriff auf eine Ressource bereits verweigert haben.

SELinux-Packagebeschreibungen

SELinux enthält mehrere Packages, von denen jedes bestimmte Utilitys enthält, mit denen Sie SELinux auf Oracle Linux-Systemen verwalten können. Einige Pakete werden standardmäßig installiert, während andere Pakete optional sind.

In der folgenden Tabelle werden die SELinux-Packages aufgeführt, die standardmäßig mit Oracle Linux installiert sind.

Paket

Beschreibung

policycoreutils

Stellt Utilitys wie load_policy, restorecon, secon, setfiles, semodule, sestatus und setsebool zum Betreiben und Verwalten von SELinux bereit.

libselinux

Stellt die API bereit, mit der SELinux-Anwendungen Prozess- und Dateisicherheitskontexte abrufen und festlegen sowie Sicherheits-Policy-Entscheidungen abrufen.

python3-libselinux

Enthält Python-Bindings zur Entwicklung von SELinux-Anwendungen.

selinux-policy

Stellt die SELinux-Referenzrichtlinie bereit, die als Grundlage für andere Policys verwendet wird, wie z. B. die SELinux-Zielrichtlinie.

selinux-policy-targeted

Stellt die SELinux-Zielrichtlinie bereit, in der Objekte außerhalb der Zieldomains unter DAC ausgeführt werden.

libselinux-utils

Stellt die Utilitys avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled und setenforce bereit.

In der folgenden Tabelle sind nützliche SELinux-Packages aufgeführt, die nicht standardmäßig installiert sind. Installieren Sie alle erforderlichen Packages mit dem Befehl dnf.

Paket

Beschreibung

mcstrans

Übersetzt SELinux-Ebenen wie s0-s0:c0.c1023 in ein einfacher lesbares Formular wie SystemLow-SystemHigh.

policycoreutils-python-utils

Stellt Python-Utilitys für den Betrieb von SELinux bereit, wie audit2allow, audit2why, chcat und semanage.

policycoreutils-sandbox

Bietet das Sandbox-Utility zum Erstellen von SELinux-Sandboxes, um Befehle in einer eng begrenzten SELinux-Domain auszuführen.

selinux-policy-mls

Bietet eine strenge Multi-Level Security-(MLS-)Policy als Alternative zur SELinux-Ziel-Policy.

selinux-policy-doc Stellt manuelle Seiten für viele SELinux-Richtlinienelemente bereit.

setroubleshoot

Ermöglicht die Anzeige von setroubleshoot-server-Nachrichten mit dem Befehl sealert.

setroubleshoot-server

Übersetzt Zugriffsverweigerungsmeldungen aus SELinux in detaillierte Beschreibungen, die Sie mit dem Befehl sealert in der Befehlszeile anzeigen können.

setools-console

Bietet die Verteilung von Tools und Librarys von Tresys Technology SETools, mit denen Sie Policys analysieren und abfragen, Auditlogs überwachen und melden sowie Dateikontext verwalten können.

Weitere Informationen finden Sie im SELinux Project Wiki für die Community-Dokumentation und auf den Handbuchseiten selinux(8) und anderen SELinux-Befehlen.

SELinux-Dienstprogramme

In der folgenden Tabelle werden die wichtigsten Serviceprogramme beschrieben, mit denen Sie SELinux verwalten können, sowie die darin enthaltenen Packages.

Versorgungsunternehmen

Paket

Beschreibung

audit2allow

policycoreutils-python-utils

Generiert allow-Regeln der SELinux-Policy (und optionale dontaudit-Einträge) aus Auditlogs abgelehnter Vorgänge.

audit2why

policycoreutils-python-utils

Analysiert Denial Logs, um zu erklären, warum der Zugriff blockiert wurde, und empfiehlt relevante SELinux-Anpassungen.

avcstat

libselinux-utils

Zeigt Statistiken für den SELinux Access Vector Cache (AVC) an.

chcat

policycoreutils-python-utils

Ändert oder entfernt die Sicherheitskategorie für eine Datei oder einen Benutzer.

chcon

coreutils

Ändert den SELinux-Kontext der Dateien und Verzeichnisse.

fixfiles

policycoreutils

Behebt den Sicherheitskontext für Dateisysteme.

getenforce

libselinux-utils

Meldet den aktuellen SELinux-Modus.

getsebool

libselinux-utils

Meldet boolesche SELinux-Werte.

load_policy

policycoreutils

Lädt eine neue SELinux-Richtlinie in den Kernel.

matchpathcon

libselinux-utils

Fragt die Systemrichtlinie ab und zeigt den Standardsicherheitskontext an, der mit dem Dateipfad verknüpft ist.

restorecon

policycoreutils

Setzt den Sicherheitskontext für eine oder mehrere Dateien zurück.

restorecond

policycoreutils

Daemon, der das Erstellen von Datei überwacht und den Standarddateikontext festlegt.

runcon

coreutils

Führt einen Befehl im angegebenen Kontext aus.

sandbox

policycoreutils-sandbox

Führt einen Befehl in einer SELinux-Sandbox aus.

sealert

setroubleshoot-server, setroubleshoot

fungiert als Benutzeroberfläche für das setroubleshoot-System zur Diagnose und Erläuterung von SELinux AVC-Ablehnungen und gibt Empfehlungen zur Verhinderung solcher Ablehnungen.

sechecker

setools-console

Prüft die SELinux-Policys.

secon

policycoreutils

Zeigt den SELinux-Kontext aus einer Datei, einem Programm oder der Benutzereingabe an.

sediff

setools-console

Vergleicht SELinux-Policys.

seinfo

setools-console

Fragt SELinux-Policys ab.

selinuxconlist

libselinux-utils

Zeigt alle SELinux-Kontexte an, die von einem Benutzer erreichbar sind.

selinuxdefcon

libselinux-utils

Zeigt den SELinux-Standardkontext für einen Benutzer an.

selinuxenabled

libselinux-utils

Gibt an, ob SELinux aktiviert ist.

semanage

policycoreutils-python-utils

Verwaltet SELinux-Policys.

semodule

policycoreutils

Verwaltet SELinux-Policy-Module.

semodule_deps

policycoreutils

Zeigt die Abhängigkeiten zwischen SELinux-Policy-Packages an.

semodule_expand

policycoreutils

Erweitert ein SELinux Policy-Modulpackage.

semodule_link

policycoreutils

Verknüpft SELinux Policy Module-Packages.

semodule_package

policycoreutils

Erstellt ein SELinux Policy-Modulpackage.

sesearch

setools-console

Fragt SELinux-Policys ab.

sestatus

policycoreutils

Zeigt den SELinux-Modus und die verwendete SELinux-Policy an.

setenforce

libselinux-utils

Ändert den SELinux-Modus.

setsebool

policycoreutils

Legt boolesche SELinux-Werte fest.

setfiles

policycoreutils

Legt den Sicherheitskontext für eine oder mehrere Dateien fest.

SELinux-Modi festlegen

SELinux wird im enforcing- oder permissive-Modus ausgeführt:

enforcing

Der Kernel verweigert den Zugriff auf Benutzer und Programme, wenn ihnen keine Berechtigungen durch SELinux-Sicherheitsrichtlinienregeln erteilt wurden. Alle Ablehnungsmeldungen werden als Ablehnungen von AVC (Access Vector Cache) protokolliert. Dies ist der Standardmodus.

permissive

Der Kernel erzwingt keine Sicherheitsrichtlinienregeln, aber SELinux sendet Denial-Meldungen an eine Logdatei. Auf diese Weise können Sie sehen, welche Aktionen abgelehnt werden, wenn SELinux im enforcing-Modus ausgeführt wird. In diesem Modus können Sie SELinux effektiv in einem System implementieren.

Um den aktuellen SELinux-Modus anzuzeigen, führen Sie den folgenden Befehl aus:

getenforce

Um den aktuellen Modus auf enforcing zu setzen, führen Sie den folgenden Befehl aus:

sudo setenforce enforcing

Um den aktuellen Modus auf permissive zu setzen, führen Sie den folgenden Befehl aus:

sudo setenforce permissive
Hinweis

Der Wert, den Sie für einen Modus mit setenforce festlegen, wird nach einem Neustart nicht beibehalten. Um den SELinux-Standardmodus zu konfigurieren, bearbeiten Sie die Konfigurationsdatei für SELinux, /etc/selinux/config, und setzen Sie den Wert der Direktive SELINUX auf enforcing oder permissive.

SELinux deaktivieren

Sie können SELinux vollständig deaktivieren, indem Sie den Kernel-Parameter selinux auf null setzen.

Wichtig

Oracle empfiehlt nicht, SELinux in Produktionssystemen zu deaktivieren. Verwenden Sie stattdessen den Modus permissive.

  1. Legen Sie den erforderlichen Kernel-Parameter fest.

    Verwenden Sie das Utility grubby, um den Parameter selinux auf null zu setzen:

    sudo grubby --update-kernel ALL --args selinux=0
  2. Starten Sie das System neu.
  3. Stellen Sie sicher, dass SELinux deaktiviert ist.

    Führen Sie den Befehl getenforce aus, und prüfen Sie, ob die Ausgabe Disabled lautet:

    getenforce
    Disabled
  4. (Optional) SELinux erneut aktivieren

    Um SELinux wieder zu aktivieren, geben Sie den folgenden Befehl ein, und starten Sie das System neu:

    sudo grubby --update-kernel ALL --remove-args selinux

Policy-Dokumentation installieren

SELinux ist komplex, mit vielen Optionen für die Konfiguration des Zugriffs mithilfe von Policys. Ausführliche Informationen zu den verfügbaren Policys erhalten Sie auf den manuellen Seiten des Packages selinux-policy-doc. Diese Aufgabe zeigt Ihnen, wie Sie auf diese Informationen zugreifen.

Die Richtliniendokumentation enthält auch Informationen zu Benutzern und Rollen. Beispiel: Sie können mehr über den nicht privilegierten user_u-Benutzer von SELinux und die Rolle user_r auf der Manpage user_selinux(8) lesen. In der Policy-Dokumentation werden die Einschränkungen beschrieben, die für verschiedene Sicherheitskontexte gelten, und welche booleschen Optionen zur Anpassung der Policy für eine Umgebung verfügbar sind.

  1. Installieren Sie das Paket:
    sudo dnf install -y selinux-policy-doc
  2. Manuelle Seitendatenbank aktualisieren:
    sudo mandb
  3. Durchsuchen Sie die Handbuchseiten der SELinux-Richtlinie. Um eine vollständige Liste der gesamten manuellen SELinux-Dokumentation zu erhalten, führen Sie den folgenden Befehl aus:
    man -k _selinux