Linux/SELinux/04 Arbeiten mit SELinux: Unterschied zwischen den Versionen
| Zeile 261: | Zeile 261: | ||
=== Ändern der SELinux-Modi beim Systemstart === | === Ändern der SELinux-Modi beim Systemstart === | ||
[[SELinux/DOC/04 Arbeiten mit SELinux/Ändern der SELinux-Modi beim Systemstart]] | |||
=== Booleane === | === Booleane === | ||
Version vom 23. März 2026, 23:31 Uhr
Arbeiten mit SELinux
Beschreibung
Die folgenden Abschnitte bieten einen Überblick über
- die wichtigsten SELinux-Pakete in Red Hat Enterprise Linux
- die Installation und Aktualisierung von Paketen
- die verwendeten Protokolldateien
- die wichtigste SELinux-Konfigurationsdatei
- das Aktivieren und Deaktivieren von SELinux
- SELinux-Modi
- das Konfigurieren von Booleschen Werten
- das vorübergehende und dauerhafte Ändern von Datei- und Verzeichnis-Labels
- das Überschreiben von Dateisystem-Labels mit dem Befehl mount
- das Einbinden von NFS-Volumes
- sowie das Beibehalten von SELinux-Kontexten beim Kopieren und Archivieren von Dateien und Verzeichnissen
SELinux-Pakete
Bei einer vollständigen Installation von Red Hat Enterprise Linux werden die SELinux-Pakete standardmäßig installiert, sofern sie nicht während der Installation manuell ausgeschlossen werden
- Bei einer Minimalinstallation im Textmodus werden die Pakete policycoreutils-python und policycoreutils-gui standardmäßig nicht installiert
- Außerdem läuft SELinux standardmäßig SELinux im Enforcing-Modus und die SELinux-Targeted-Policy wird verwendet
- Die folgenden SELinux-Pakete sind standardmäßig auf Ihrem System installiert
- policycoreutils stellt Dienstprogramme wie restorecon, secon, setfiles, semodule, load_policy und setsebool für den Betrieb und die Verwaltung von SELinux bereit
- selinux-policy stellt eine grundlegende Verzeichnisstruktur, die Datei selinux-policy.conf und RPM-Makros bereit
- selinux-policy -targeted stellt die SELinux-Targeted-Richtlinie bereit
- libselinux – stellt eine API für SELinux-Anwendungen bereit
- libselinux-utils stellt die Dienstprogramme avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled und setenforce bereit
- libselinux-python stellt Python-Bindungen für die Entwicklung von SELinux-Anwendungen bereit
Die folgenden Pakete sind standardmäßig nicht installiert, können aber optional durch Ausführen des Befehls [[yum install ‚‘<package-name>‚‘]] installiert werden
- selinux-policy-devel stellt Dienstprogramme zum Erstellen einer benutzerdefinierten SELinux-Richtlinie und von Richtlinienmodulen bereit
- selinux-policy-doc enthält Handbuchseiten, die beschreiben, wie SELinux zusammen mit verschiedenen Diensten konfiguriert wird
- selinux-policy-mls enthält die MLS-SELinux-Richtlinie (Multi-Level Security)
- setroubleshoot-server übersetzt Ablehnungsmeldungen, die bei einer Zugriffsverweigerung durch SELinux ausgegeben werden, in detaillierte Beschreibungen, die mit dem ebenfalls in diesem Paket enthaltenen Dienstprogramm sealert angezeigt werden können
- setools-console stellt die Tresys Technology SETools-Distribution bereit, eine Reihe von Dienstprogrammen und Bibliotheken zur Analyse und Abfrage von Richtlinien, zur Überwachung und Berichterstellung von Audit-Protokollen sowie zur Verwaltung von Dateikontexten
- Das Paket setools ist ein Metapaket für SETools
- Das Paket setools-gui stellt die Dienstprogramme apol und seaudit bereit
- Das Paket setools-console stellt die Befehlszeilen-Dienstprogramme sechecker, sediff, seinfo, sesearch und findcon bereit
- Beachten Sie, dass die Pakete setools und setools-gui nur verfügbar sind, wenn der Red Hat Network Optional-Kanal aktiviert ist
- Weitere Informationen finden Sie unter Details zum Abdeckungsumfang
- mcstrans übersetzt Stufen wie s0-s0:c0.c1023 in eine besser lesbare Form wie SystemLow-SystemHigh
- policycoreutils-python bietet Dienstprogramme wie semanage, audit2allow, audit2why und chcat zum Bedienen und Verwalten von SELinux
- policycoreutils-gui stellt system-config-selinux bereit, ein grafisches Dienstprogramm zur Verwaltung von SELinux
Welche Protokolldatei wird verwendet
Unter Red Hat Enterprise Linux sind die Pakete dbus und audit standardmäßig installiert, sofern sie nicht aus der Standard-Paketauswahl entfernt wurden
- Der Setroubleshoot-Server muss über Yum installiert werden (verwenden Sie den Befehl yum install setroubleshoot-server)
Wenn der auditd-Daemon läuft, wird standardmäßig eine SELinux-Ablehnungsmeldung wie die folgende in /var/log/audit/audit.log geschrieben
type=AVC msg=audit (1223024155.684:49)
avc
denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
Außerdem wird eine Meldung ähnlich der folgenden in die Datei /var/log/message geschrieben
7. Mai 18:55:56 localhost setroubleshoot
SELinux verhindert, dass httpd (httpd_t) „getattr“ auf /var/www/html/file1 (samba_share_t) ausführt
- Für vollständige SELinux-Meldungen
führen Sie sealert -l de7e30d6-5488-466d-a606-92c9f40d316d aus
In Red Hat Enterprise Linux 7 läuft setroubleshootd nicht mehr ständig als Dienst
- Es wird jedoch weiterhin zur Analyse der AVC-Meldungen verwendet
- Zwei neue Programme dienen dazu, setroubleshoot bei Bedarf zu starten
- Das Dienstprogramm sedispatch läuft als Teil des audit-Subsystems
- Wenn eine AVC-Ablehnungsmeldung zurückgegeben wird, sendet sedispatch eine Nachricht über dbus
- Diese Nachrichten gehen direkt an setroubleshootd, sofern dieses bereits läuft
- Läuft es nicht, startet sedispatch es automatisch
- Das Dienstprogramm seapplet läuft in der System-Symbolleiste und wartet auf DBus-Meldungen von setroubleshootd
- Es öffnet die Benachrichtigungsblase, in der der Benutzer die AVC-Meldungen einsehen kann
- Daemons automatisch starten
- Um die Daemons auditd und [ [rsyslog]]-Daemons so zu konfigurieren, dass sie beim Booten automatisch starten, geben Sie als Root-Benutzer die folgenden Befehle ein
sudo systemctl enable auditd.service sudo systemctl enable rsyslog.service
- Um sicherzustellen, dass die Daemons aktiviert sind, geben Sie an der Shell-Eingabeaufforderung die folgenden Befehle ein
systemctl is-enabled auditd enabled
systemctl is-enabled rsyslog
enabled
Alternativ können Sie den Befehl systemctl status ‚'service-name‘'.service verwenden und in der Befehlsausgabe nach dem Schlüsselwort enabled suchen, zum Beispiel
systemctl status auditd.service | grep enabled auditd.service – Sicherheitsüberwachungsdienst Geladen geladen (/usr/lib/systemd/system/auditd.service; ‚'enabled‘')
Weitere Informationen darüber, wie der systemd-Daemon Systemdienste verwaltet, finden Sie im Kapitel „Verwaltung von Systemdiensten“ im Systemadministratorhandbuch
Hauptkonfigurationsdatei
Die Datei /etc/selinux/config ist die Hauptkonfigurationsdatei von SELinux
- Sie steuert, ob SELinux aktiviert oder deaktiviert ist und welcher SELinux-Modus sowie welche SELinux-Richtlinie verwendet wird
# Diese Datei steuert den Status von SELinux auf dem System # SELINUX= kann einen dieser drei Werte annehmen # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt # permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen # disabled – Es wird keine SELinux-Richtlinie geladen SELINUX=enforcing # SELINUXTYPE= kann einen dieser beiden Werte annehmen
- targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz SELINUXTYPE=targeted
- [[SELINUX=]]
Die Option [[SELINUX]] legt fest, ob SELinux deaktiviert oder aktiviert ist und in welchem Modus – enforcing oder permissive – es läuft
- Bei Verwendung von SELINUX=enforcing wird die SELinux-Richtlinie durchgesetzt, und SELinux verweigert den Zugriff auf Grundlage der SELinux-Richtlinienregeln
- Verweigerungsmeldungen werden protokolliert
- Bei Verwendung von SELINUX=permissive wird die SELinux-Richtlinie nicht durchgesetzt
- SELinux verweigert keinen Zugriff, aber Verweigerungen werden für Aktionen protokolliert, die verweigert worden wären, wenn SELinux im Durchsetzungsmodus laufen würde
- Bei Verwendung von SELINUX=disabled ist SELinux deaktiviert, das SELinux-Modul ist nicht beim Linux-Kernel registriert und es werden nur DAC-Regeln verwendet
- [[SELINUXTYPE=]]
Die Option SELINUXTYPE legt die zu verwendende SELinux-Richtlinie fest
- Die Targeted-Richtlinie ist die Standardrichtlinie
- Ändern Sie diese Option nur, wenn Sie die MLS-Richtlinie verwenden möchten
- Informationen zum Aktivieren der MLS-Richtlinie finden Sie im Abschnitt „Aktivieren von MLS in SELinux“
Dauerhafte Änderungen an SELinux-Zuständen und -Modi
SELinux kann aktiviert oder deaktiviert werden
- Wenn aktiviert, hat SEL
inux zwei Modi: „enforcing“ und „permissive“
Verwenden Sie die Befehle getenforce oder sestatus, um zu überprüfen, in welchem Modus SELinux läuft
- Der Befehl getenforce gibt Enforcing, Permissive oder [ [Disabled]]
Der Befehl sestatus gibt den SELinux-Status und die verwendete SELinux-Richtlinie zurück sestatus SELinux-Status
enabled
SELinuxfs-Mount
/sys/fs/selinux
SELinux-Stammverzeichnis
/etc/selinux
Name der geladenen Richtlinie
targeted Aktueller Modus enforcing Modus aus Konfigurationsdatei enforcing MLS-Status der Richtlinie enabled Status von deny_unknown in der Richtlinie allowed Maximale Kernel-Richtlinienversion 30
- Hinweis
- Wenn Systeme SELinux im permissiven Modus ausführen, können Benutzer Dateien falsch kennzeichnen
- Dateien, die erstellt wurden, während SELinux deaktiviert war, werden überhaupt nicht gekennzeichnet
- Dieses Verhalten verursacht Probleme beim Wechsel in den enforcing-Modus, da Dateien falsch oder gar nicht gekennzeichnet sind
- Um zu verhindern, dass falsch gekennzeichnete und nicht gekennzeichnete Dateien Probleme verursachen, werden Dateisysteme automatisch neu gekennzeichnet, wenn vom deaktivierten Zustand in den permissiven oder den enforcing-Modus gewechselt wird
SELinux aktivieren
Wenn SELinux aktiviert ist, kann es in einem von zwei Modi ausgeführt werden: enforcing oder permissive
- Die folgenden Abschnitte zeigen, wie Sie dauerhaft in diese Modi wechseln
Beim Aktivieren von SELinux auf Systemen, auf denen es zuvor deaktiviert war, empfiehlt Red Hat, um Probleme wie das Nicht-Booten des Systems oder Prozessfehler zu vermeiden, dieses Verfahren zu befolgen
- Aktivieren Sie SELinux im permissiven Modus
- Weitere Informationen finden Sie im Abschnitt „Permissiver Modus“
- Starten Sie Ihr System neu
- Überprüfen Sie, ob SELinux-Ablehnungsmeldungen vorliegen
- Weitere Informationen finden Sie im Abschnitt „Suchen und Anzeigen von Ablehnungen“
- Wenn keine Ablehnungen vorliegen, wechseln Sie in den Durchsetzungsmodus
- Weitere Informationen finden Sie im Abschnitt „Enforcing-Modus“
Um benutzerdefinierte Anwendungen mit SELinux im Enforcing-Modus auszuführen, wählen Sie eines der folgenden Szenarien
- Führen Sie Ihre Anwendung in der Domäne unconfined_service_t aus
- Weitere Informationen finden Sie im Abschnitt „Unconfined-Prozesse“
- Schreiben Sie eine neue Richtlinie für Ihre Anwendung
- Weitere Informationen finden Sie im Knowledge-Base-Artikel „Writing Custom SELinux Policy“
Permissive-Modus
Wenn SELinux im Permissive-Modus läuft, wird die SELinux-Richtlinie nicht durchgesetzt
- Das System bleibt betriebsbereit und SELinux verweigert keine Vorgänge, sondern protokolliert lediglich AVC-Meldungen, die dann zur Fehlerbehebung, zum Debugging und zur Verbesserung der SELinux-Richtlinie verwendet werden können
- In diesem Fall wird jede AVC-Meldung nur einmal protokolliert
Um den Modus dauerhaft auf „permissive“ umzustellen, befolgen Sie die folgenden Schritte
- Umstellung auf den permissiven Modus
- Bearbeiten Sie die Datei /etc/selinux/config wie folgt
# Diese Datei steuert den Status von SELinux auf dem System # SELINUX= kann einen dieser drei Werte annehmen # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt # permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen # disabled – Es wird keine SELinux-Richtlinie geladen SELINUX=‚‘'permissive # SELINUXTYPE= kann einen dieser beiden Werte annehmen # targeted – Zielprozesse werden geschützt,
- mls – Multi-Level-Security-Schutz
SELINUXTYPE=targeted
- Starten Sie das System neu
sudo reboot
Durchsetzungsmodus
Wenn SELinux im Durchsetzungsmodus läuft, setzt es die SELinux-Richtlinie durch und verweigert den Zugriff auf der Grundlage der SELinux-Richtlinienregeln
- Unter Red Hat Enterprise Linux ist der Durchsetzungsmodus standardmäßig aktiviert, wenn das System ursprünglich mit SELinux
Wenn SELinux deaktiviert wurde, befolgen Sie die nachstehende Vorgehensweise, um den Modus wieder auf „Enforcing“ umzustellen
- Umstellung auf den Enforcing-Modus
Diese Vorgehensweise setzt voraus, dass die Pakete selinux-policy -targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils und policycoreutils-python installiert sind
- Um zu überprüfen, ob die Pakete installiert sind, verwenden Sie den folgenden Befehl
rpm -q ‚'Paketname‘'
- Bearbeiten Sie die Datei /etc/selinux/config wie folgt
# Diese Datei steuert den Status von SELinux auf dem System # SELINUX= kann einen dieser drei Werte annehmen # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt # permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen # disabled – Es wird keine SELinux-Richtlinie geladen SELINUX=‚‘'enforcing
- SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt, # mls – Multi-Level-Security-Schutz SELINUXTYPE=targeted
- Starten Sie das System neu
sudo reboot
Beim nächsten Systemstart kennzeichnet SELinux alle Dateien und Verzeichnisse im System neu und fügt einen SELinux-Kontext für Dateien und Verzeichnisse hinzu, die erstellt wurden, als SELinux deaktiviert war
- Hinweis
- Nach dem Wechsel in den Enforcing-Modus kann SELinux einige Aktionen aufgrund falscher oder fehlender SELinux-Richtlinien verweigern
Um anzuzeigen, welche Aktionen SELinux verweigert, geben Sie als Root den folgenden Befehl ein
sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
Alternativ können Sie, sofern das Paket setroubleshoot-server installiert ist, als root den folgenden Befehl eingeben
sudo grep „SELinux is preventing“ /var/log/messages
Falls SELinux bestimmte Aktionen verweigert, finden Sie Informationen zur Fehlerbehebung in Kapitel 11, „Fehlerbehebung“
Vorübergehende Änderungen der Modi werden in Abschnitt „SELinux-Zustände und -Modi“ behandelt
Deaktivieren von SELinux
Wenn SELinux deaktiviert ist, wird die SELinux-Richtlinie überhaupt nicht geladen; sie wird nicht durchgesetzt und AVC-Meldungen werden nicht protokolliert
- Daher gehen alle in Abschnitt 1.1, „Vorteile des Betriebs von SELinux“, aufgeführten Vorteile des Betriebs von SELinux verloren
- Wichtig
- Red Hat empfiehlt dringend, den permissiven Modus zu verwenden, anstatt SELinux dauerhaft zu deaktivieren
- Weitere Informationen zum permissiven Modus finden Sie im Abschnitt „Permissive Mode“
Um SELinux dauerhaft zu deaktivieren, gehen Sie wie folgt vor
- SELinux deaktivieren
- Konfigurieren Sie SELINUX=disabled in der Datei /etc/selinux/config
# Diese Datei steuert den Status von SELinux auf dem System # SELINUX= kann einen dieser drei Werte annehmen # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt # permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen # disabled – Es wird keine SELinux-Richtlinie geladen SELINUX=‚‘'disabled # SELINUXTYPE= kann einen dieser beiden Werte annehmen # targeted – Zielgerichtete Prozesse werden geschützt, # mls – Multi-Level-Security-Schutz SELINUXTYPE=targeted
- Starten Sie Ihr System neu
Vergewissern Sie sich nach dem Neustart, dass der Befehl getenforce den Wert Disabled zurückgibt
getenforce Disabled
Ändern der SELinux-Modi beim Systemstart
SELinux/DOC/04 Arbeiten mit SELinux/Ändern der SELinux-Modi beim Systemstart
Booleane
SELinux/DOC/04 Arbeiten mit SELinux/Booleane
SELinux-Kontexte – Dateien kennzeichnen
SELinux/DOC/04 Arbeiten mit SELinux/SELinux-Kontexte – Dateien kennzeichnen
Die Typen file_t und default_t
SELinux/DOC/04 Arbeiten mit SELinux/Die Typen file t und default t
Einbinden von Dateisystemen
SELinux/DOC/04 Arbeiten mit SELinux/Einbinden von Dateisystemen
SELinux-Labels beibehalten
SELinux/DOC/04 Arbeiten mit SELinux/SELinux-Labels beibehalten
Tools zur Informationsbeschaffung
SELinux/DOC/04 Arbeiten mit SELinux/Tools zur Informationsbeschaffung
Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen
SELinux/DOC/04 Arbeiten mit SELinux/Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen
Multi-Level Security (MLS)
SELinux/DOC/04 Arbeiten mit SELinux/Multi-Level Security (MLS)
Dateinamenübergang
SELinux/DOC/04 Arbeiten mit SELinux/Dateinamenübergang
Deaktivieren von ptrace()
SELinux/DOC/04 Arbeiten mit SELinux/Deaktivieren von ptrace()
Schutz von Miniaturansichten
SELinux/DOC/04 Arbeiten mit SELinux/Schutz von Miniaturansichten
Fußnoten
- [3] Um vorübergehend zum Standardverhalten zurückzukehren, führen Sie als Linux-Root-Benutzer den Befehl setsebool httpd_can_network_connect_db off aus
- Für Änderungen, die über Neustarts hinweg bestehen bleiben, führen Sie den Befehl setsebool -P httpd_can_network_connect_db off
- [4] Dateien im Verzeichnis /etc/selinux/targeted/contexts/files/ definieren Kontexte für Dateien und Verzeichnisse
- Dateien in diesem Verzeichnis werden von den Dienstprogrammen restorecon und setfiles gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen
- [5] Morris, James. „Filesystem Labeling in SELinux“ http://www.linuxjournal.com/article/7426
- [6] Weitere Informationen zu matchpathcon finden Sie auf der Handbuchseite matchpathcon(8)