|
|
| (64 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
| === Arbeiten mit SELinux ===
| | {{Navigation|Linux/SELinux/03 Default Policy/Benutzer|Linux/SELinux/04/02 Protokolldateien}} |
| Die folgenden Abschnitte bieten einen kurzen Ü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
| | '''Linux/SELinux/04 Arbeiten mit SELinux''' - Arbeiten mit SELinux |
|
| |
|
| === SELinux-Pakete === | | == Beschreibung == |
| 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
| | {| class="table table-striped table-hover options big col1center" |
| * Bei einer Minimalinstallation im Textmodus werden die Pakete policycoreutils-python und policycoreutils-gui standardmäßig nicht installiert
| | ! Nummer !! Kapitel !! Beschreibung |
| * 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
| | | 04/02 |
| * policycoreutils stellt Dienstprogramme wie [[restorecon]], [[secon]], [[setfiles]], [[semodule]], [[load_policy]] und [[setsebool]] für den Betrieb und die Verwaltung von SELinux bereit
| | | [[Linux/SELinux/04/02 Protokolldateien|Protokolldateien]] |
| * selinux-policy stellt eine grundlegende Verzeichnisstruktur, die Datei [[selinux-policy.conf]] und RPM-Makros bereit
| | | Welche Protokolldatei wird verwendet |
| * selinux-policy -targeted stellt die SELinux-Targeted-Richtlinie bereit
| | |- |
| * libselinux – stellt eine API für SELinux-Anwendungen bereit
| | | 04/03 |
| * libselinux-utils stellt die Dienstprogramme [[avcstat]], [[getenforce]], [[getsebool]], [[matchpathcon]], [[selinuxconlist]], [[selinuxdefcon]], [[selinuxenabled]] und [[setenforce]] bereit
| | | [[Linux/SELinux/04/03 Hauptkonfigurationsdatei|Hauptkonfigurationsdatei]] |
| * libselinux-python stellt Python-Bindungen für die Entwicklung von SELinux-Anwendungen bereit
| | | Hauptkonfigurationsdatei |
| | |- |
| | | 04/04 |
| | | [[Linux/SELinux/04/04 Dauerhafte Änderungen|Dauerhafte Änderungen]] |
| | | Dauerhafte Änderungen an SELinux-Zuständen und -Modi |
| | |- |
| | | 04/05 |
| | | [[Linux/SELinux/04/05 Systemstart|Systemstart]] |
| | | Ändern der SELinux-Modi beim Systemstart |
| | |- |
| | | 04/06 |
| | | [[Linux/SELinux/04/06 Booleane|Booleane]] |
| | | Booleane |
| | |- |
| | | 04/07 |
| | | [[Linux/SELinux/04/07 Kontexte|SELinux-Kontexte]] |
| | | SELinux-Kontexte – Dateien kennzeichnen |
| | |- |
| | | 04/08 |
| | | [[Linux/SELinux/04/08 Typen|Typen]] |
| | | Typen file_t und default_t |
| | |- |
| | | 04/09 |
| | | [[Linux/SELinux/04/09 Dateisysteme|Dateisysteme]] |
| | | Einbinden von Dateisystemen |
| | |- |
| | | 04/10 |
| | | [[Linux/SELinux/04/10 Labels beibehalten|Labels beibehalten]] |
| | | SELinux-Labels beibehalten |
| | |- |
| | | 04/11 |
| | | [[Linux/SELinux/04/11 Informationsbeschaffung|Informationsbeschaffung]] |
| | | Tools zur Informationsbeschaffung |
| | |- |
| | | 04/12 |
| | | [[Linux/SELinux/04/12 Richtlinienmodule|Richtlinienmodule]] |
| | | Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen |
| | |- |
| | | 04/13 |
| | | [[Linux/SELinux/04/13 Multi-Level Security|Multi-Level Security]] |
| | | Multi-Level Security (MLS) |
| | |- |
| | | 04/14 |
| | | [[Linux/SELinux/04/14 Dateinamenübergang|Dateinamenübergang]] |
| | | Dateinamenübergang |
| | |- |
| | | 04/15 |
| | | [[Linux/SELinux/04/15 ptrace|ptrace()]] |
| | | Deaktivieren von ptrace() |
| | |- |
| | | 04/16 |
| | | [[Linux/SELinux/04/16 Miniaturansichten|Miniaturansichten]] |
| | | Schutz von Miniaturansichten |
| | |} |
|
| |
|
| 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 ===
| | {{Navigation|Linux/SELinux/03 Default Policy/Benutzer|Linux/SELinux/04/02 Protokolldateien}} |
| 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
| | [[Kategorie:Linux/SELinux]] |
| type=AVC msg=audit (1223024155.684:49)
| | [[Kategorie:Linux/SELinux/04]] |
| 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
| |
| | |
| ; <nowiki>[[SELINUX=]]</nowiki>
| |
| | |
| Die Option <nowiki>[[SELINUX]]</nowiki> 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
| |
| | |
| ; <nowiki>[[SELINUXTYPE=]]</nowiki>
| |
| 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 ===
| |
| Beim Systemstart können Sie mehrere Kernel-Parameter setzen, um die Funktionsweise von SELinux zu ändern
| |
| enforcing=0
| |
| | |
| Durch das Setzen dieses Parameters startet das System im permissiven Modus, was bei der Fehlerbehebung nützlich ist
| |
| * Die Verwendung des permissiven Modus ist möglicherweise die einzige Möglichkeit, ein Problem zu erkennen, wenn Ihr Dateisystem zu stark beschädigt ist
| |
| * Außerdem erstellt das System im permissiven Modus weiterhin die Labels korrekt
| |
| * Die in diesem Modus erzeugten AVC-Meldungen können sich von denen im Enforcing-Modus unterscheiden
| |
| | |
| Im Permissive-Modus wird nur die erste Verweigerung aus einer Reihe gleicher Verweigerungen gemeldet
| |
| * Im Enforcing-Modus hingegen erhalten Sie möglicherweise eine Verweigerung beim Lesen eines Verzeichnisses, woraufhin eine Anwendung stoppt
| |
| * Im permissiven Modus erhalten Sie dieselbe AVC-Meldung, aber die Anwendung liest weiterhin Dateien in dem Verzeichnis, und Sie erhalten zusätzlich für jede Verweigerung eine AVC
| |
| selinux=0
| |
| | |
| Dieser Parameter bewirkt, dass der Kernel keinen Teil der SELinux-Infrastruktur lädt
| |
| * Die Init-Skripte erkennen, dass das System mit dem Parameter [[selinux=0]] gebootet wurde, und schreiben in die Datei [[/.autorelabel]]
| |
| * Dies bewirkt, dass das System beim nächsten Start mit aktiviertem SELinux automatisch eine Neukennzeichnung durchführt
| |
| | |
| ; Wichtig
| |
| : Red Hat empfiehlt die Verwendung des Parameters [[selinux=0]] nicht
| |
| * Verwenden Sie zum Debuggen Ihres Systems vorzugsweise den permissiven Modus
| |
| autorelabel=1
| |
| | |
| Dieser Parameter zwingt das System zu einer Neukennzeichnung, ähnlich wie die folgenden Befehle
| |
| sudo touch /.autorelabel
| |
| sudo reboot
| |
| | |
| Wenn die Systemkennzeichnung eine große Anzahl von Fehlern enthält, müssen Sie möglicherweise im permissiven Modus booten, damit die automatische Neukennzeichnung erfolgreich ist
| |
| | |
| Weitere SELinux-bezogene Kernel-Boot-Parameter, wie beispielsweise [[checkreqprot]], finden Sie in der Datei [[/ usr/share/doc/kernel-doc-‚‘<KERNEL_VER>‚‘/Documentation/kernel-parameters.txt]]-Datei
| |
| * Diese Dokumentation wird mit dem Paket kernel-doc installiert
| |
| * Ersetzen Sie die Zeichenfolge ‚‘<KERNEL_VER>‚‘ durch die Versionsnummer des installierten Kernels, zum Beispiel
| |
| sudo yum install kernel-doc
| |
| less /usr/share/doc/kernel-doc-‚'3.10.0‘' /Documentation/kernel-parameters.txt
| |
| | |
| === Booleane ===
| |
| Booleane ermöglichen es, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen
| |
| * Dies ermöglicht Änderungen, wie z. B. das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu zu laden oder neu zu kompilieren
| |
| | |
| ==== Auflisten von Booleanen ====
| |
| Um eine Liste der Booleans, eine Erklärung zu deren Bedeutung sowie Angaben dazu, ob sie aktiviert oder deaktiviert sind, zu erhalten, führen Sie den Befehl [[semanage boolean -l]] als Linux-Root-Benutzer aus
| |
| | |
| Das folgende Beispiel listet nicht alle Booleans auf, und die Ausgabe wurde der Kürze halber gekürzt
| |
| sudo semanage boolean -l
| |
| SELinux-Boolean Status Standard Beschreibung
| |
| smartmon_3ware (aus , aus) Legt fest, ob smartmon...
| |
| mpd_enable_homedirs (aus, aus) Legt fest, ob mpd...
| |
| | |
| ; Hinweis
| |
| : Um detailliertere Beschreibungen zu erhalten, installieren Sie das Paket selinux-policy-devel
| |
| | |
| Die Spalte [[SELinux-Boolean]] listet die Namen der Booleans auf
| |
| * Die Spalte [[Beschreibung]] gibt an, ob die Booleans aktiviert oder deaktiviert sind und welche Funktion sie haben
| |
| | |
| Der Befehl [[getsebool -a]] listet Boolesche Werte auf, unabhängig davon, ob sie aktiviert oder deaktiviert sind, gibt jedoch keine Beschreibung zu jedem einzelnen
| |
| * Das folgende Beispiel listet nicht alle Booleschen Werte auf
| |
| getsebool -a
| |
| cvs_read_shadow --> off
| |
| daemons_dump_core --> on
| |
| | |
| Führen Sie den Befehl [[getsebool ‚‘ boolean-name'‚]] aus, um nur den Status des Booleschen Werts ‘'boolean-name'' aufzulisten
| |
| getsebool cvs_read_shadow
| |
| cvs_read_shadow --> off
| |
| | |
| Verwenden Sie eine durch Leerzeichen getrennte Liste, um mehrere Boolesche Werte aufzulisten
| |
| getsebool cvs_read_shadow daemons_dump_core
| |
| cvs_read_shadow --> off
| |
| daemons _dump_core --> on
| |
| | |
| ==== Konfigurieren von Booleschen Werten ====
| |
| Führen Sie das Dienstprogramm [[setsebool]] im Format [[setsebool ‚'boolean_name‘' on/off]] aus, um Boolesche Werte zu aktivieren oder zu deaktivieren
| |
| | |
| Das folgende Beispiel zeigt die Konfiguration des Booleschen Werts [[httpd_can_network_connect_db]]
| |
| | |
| ; Konfigurieren von Booleschen Werten
| |
| # Standardmäßig ist der Boolesche Wert [[httpd_can_network_connect_db]] deaktiviert, wodurch Skripte und Module des Apache-HTTP-Servers daran gehindert werden, eine Verbindung zu Datenbankservern herzustellen
| |
| getsebool httpd_can_network_connect_db
| |
| httpd_can_network_connect_db --> off
| |
| # Um Skripte und Module des Apache-HTTP-Servers vorübergehend die Verbindung zu Datenbankservern zu ermöglichen, geben Sie als Root den folgenden Befehl ein
| |
| sudo setsebool httpd_can_network_connect_db on
| |
| # Verwenden Sie das Dienstprogramm [[getsebool]], um zu überprüfen, ob der Boolean-Wert aktiviert wurde
| |
| getsebool httpd_can_network_connect_db
| |
| httpd_can_network_connect_db --> on
| |
| | |
| Dadurch können Skripte und Module des Apache-HTTP-Servers eine Verbindung zu Datenbankservern herstellen
| |
| # Diese Änderung bleibt nach einem Neustart nicht erhalten
| |
| #*Um Änderungen auch nach einem Neustart beizubehalten, führen Sie den Befehl [[setsebool -P ‚‘ boolean-name'' on]] als Root aus:[3]
| |
| sudo setsebool -P httpd_can_network_connect_db on
| |
| | |
| ==== Shell-Autovervollständigung ====
| |
| Es ist möglich, die Shell-Autovervollständigung mit den Dienstprogrammen [[getsebool]], [[setsebool]] und [[semanage]] zu verwenden
| |
| * Verwenden Sie die Autovervollständigung mit [[getsebool]] und [ [setsebool]], um sowohl Befehlszeilenparameter als auch Boolesche Werte zu vervollständigen
| |
| * Um nur die Befehlszeilenparameter aufzulisten, fügen Sie das Bindestrichzeichen („-“) hinter dem Befehlsnamen ein und drücken Sie die [[Tab]]-Taste
| |
| sudo setsebool -[Tab]
| |
| -P
| |
| | |
| Um einen Booleschen Wert zu vervollständigen, beginnen Sie mit der Eingabe des Booleschen Werts und drücken Sie dann die [[Tab]]-Taste
| |
| getsebool samba_[Tab]
| |
| samba_create_home_dirs samba_export_all_ro samba_run_unconfined
| |
| samba_domain_controller samba_export_all_rw samba_share_fusefs
| |
| samba_enable_home_dirs samba_portmapper samba_share_nfs
| |
|
| |
| sudo setsebool -P virt_use_[Tab]
| |
| virt_use_comm virt_use_nfs virt_use_sanlock
| |
| virt_use_execmem virt_use_rawip virt_use_usb
| |
| virt_use_fusefs virt_use_samba virt_use_xserver
| |
| | |
| Das Dienstprogramm [[semanage]] wird mit mehreren Befehlszeilenargumenten verwendet, die nacheinander vervollständigt werden
| |
| * Das erste Argument eines [[semanage]]-Befehls ist eine Option, die angibt, welcher Teil der SELinux-Richtlinie verwaltet wird
| |
| sudo semanage [Tab]
| |
| boolean export import login node port
| |
| dontaudit fcontext interface module permissive user
| |
| | |
| Anschließend folgen ein oder mehrere Befehlszeilenparameter
| |
| sudo semanage fcontext -[Tab]
| |
| -a -D --equal --help -m -o
| |
| --add --delete -f -l --modify -S
| |
| -C --deleteall --ftype --list -n -t
| |
| -d -e -h --locallist --noheading --type
| |
| | |
| Geben Sie schließlich den Namen eines bestimmten SELinux-Eintrags ein, z. B. einen Booleschen Wert, einen SELinux-Benutzer, eine Domäne oder einen anderen
| |
| * Beginnen Sie mit der Eingabe des Eintrags und drücken Sie [[Tab]]
| |
| sudo semanage fcontext -a -t samba<tab>
| |
|
| |
| samba_etc_t samba_secrets_t
| |
| sambagui_exec_t samba_share_t
| |
| samba_initrc_exec_t samba_unconfined_script_exec_t
| |
| samba_log_t samba_unit_file_t
| |
| samba_net_exec_t
| |
| | |
| Befehls- -Parameter können in einem Befehl verkettet werden
| |
| sudo semanage port -a -t http_port_t -p tcp 81
| |
| | |
| === SELinux-Kontexte – Dateien kennzeichnen ===
| |
| Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien so gekennzeichnet, dass sie sicherheitsrelevante Informationen darstellen
| |
| * Diese Informationen werden als SELinux-Kontext bezeichnet
| |
| * Bei Dateien kann dies mit dem Befehl [[ls -Z]] angezeigt werden
| |
|
| |
| ls -Z file1
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
| | |
| In diesem Beispiel stellt SELinux einen Benutzer ([[unconfined_u]]), eine Rolle ([[object_r]]), einen Typ ([[user_home_t]]) und eine Stufe ([[s0]]) bereit
| |
| * Diese Informationen werden verwendet, um Entscheidungen zur Zugriffskontrolle zu treffen
| |
| * Auf DAC-Systemen wird der Zugriff auf Basis der Linux-Benutzer- und Gruppen-IDs kontrolliert
| |
| * SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft
| |
| * SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuvor verweigern
| |
| | |
| ; Hinweis
| |
| : Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse
| |
| * Wenn Sie beispielsweise eine neue Datei im Verzeichnis [[/etc]] erstellen, das mit dem Typ [[etc_t]] gekennzeichnet ist, erbt die neue Datei denselben Typ
| |
| ls -dZ - /etc
| |
|
| |
| drwxr-xr-x root root system_u:object_r:‚'etc_t‘':s0 /etc
| |
| | |
| sudo touch /etc/file1
| |
| | |
| sudo ls -lZ /etc/file1
| |
| -rw-r--r-- root root unconfined_u:object_r:‚'etc_t‘':s0 /etc/file1
| |
| | |
| SELinux bietet mehrere Befehle zur Verwaltung der Dateisystem-Kennzeichnung, wie beispielsweise [[chcon]], [[semanage fcontext]], [[restorecon]] und [[matchpathcon]]
| |
| | |
| ==== Temporäre Änderungen: chcon ====
| |
| Der Befehl [[chcon]] ändert den SELinux-Kontext für Dateien
| |
| * Änderungen, die mit dem Befehl [[chcon]] vorgenommen werden, bleiben jedoch nicht bestehen, wenn das Dateisystem neu gekennzeichnet wird oder der Befehl [[restorecon]]
| |
| * Die SELinux-Richtlinie legt fest, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern dürfen
| |
| * Bei der Verwendung von [[chcon]] geben Benutzer den gesamten oder einen Teil des SELinux-Kontexts an, der geändert werden soll
| |
| * Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert
| |
| | |
| ==== Kurzreferenz ====
| |
| * Führen Sie den Befehl [[chcon -t ‚'type‘' ‚'file-name‘' ]], um den Dateityp zu ändern, wobei ‚'type‘' ein SELinux-Typ ist, wie z. B. [ [httpd_sys_content_t]], und ‚'file-name‘' ein Datei- oder Verzeichnisname ist
| |
| chcon -t httpd_sys_content_t ‚'file-name‘'
| |
| | |
| * Führen Sie den Befehl [[chcon -R -t ‚'type‘' ‚'directory-name‘']] aus, um den Typ des Verzeichnisses und dessen Inhalt zu ändern, wobei ‚'type‘' ein SELinux-Typ ist, wie beispielsweise [[httpd_sys_content_t]], und ‚'Verzeichnisname‘' ein Verzeichnisname ist
| |
| chcon -R -t httpd_sys_content_t ‚'Verzeichnisname‘'
| |
| | |
| ; Ändern des Typs einer Datei oder eines Verzeichnisses
| |
| Das folgende Verfahren zeigt, wie der Typ und keine anderen Attribute des SELinux-Kontexts geändert werden
| |
| * Das Beispiel in diesem Abschnitt funktioniert genauso für Verzeichnisse, beispielsweise wenn [[file1]] ein Verzeichnis wäre. # Wechseln Sie in Ihr Home-Verzeichnis
| |
| # Erstellen Sie eine neue Datei und zeigen Sie deren SELinux-Kontext an
| |
| touch file1
| |
| | |
| ls -Z file1
| |
| -rw -rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
| | |
| In diesem Beispiel umfasst der SELinux-Kontext für [[file1]] den SELinux-Benutzer [[unconfined_u]], die Rolle [[object_r]], den Typ [[user_home_t]] und die [[s0]] Ebene
| |
| * Eine Beschreibung der einzelnen Bestandteile des SELinux-Kontexts finden Sie in Kapitel 2, ‚'SELinux-Kontexte‘'
| |
| # Geben Sie den folgenden Befehl ein, um den Typ in [[samba_share_t]] zu ändern
| |
| * Die Option [[-t]] ändert nur den Typ
| |
| * Zeigen Sie anschließend die Änderung an
| |
| chcon -t samba_share_t file1
| |
| | |
| ls -Z file1
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
| |
| | |
| # Verwenden Sie den folgenden Befehl, um den SELinux-Kontext für die Datei [[file1]] wiederherzustellen
| |
| * Verwenden Sie die Option [[-v]], um die Änderungen anzuzeigen
| |
| restorecon -v file1
| |
| restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
| |
| | |
| In diesem Beispiel wird der vorherige Typ, [[samba_share_t]], auf den korrekten Typ, [[user_home_t]], zurückgesetzt
| |
| * Bei Verwendung der Targeted-Richtlinie (der Standard-SELinux-Richtlinie in Red Hat Enterprise Linux) liest der Befehl [[restorecon]] die Dateien im Verzeichnis [[/etc/selinux/targeted/contexts/files/]] aus, um festzustellen, welchen SELinux-Kontext die Dateien haben sollten
| |
| | |
| ; Ändern der Typen eines Verzeichnisses und seines Inhalts
| |
| Das folgende Beispiel zeigt, wie ein neues Verzeichnis erstellt und der Dateityp des Verzeichnisses sowie dessen Inhalt auf einen vom Apache-HTTP-Server verwendeten Typ geändert wird
| |
| * Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server ein anderes Dokumentstammverzeichnis (anstelle von [[/var/www/html/]]) verwendet
| |
| # Erstellen Sie als Root-Benutzer ein neues [ [web/]]-Verzeichnis und anschließend 3 leere Dateien ([[file1]], [[file2]] und [[file3]]) in diesem Verzeichnis
| |
| * Das [[web/]]-Verzeichnis und die darin enthaltenen Dateien sind mit dem Typ [[default_t]] gekennzeichnet
| |
| sudo mkdir /web
| |
|
| |
| sudo touch /web/file{1,2,3}
| |
| sudo ls -dZ /web
| |
| drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
| |
| | |
| sudo ls -lZ /web
| |
|
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
| |
|
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
| |
| | |
| # Geben Sie als root den folgenden Befehl ein, um den Typ des Verzeichnisses [[web/]] (und dessen Inhalt) in [[httpd_sys_content_t]] zu ändern
| |
| sudo chcon -R -t httpd_sys_content_t /web/
| |
| | |
| sudo ls -dZ /web/
| |
| drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
| |
|
| |
| sudo ls -lZ /web/
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
| |
| -rw-r--r-- root root unconfined_u:object_r: httpd_sys_content_t:s0 file3
| |
| | |
| # Um die Standard-SELinux-Kontexte wiederherzustellen, verwenden Sie das Dienstprogramm [[restorecon]] als root
| |
| sudo restorecon -R -v /web/
| |
| restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
| |
|
| |
| restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
| |
| restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t: s0
| |
| restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
| |
| | |
| Weitere Informationen zu [[chcon]] finden Sie auf der chcon(1)-Manpage
| |
| | |
| ; Hinweis
| |
| : Typen-Enforcement ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird
| |
| * In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden
| |
| | |
| ==== Dauerhafte Änderungen: semanage fcontext ====
| |
| Der Befehl [[semanage fcontext]] wird verwendet, um den SELinux-Kontext von Dateien zu ändern
| |
| * Um die Kontexte neu erstellter Dateien und Verzeichnisse anzuzeigen, geben Sie als root den folgenden Befehl ein
| |
| sudo semanage fcontext -C -l
| |
| | |
| Änderungen, die mit [[semanage fcontext]] vorgenommen wurden, werden von den folgenden Dienstprogrammen verwendet
| |
| * Das Dienstprogramm [[setfiles]] wird verwendet, wenn ein Dateisystem neu gekennzeichnet wird, und das Dienstprogramm [[restorecon]] stellt die Standard-SELinux-Kontexte wieder her
| |
| * Das bedeutet, dass durch [[semanage fcontext]] vorgenommene Änderungen dauerhaft sind, selbst wenn das Dateisystem neu gekennzeichnet wird
| |
| * Die SELinux-Richtlinie steuert, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern können
| |
| | |
| ==== Kurzübersicht ====
| |
| Um SELinux-Kontextänderungen vorzunehmen, die eine Neukennzeichnung des Dateisystems überdauern
| |
| # Geben Sie den folgenden Befehl ein und achten Sie darauf, den vollständigen Pfad zur Datei oder zum Verzeichnis zu verwenden
| |
| sudo semanage fcontext -a ‚'Optionen‘' ‚'Dateiname‘ ‚|‘'Verzeichnisname'‚
| |
| | |
| # Verwenden Sie das Dienstprogramm [[restorecon]], um die Kontextänderungen anzuwenden
| |
| sudo restorecon -v ‘'Dateiname'‚|‘'Verzeichnisname'‚
| |
| | |
| ===== Verwendung regulärer Ausdrücke mit semanage fcontext =====
| |
| Damit der Befehl [[semanage fcontext]] korrekt funktioniert, können Sie entweder einen vollqualifizierten Pfad oder ‘'' Perl-kompatible reguläre Ausdrücke ()‚‘'
| |
| * Das einzige verwendete ‚'PCRE‘'-Flag ist [[PCRE2_DOTALL]], wodurch der Platzhalter [[.]] mit allem übereinstimmt, einschließlich einer neuen Zeile
| |
| * Zeichenfolgen, die Pfade darstellen, werden als Bytes verarbeitet, was bedeutet, dass Nicht-ASCII-Zeichen nicht durch einen einzelnen Platzhalter abgeglichen werden
| |
| | |
| Beachten Sie, dass mit [[semanage fcontext]] angegebene Dateikontextdefinitionen in umgekehrter Reihenfolge zu ihrer Definition ausgewertet werden
| |
| der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet
| |
| * Lokale Dateikontextänderungen, die in [[file_contexts.local]] gespeichert sind, haben eine höhere Priorität als die in Policy-Modulen angegebenen
| |
| * Das bedeutet, dass immer dann, wenn in [[file_contexts.local]] gefunden wird, werden keine anderen Dateikontextdefinitionen berücksichtigt
| |
| | |
| ; Wichtig
| |
| : Mit dem Befehl [[semanage fcontext]] festgelegte Dateikontextdefinitionen überschreiben effektiv alle anderen Dateikontextdefinitionen
| |
| * Alle regulären Ausdrücke sollten daher so spezifisch wie möglich sein, um unbeabsichtigte Auswirkungen auf andere Teile des Dateisystems zu vermeiden
| |
| | |
| Weitere Informationen zu den in Dateikontextdefinitionen verwendeten regulären Ausdrücken und den geltenden Flags finden Sie in der [[semanage-fcontext(8) ]] Man-Seite
| |
| | |
| ; Ändern des Typs einer Datei oder eines Verzeichnisses
| |
| Das folgende Beispiel zeigt, wie der Typ einer Datei geändert wird, ohne andere Attribute des SELinux-Kontexts zu beeinflussen
| |
| * Dieses Beispiel funktioniert genauso für Verzeichnisse, beispielsweise wenn [[file1]] ein Verzeichnis wäre. # Erstellen Sie als Root-Benutzer eine neue Datei im Verzeichnis [[/etc]]
| |
| * Standardmäßig werden neu erstellte Dateien in [[/etc]] mit dem Typ [[etc_t]] gekennzeichnet
| |
| sudo touch /etc/file1
| |
|
| |
| ls -Z /etc/file1
| |
| -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
| |
| | |
| Um Informationen zu einem Verzeichnis aufzulisten, verwenden Sie den folgenden Befehl
| |
| ls -dZ ‚'Verzeichnisname‘'
| |
| | |
| # Geben Sie als root den folgenden Befehl ein, um den Typ von [[file1]] in [[samba_share_t]] zu ändern
| |
| * Die Option [[-a]] fügt einen neuen Eintrag hinzu, und die Option [[-t]] definiert einen Typ ([[samba_share_t]])
| |
| * Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; [[file1]] ist weiterhin mit dem Typ [[etc_t]] gekennzeichnet
| |
| sudo semanage fcontext -a -t samba_share_t /etc/file1
| |
| | |
| sudo ls -Z /etc/file1
| |
| -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
| |
| | |
| semanage fcontext -C -l
| |
|
| |
| /etc/file1 unconfined_u:object_r:samba_share_t:s0
| |
| | |
| # Verwenden Sie als root das Dienstprogramm [[restorecon]], um den Typ zu ändern
| |
| * Da [[semanage]] einen Eintrag für [[/etc/file1]] in [[file_contexts.local]] hinzugefügt hat, ändert [[restorecon]] den Typ in [[samba_share_t]]
| |
| sudo restorecon -v /etc/file1
| |
| restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
| |
| | |
| ; Ändern der Typen eines Verzeichnisses und seines Inhalts
| |
| Das folgende Beispiel zeigt, wie ein neues Verzeichnis erstellt und der Dateityp des Verzeichnisses sowie dessen Inhalt auf einen vom Apache-HTTP-Server verwendeten Typ geändert wird
| |
| * Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server anstelle von [[/var/www/html/] einen anderen Dokumentenstamm verwendet ]
| |
| # Erstellen Sie als Root-Benutzer ein neues Verzeichnis [[web/]] und anschließend 3 leere Dateien ([[file1]], [[file2]] und [[file3]]) in diesem Verzeichnis
| |
| * Das Verzeichnis [[web/ ]] und die darin enthaltenen Dateien sind mit dem Typ [[default_t]] gekennzeichnet
| |
| sudo mkdir /web
| |
| sudo touch /web/file{1,2,3}
| |
| sudo ls -dZ /web
| |
| drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
| |
| sudo ls -lZ /web
| |
| -rw-r--r-- root root unconfined_ u:object_r:default_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
| |
| | |
| # Geben Sie als root den folgenden Befehl ein, um den Typ des [[web/]]-Verzeichnisses und der darin enthaltenen Dateien in [[httpd_sys_content_t]] zu ändern
| |
| * Die Option [[-a]] fügt einen neuen Eintrag hinzu, und die Option [[-t]] definiert einen Typ ([[httpd_sys_content_t]])
| |
| * Der reguläre Ausdruck [[„/web(/.*)?“] ] bewirkt, dass [[semanage]] die Änderungen auf [[web/]] sowie die darin enthaltenen Dateien anwendet
| |
| * Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; [[web/]] und die darin enthaltenen Dateien sind weiterhin mit dem Typ [[default_t]] gekennzeichnet
| |
| sudo semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“
| |
| ls -dZ /web
| |
|
| |
| drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
| |
| ls -lZ /web
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
| |
|
| |
| -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
| |
| | |
| Der Befehl [[semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“]] fügt den folgenden Eintrag zu [[/etc/selinux/targeted/contexts/files/file_contexts.local]] hinzu
| |
| /web(/.*)? system_u:object_r:httpd_sys_content_t:s0
| |
| | |
| # Verwenden Sie als root das Dienstprogramm [[restorecon]], um den Typ von [[web/]] sowie aller darin enthaltenen Dateien
| |
| * Der Parameter [[-R]] steht für rekursiv, was bedeutet, dass alle Dateien und Verzeichnisse unter [[web/]] mit dem Typ [[httpd_sys_content_t]] gekennzeichnet werden
| |
| * Da [[semanage]] einen Eintrag für [[/web(/.*)?]] in [[file.contexts.local]] hinzugefügt hat, ändert [[restorecon]] die Typen in [
| |
|
| |
| [httpd_sys_content_t]]
| |
| sudo restorecon -R -v /web
| |
| restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r: httpd_sys_content_t:s0
| |
| restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
| |
| restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
| |
|
| |
| restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
| |
| | |
| Beachten Sie, dass neu erstellte Dateien und Verzeichnisse standardmäßig den SELinux-Typ ihrer übergeordneten Verzeichnisse erben
| |
| | |
| ; Einen hinzugefügten Kontext löschen
| |
| Das folgende Beispiel zeigt das Hinzufügen und Entfernen eines SELinux-Kontexts
| |
| * Wenn der Kontext Teil eines regulären Ausdrucks ist, zum Beispiel [[/web(/.*)?]], setzen Sie den regulären Ausdruck in Anführungszeichen
| |
| sudo semanage fcontext -d „/web(/.*)?“
| |
| | |
| # Um den Kontext zu entfernen, geben Sie als Root den folgenden Befehl ein, wobei ‚'Dateiname‘'|‚'Verzeichnisname‘' der erste Teil in [[file_contexts.local]] ist
| |
| sudo semanage fcontext -d ‚'Dateiname‘'|‚'Verzeichnisname‘'
| |
| | |
| Das Folgende ist ein Beispiel für einen Kontext in [[file_contexts. local]]
| |
| /test system_u:object_r:httpd_sys_content_t:s0
| |
| | |
| wobei der erste Teil [[test]] ist
| |
| * Um zu verhindern, dass das Verzeichnis [[test/]] nach dem Ausführen von [[restorecon]] oder nach einer Neulabelung des Dateisystems mit dem [[httpd_sys_content_t]]-Label versehen wird, geben Sie als Root den folgenden Befehl ein, um den Kontext aus [[file_contexts.local]] zu löschen
| |
| sudo semanage fcontext -d /test
| |
| | |
| # Verwenden Sie als root das Dienstprogramm [[restorecon]], um den Standard-SELinux-Kontext wiederherzustellen
| |
| | |
| Weitere Informationen zu [[semanage]] finden Sie in den Handbuchseiten semanage(8) und semanage-fcontext(8)
| |
| | |
| ; Wichtig
| |
| : Wenn Sie den SELinux-Kontext mit [[semanage fcontext -a]] ändern, verwenden Sie den vollständigen Pfad zur Datei oder zum Verzeichnis, um zu vermeiden, dass Dateien nach einer Neukennzeichnung des Dateisystems oder nach dem Ausführen des Befehls [
| |
|
| |
| [restorecon]]-Befehls
| |
| | |
| ==== Wie der Dateikontext bestimmt wird ====
| |
| Die Bestimmung des Dateikontexts basiert auf Dateikontextdefinitionen, die in der Systemsicherheitsrichtlinie (den [[.fc]]-Dateien) festgelegt sind
| |
| * Basierend auf der Systemrichtlinie generiert [[semanage]] die Dateien [[file_contexts.homedirs]] und [ [file_contexts]]-Dateien
| |
| | |
| Systemadministratoren können Dateikontextdefinitionen mit dem Befehl [[semanage fcontext]] anpassen
| |
| * Solche Anpassungen werden in der Datei [[file_contexts.local]] gespeichert
| |
| | |
| Wenn ein Kennzeichnungsprogramm wie [[matchpathcon]] oder [[restorecon]] die richtige Kennzeichnung für einen bestimmten Pfad ermittelt, sucht es zunächst nach lokalen Änderungen ([[file_contexts.local]])
| |
| * Findet das Dienstprogramm kein passendes Muster, durchsucht es die Datei [[file_contexts.homedirs]] und schließlich die Datei [[file_contexts]]
| |
| * Sobald jedoch eine Übereinstimmung für einen bestimmten Dateipfad gefunden wird, endet die Suche, sucht das Dienstprogramm nicht nach weiteren Dateikontext-Definitionen
| |
| * Das bedeutet, dass Dateikontexte, die sich auf das Home-Verzeichnis beziehen, eine höhere Priorität haben als die übrigen, und lokale Anpassungen überschreiben die Systemrichtlinie
| |
| | |
| Dateikontext-Definitionen, die durch die [[Systemrichtlinie]] festgelegt sind (Inhalt der Dateien [[file_contexts.homedirs]] und [[file_contexts]]), werden vor der Auswertung nach der Länge des Stamms (Präfix des Pfads vor etwaigen Platzhaltern) sortiert
| |
| * Das bedeutet, dass der spezifischste Pfad ausgewählt wird
| |
| * Mit [[semanage fcontext]] festgelegte Dateikontextdefinitionen werden jedoch in umgekehrter Reihenfolge zu ihrer Definition ausgewertet
| |
| der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet
| |
| | |
| Weitere Informationen zu
| |
| * der Änderung des Dateikontexts mit [[chcon]] finden Sie im Abschnitt „Temporäre Änderungen
| |
| chcon“
| |
| * das Ändern und Hinzufügen einer Dateikontextdefinition mit [[semanage fcontext]] finden Sie im Abschnitt „ Dauerhafte Änderungen
| |
| semanage fcontext“
| |
| * das Ändern und Hinzufügen einer Dateikontextdefinition durch eine Systemrichtlinienoperation, siehe Abschnitt „[[Pflege von SELinux-Labels]]“ oder Abschnitt „[[Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen]]“
| |
| | |
| === Die Typen file_t und default_t ===
| |
| Bei Verwendung eines Dateisystems, das erweiterte Attribute (EA) ist der Typ [[file_t]] der Standardtyp einer Datei, der noch kein EA-Wert zugewiesen wurde
| |
| * Dieser Typ wird nur für diesen Zweck verwendet und existiert auf korrekt gelabelten Dateisystemen nicht, da alle Dateien auf einem System, auf dem SELinux läuft, einen korrekten SELinux-Kontext haben sollten und der Typ [[file_t]] niemals in der Dateikontext-Konfiguration verwendet wird[4]
| |
| | |
| Der Typ [[default_t]] wird für Dateien verwendet, die keinem Muster in der file-context-Konfiguration entsprechen, damit solche Dateien von Dateien unterschieden werden können, die keinen Kontext auf der Festplatte haben, und im Allgemeinen für eingeschränkte Domänen unzugänglich bleiben
| |
| * Wenn Sie beispielsweise ein neues Verzeichnis der obersten Ebene erstellen, wie z. B. [[mydirectory/]], kann dieses Verzeichnis mit dem Typ default_t gekennzeichnet werden
| |
| * Wenn Dienste Zugriff auf dieses Verzeichnis benötigen, müssen Sie die Dateikontext-Konfiguration für diesen Speicherort aktualisieren
| |
| * Siehe Abschnitt „Persistente Änderungen
| |
| semanage fcontext“ für Details zum Hinzufügen eines Kontexts zur Dateikontext-Konfiguration
| |
| | |
| === Einbinden von Dateisystemen ===
| |
| Standardmäßig wird beim Einbinden eines Dateisystems, das erweiterte Attribute unterstützt, der Sicherheitskontext für jede Datei aus dem ‚'security.selinux‘'
| |
|
| |
| erweiterten Attribut der Datei
| |
| * Dateien in Dateisystemen, die keine erweiterten Attribute unterstützen, wird ein einziger Standard-Sicherheitskontext aus der Richtlinienkonfiguration zugewiesen, basierend auf dem Dateisystemtyp
| |
| | |
| Verwenden Sie den Befehl [[mount -o context]], um vorhandene erweiterte Attribute zu überschreiben oder einen anderen Standardkontext für Dateisysteme festzulegen, die keine erweiterten Attribute unterstützen
| |
| * Dies ist nützlich, wenn Sie nicht darauf vertrauen, dass ein Dateisystem die richtigen Attribute bereitstellt, beispielsweise bei Wechselmedien, die in mehreren Systemen verwendet werden
| |
| * Der Befehl [[mount -o context]] kann auch verwendet werden, um die Kennzeichnung für Dateisysteme zu unterstützen, die keine erweiterten Attribute unterstützen, wie z. B. File Allocation Table (FAT) oder NFS-Volumes
| |
| * Der mit der Option [[context]] angegebene Kontext wird nicht auf die Festplatte geschrieben
| |
| die ursprünglichen Kontexte bleiben erhalten und sind beim Einbinden ohne [[context]] sichtbar, sofern das Dateisystem ursprünglich über erweiterte Attribute verfügte
| |
| | |
| Weitere Informationen zur Dateisystem-Kennzeichnung finden Sie in James Morris' Artikel „Filesystem Labeling in SELinux“
| |
| http://www.linuxjournal.com/article/7426
| |
| | |
| ==== Kontext-Mounts ====
| |
| Um ein Dateisystem mit dem angegebenen Kontext zu mounten – wobei vorhandene Kontexte überschrieben werden, falls vorhanden – oder um einen anderen Standardkontext für ein Dateisystem festzulegen, das keine erweiterten Attribute unterstützt, verwenden Sie als Root-Benutzer den [[mount -o context=‚'SELinux_user:role:type:level‘']] beim Einhängen des gewünschten Dateisystems
| |
| * Kontextänderungen werden nicht auf die Festplatte geschrieben
| |
| * Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist
| |
| * In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]
| |
| * Ohne zusätzliche Mount-Optionen kann dies die Freigabe von NFS-Volumes über andere Dienste, wie den Apache-HTTP-Server, verhindern
| |
| * Das folgende Beispiel mountet ein NFS-Volume so, dass es über den Apache-HTTP-Server freigegeben werden kann
| |
| sudo mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
| |
| | |
| Neu erstellte Dateien und Verzeichnisse auf diesem Dateisystem scheinen den mit [[-o context]] angegebenen SELinux-Kontext zu haben
| |
| * Da diese Änderungen jedoch nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Mountvorgängen nicht erhalten
| |
| * Daher muss diese Option bei jedem Mountvorgang mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten
| |
| * Informationen dazu, wie man Kontext-Mounts dauerhaft macht, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“
| |
| | |
| Die Typen-Durchsetzung ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird
| |
| * In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden. Verwenden Sie daher beim Überschreiben des SELinux-Kontexts mit [[-o context]] den SELinux-Benutzer [[system_u]] und die Rolle [[object_r]] und konzentrieren Sie sich auf den Typ
| |
| * Wenn Sie nicht die MLS-Policy oder die Multi-Kategorie-Sicherheit verwenden, verwenden Sie die [[s0]]-Ebene
| |
| | |
| ; Hinweis
| |
| | |
| Wenn ein Dateisystem mit einer [[context]]-Option eingebunden wird, sind Kontextänderungen durch Benutzer und Prozesse untersagt
| |
| * Wenn Sie beispielsweise den Befehl [[chcon]] auf einem mit einer [[context]]-Option eingebundenen Dateisystem ausführen, führt dies zu einem Fehler [[Operation not supported]]
| |
| | |
| ==== Ändern des Standardkontexts ====
| |
| Wie in Abschnitt 4.8, „Die Typen file_t und default_t“ , wird auf Dateisystemen, die erweiterte Attribute unterstützen, beim Zugriff auf eine Datei, der auf der Festplatte ein SELinux-Kontext fehlt, so behandelt, als hätte sie einen Standardkontext, wie er durch die SELinux-Richtlinie definiert ist
| |
| * In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[file_t]]
| |
| * Wenn ein anderer Standardkontext verwendet werden soll, mounten Sie das Dateisystem mit der Option [[defcontext]]
| |
| | |
| Das folgende Beispiel mountet ein neu erstelltes Dateisystem auf [[/
| |
| dev/sda2]] in das neu erstellte Verzeichnis [[test/]] ein
| |
| * Dabei wird davon ausgegangen, dass es in [[/etc/selinux/targeted/contexts/files/]] keine Regeln gibt, die einen Kontext für das Verzeichnis [[test/]] definieren
| |
| sudo mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
| |
| | |
| In diesem Beispiel
| |
| * definiert die Option [[defcontext]], dass [[system_u:object_r:samba_share_t:s0]] „der Standard-Sicherheitskontext für nicht gekennzeichnete Dateien“ ist[5]
| |
| * wird das Stammverzeichnis ([[test/]]) des Dateisystems nach dem Einbinden so behandelt, als wäre es mit dem durch [[defcontext]] angegebenen Kontext gekennzeichnet (diese Kennzeichnung wird nicht auf der Festplatte gespeichert)
| |
| * Dies wirkt sich auf die Kennzeichnung von Dateien aus, die unter [[test/]] erstellt werden
| |
| neue Dateien erben den Typ [[samba_share_t]], und diese Kennzeichnungen werden auf der Festplatte gespeichert
| |
| * Dateien, die unter [[test/]] erstellt wurden, während das Dateisystem mit der Option [[defcontext]] eingebunden war, behalten ihre Kennzeichnungen
| |
| | |
| ==== Einbinden eines NFS-Volumes ====
| |
| Standardmäßig werden NFS-Einbindungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist
| |
| * In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]
| |
| * Je nach Richtlinienkonfiguration können Dienste wie der Apache-HTTP-Server und MariaDB möglicherweise keine Dateien lesen, die mit dem Typ [[nfs_t]] gekennzeichnet sind
| |
| * Dies kann verhindern, dass Dateisysteme, die mit diesem Typ gekennzeichnet sind, eingebunden und anschließend von anderen Diensten gelesen oder exportiert werden
| |
| | |
| Wenn Sie ein NFS-Volume mounten und dieses Dateisystem mit einem anderen Dienst lesen oder exportieren möchten, verwenden Sie beim Mounten die Option [[context]], um den Typ [[nfs_t]] zu überschreiben
| |
| * Verwenden Sie die folgende context-Option, um NFS-Volumes so einzuhängen, dass sie über den Apache-HTTP-Server freigegeben werden können
| |
| sudo mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"
| |
| | |
| Da diese Änderungen nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Einhängevorgängen nicht erhalten
| |
| * Daher muss diese Option bei jedem Einbinden mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten
| |
| * Informationen dazu, wie Kontext-Mounts dauerhaft gemacht werden können, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“
| |
| | |
| Als Alternative zum Einbinden von Dateisystemen mit [[context]]-Optionen können Boolesche Werte aktiviert werden, um Diensten den Zugriff auf Dateisysteme zu ermöglichen, die mit dem Typ [ [nfs_t]] gekennzeichnet sind
| |
| * Siehe Teil II, „Verwaltung eingeschränkter Dienste“ für Anweisungen zur Konfiguration von Booleans, um Diensten den Zugriff auf den Typ [[nfs_t]] zu ermöglichen
| |
| | |
| ==== Mehrere NFS-Mounts ====
| |
| Wenn mehrere Mounts aus demselben NFS-Export durchgeführt werden und versucht wird, den SELinux-Kontext jedes Mounts durch einen anderen Kontext zu überschreiben, führen nachfolgende Mount-Befehle zu Fehlern
| |
| * Im folgenden Beispiel verfügt der NFS-Server über einen einzigen Export, [[export/]], der zwei Unterverzeichnisse enthält: [ [web/]] und [[database/]]
| |
| * Die folgenden Befehle versuchen zwei Mounts von einem einzigen NFS-Export und versuchen, den Kontext für jeden einzelnen zu überschreiben
| |
| sudo mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
| |
| sudo mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"
| |
| | |
| Der zweite Mount-Befehl schlägt fehl, und Folgendes wird in [[/var/log/messages]] protokolliert
| |
| kernel
| |
| SELinux
| |
| mount invalid
| |
| * Gleicher Superblock, unterschiedliche Sicherheitseinstellungen für (dev 0:15, Typ nfs)
| |
| | |
| Um mehrere Mounts aus einem einzigen NFS-Export durchzuführen, wobei jeder Mount einen anderen Kontext hat, verwenden Sie die [[-o nosharecache,context]]-Optionen
| |
| * Das folgende Beispiel mountet mehrere Mounts aus einem einzigen NFS-Export, wobei jeder Mount einen anderen Kontext hat (wodurch ein einzelner Dienst auf jeden einzelnen zugreifen kann)
| |
| sudo mount server:/export/web /local/web -o nosharecache,context=„system_u:object_r:httpd_sys_content_t:s0“
| |
| sudo mount server:/export/database /local/database -o \ nosharecache,context=„system_u:object_r:mysqld_db_t:s0“
| |
| | |
| In diesem Beispiel wird [[server:/export/web]] lokal im Verzeichnis [[/local/web/]] eingebunden, wobei alle Dateien mit dem Typ [[httpd_sys_content_t]] gekennzeichnet sind, was dem Apache-HTTP-Server Zugriff gewährt. [[server:/export/database]] wird lokal in [[/local/database/]] eingebunden, wobei alle Dateien mit dem Typ [ [mysqld_db_t]] gekennzeichnet, was MariaDB den Zugriff ermöglicht
| |
| * Diese Typänderungen werden nicht auf die Festplatte geschrieben
| |
| | |
| ; Wichtig
| |
| | |
| Die Option [[nosharecache]] ermöglicht es Ihnen, dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, beispielsweise [[/export/web/]] mehrfach
| |
| * Hängen Sie dasselbe Unterverzeichnis eines Exports nicht mehrfach mit unterschiedlichen Kontexten ein, da dies zu einer überlappenden Einbindung führt, bei der Dateien unter zwei verschiedenen Kontexten zugänglich sind
| |
| | |
| ==== Kontext-Einbindungen dauerhaft machen ====
| |
| Um Kontext-Mounts über erneutes Mounten und Neustarts hinweg persistent zu machen, fügen Sie Einträge für die Dateisysteme in die Datei [[/etc/fstab]] oder eine Automounter-Zuordnung ein und verwenden Sie den erforderlichen Kontext als Mount-Option
| |
| | |
| Das folgende Beispiel fügt einen Eintrag in [[/etc/fstab]] für eine NFS-Kontext-Einbindung hinzu
| |
| server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
| |
| | |
| === SELinux-Labels beibehalten ===
| |
| Diese Abschnitte beschreiben, was mit SELinux-Kontexten geschieht, wenn Dateien und Verzeichnisse kopiert, verschieben und archivieren von Dateien und Verzeichnissen
| |
| * Außerdem wird erklärt, wie Kontexte beim Kopieren und Archivieren beibehalten werden können
| |
| | |
| ==== Kopieren von Dateien und Verzeichnissen ====
| |
| Wenn eine Datei oder ein Verzeichnis kopiert wird, wird eine neue Datei oder ein neues Verzeichnis erstellt, falls diese noch nicht existieren
| |
| * Der Kontext dieser neuen Datei oder dieses neuen Verzeichnisses basiert auf den Standard-Labeling-Regeln und nicht auf dem Kontext der ursprünglichen Datei oder des ursprünglichen Verzeichnisses, es sei denn, es wurden Optionen verwendet, um den ursprünglichen Kontext beizubehalten
| |
| *
| |
|
| |
| Beispielsweise werden Dateien, die in Benutzer-Home-Verzeichnissen erstellt werden, mit dem Typ [[user_home_t]] gekennzeichnet
| |
| touch file1
| |
| | |
| $ ls -Z file1
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
| | |
| Wenn eine solche Datei in ein anderes Verzeichnis kopiert wird, beispielsweise [[/etc]], wird die neue Datei gemäß den Standard-Kennzeichnungsregeln für [[/etc]] erstellt
| |
| * Das Kopieren einer Datei ohne zusätzliche Optionen bewahrt möglicherweise den ursprünglichen Kontext nicht
| |
| ls -Z file1
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
| | |
| sudo cp file1 /etc/
| |
|
| |
| $ ls -Z /etc/file1
| |
| -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
| |
| | |
| Wenn [[file1]] nach [[/etc]] kopiert wird und [[/etc/file1]] nicht existiert, wird [[/etc/file1]] als neue Datei erstellt
| |
| * Wie im obigen Beispiel gezeigt, wird [[/etc/file1]] gemäß den Standard-Labeling-Regeln mit dem Typ [[etc_t]] gekennzeichnet
| |
| | |
| Wenn eine Datei über eine bereits vorhandene Datei kopiert wird, bleibt der Kontext der vorhandenen Datei erhalten, es sei denn, der Benutzer hat [[cp]]-Optionen angegeben, um den Kontext der Originaldatei zu erhalten, wie z. B. [[--preserve=context]]
| |
| * Die SELinux-Richtlinie kann verhindern, dass Kontexte beim Kopieren erhalten bleiben
| |
| | |
| ; Kopieren ohne Beibehaltung von SELinux-Kontexten
| |
| Dieses Verfahren zeigt, dass beim Kopieren einer Datei mit dem Befehl [[cp]], und keine Optionen angegeben werden, der Typ vom Zielverzeichnis, dem übergeordneten Verzeichnis, übernommen wird
| |
| # Erstellen einer Datei im Home-Verzeichnis eines Benutzers
| |
| * Die Datei wird mit dem Typ [[user_home_t]] gekennzeichnet
| |
| touch file1
| |
| ls -Z file1
| |
|
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
| # Das Verzeichnis [[/var/www/html/]] ist mit dem Typ [[httpd_sys_content_t]] gekennzeichnet, wie der folgende Befehl zeigt
| |
| ls -dZ /var/www/html/drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
| |
| # Wenn [[file1]] nach [[/var/www/html/]] kopiert wird, erbt sie den Typ [[httpd_sys_content_t]]
| |
| sudo cp file1 /var/www/html/
| |
| ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
| |
| | |
| ; Beibehaltung von SELinux-Kontexten beim Kopieren
| |
| Dieses Verfahren zeigt, wie man die Option [[--preserve=context]] verwendet, um Kontexte beim Kopieren beizubehalten. # Erstellen einer Datei im Home-Verzeichnis eines Benutzers
| |
| * Die Datei wird mit dem Typ [[user_home_t]] gekennzeichnet
| |
| touch file1
| |
| ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Das Verzeichnis [[/var/www/html/]] ist mit dem Typ [[httpd_sys_content_t]] gekennzeichnet, wie der folgende Befehl zeigt ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/# Durch die Verwendung der Option [[--preserve=context]] bleiben die SELinux-Kontexte bei Kopiervorgängen erhalten* Wie unten gezeigt, wurde der Typ [[user_home_t]] von [[file1]] beibehalten, als die Datei nach [[/var/www/html/]] kopiert wurde sudo cp --preserve=context file1 /var/www/html/ ls -Z / var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1; Kopieren und Ändern des KontextsDieses Verfahren zeigt, wie man die Option [[--context]] verwendet, um den Kontext der Zielkopie zu ändern* Das folgende Beispiel wird im Home-Verzeichnis des Benutzers ausgeführt# Erstellen Sie eine Datei im Home-Verzeichnis eines Benutzers* Die Datei ist mit dem Typ [[user_home_t]] gekennzeichnet touch file1 ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Verwenden Sie die Option [[--context]], um den SELinux-Kontext zu definieren cp --context=system_u:object_r:samba_share_t:s0 file1 file2# Ohne [[--context]] würde [[file2]] mit dem [[unconfined_u:object_r:user_home_t]]-Kontext gekennzeichnet ls -Z file1 file2-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1-rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2; Kopieren einer Datei über eine vorhandene DateiDieses Verfahren zeigt, dass beim Kopieren einer Datei über eine vorhandene Datei der Kontext der vorhandenen Datei beibehalten wird, sofern keine Option zur Beibehaltung von Kontexten verwendet wird. # Erstellen Sie als root eine neue Datei, [[file1]], im Verzeichnis [[/etc]]* Wie unten gezeigt, wird die Datei mit dem Typ [[etc_t]] gekennzeichnet sudo touch /etc/file1 ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1# Erstellen Sie eine weitere Datei, [[file2]], im Verzeichnis [ [/tmp]]-Verzeichnis* Wie unten gezeigt, wird die Datei mit dem Typ [[user_tmp_t]] gekennzeichnet touch /tmp/file2 ls -Z /tmp/file2-rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
| |
| | |
| # [[file1]] mit [[file2]] überschreiben
| |
| sudo cp /tmp/file2 /etc/file1
| |
| | |
| # Nach dem Kopieren zeigt der folgende Befehl, dass [[file1]] mit dem Typ [[etc_t]] gekennzeichnet ist, nicht mit dem Typ [[user_tmp_t]] aus [[/tmp/file2]], der [[/etc/file1]] ersetzt hat
| |
| ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
| |
| | |
| ; Wichtig
| |
| | |
| Kopieren Sie Dateien und Verzeichnisse, anstatt sie zu verschieben
| |
| * Dies trägt dazu bei, dass sie mit den richtigen SELinux-Kontexten gekennzeichnet werden
| |
| * Falsche SELinux-Kontexte können verhindern, dass Prozesse auf solche Dateien und Verzeichnisse zugreifen
| |
| | |
| ==== Verschieben von Dateien und Verzeichnissen ====
| |
| Dateien und Verzeichnisse behalten ihren aktuellen SELinux-Kontext bei, wenn sie verschoben werden
| |
| * In vielen Fällen ist dieser für den Zielort, an den sie verschoben werden, falsch
| |
| * Das folgende Beispiel zeigt das Verschieben einer Datei aus dem Home-Verzeichnis eines Benutzers in das Verzeichnis [[/var/www/html/]], das vom Apache-HTTP-Server verwendet wird
| |
| * Da die Datei verschoben wird, erbt sie nicht den richtigen SELinux-Kontext
| |
| | |
| ; Verschieben von Dateien und Verzeichnissen
| |
| # Wechseln Sie in Ihr Home-Verzeichnis und erstellen Sie dort eine Datei
| |
| * Die Datei ist mit dem Typ [[user_home_t]] gekennzeichnet
| |
| touch file1
| |
| | |
| ls -Z file1
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
| | |
| # Geben Sie den folgenden Befehl ein, um den SELinux-Kontext des Verzeichnisses [[/var/www/html/]] anzuzeigen
| |
| ls -dZ /var/www/html/
| |
| drwxr-xr-x root root system_u:object_r:httpd _sys_content_t:s0 /var/www/html/
| |
| | |
| Standardmäßig ist [[/var/www/html/]] mit dem Typ [[httpd_sys_content_t]] gekennzeichnet
| |
| * Dateien und Verzeichnisse, die unter [[/var/www/html/]] erstellt werden, erben diesen Typ und sind somit mit diesem Typ gekennzeichnet
| |
| # Verschieben Sie als root [[file1]] nach [[/var/www/html/]]
| |
| * Da diese Datei verschoben wird, behält sie ihren aktuellen Typ [[user_home_t]]
| |
| sudo mv file1 /var/www/html/
| |
|
| |
| sudo ls -Z /var/www/html/file1
| |
| -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
| |
| | |
| Standardmäßig kann der Apache-HTTP-Server keine Dateien lesen, die mit dem Typ [[user_home_t]] ] gekennzeichnet sind
| |
| * Wenn alle Dateien, aus denen eine Webseite besteht, mit dem Typ [[user_home_t]] gekennzeichnet sind oder einem anderen Typ, den der Apache-HTTP-Server nicht lesen kann, wird der Zugriff verweigert, wenn versucht wird, über Webbrowser wie ‚‘'Mozilla Firefox'‚‘
| |
| | |
| ; Wichtig
| |
| | |
| Das Verschieben von Dateien und Verzeichnissen mit dem Befehl [[mv]] kann zu einem falschen SELinux-Kontext führen, wodurch Prozesse wie der Apache-HTTP-Server und Samba daran gehindert werden, auf solche Dateien und Verzeichnisse zuzugreifen
| |
| | |
| ==== Überprüfen des Standard-SELinux-Kontexts ====
| |
| Verwenden Sie das Dienstprogramm [[matchpathcon]], um zu überprüfen, ob Dateien und Verzeichnisse den richtigen SELinux-Kontext haben
| |
| * Dieses Dienstprogramm fragt die [[Systemrichtlinie]] ab und gibt dann den mit dem Dateipfad verbundenen Standard-Sicherheitskontext aus.[6] Das folgende Beispiel zeigt, wie man mit [[matchpathcon]] überprüft, ob Dateien im Verzeichnis [[/var/www/html/]] korrekt gekennzeichnet sind
| |
| ; Überprüfen des Standard-SELinux-Kontexts mit [[matchpathcon'‚‘]]
| |
| # Erstellen Sie als Root-Benutzer drei Dateien ([[file1]], [[file2]] und [[file3]]) im Verzeichnis [[/var/www/html/]]
| |
| * Diese Dateien erben den Typ [[httpd_sys_content_t]] von [[/var/www/html/]]
| |
| sudo touch /var/www/html/file{1,2,3}
| |
|
| |
| sudo ls -Z /var/www/html/
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
| |
| -rw-r--r-- root root unconfined_u: object_r:httpd_sys_content_t:s0 file3
| |
| | |
| # Ändern Sie als root den Typ von [[file1]] in [[samba_share_t]]
| |
| * Beachten Sie, dass der Apache-HTTP-Server keine Dateien oder Verzeichnisse lesen kann, die mit dem Typ [[samba_share_t]] ] gekennzeichnet sind
| |
| | |
| sudo chcon -t samba_share_t /var/www/html/file1
| |
| | |
| # Die Option [[-V]] von [[matchpathcon]] vergleicht den aktuellen SELinux-Kontext mit dem korrekten Standardkontext in der SELinux-Richtlinie
| |
| * Geben Sie den folgenden Befehl ein, um alle Dateien im Verzeichnis [[/var/www/html/]] zu überprüfen
| |
| matchpathcon -V /var/www/html/ *
| |
| /var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
| |
| /var/www/html/file2 verifiziert
| |
| /var/www/html/file3 verifiziert
| |
| | |
| Die folgende Ausgabe des Befehls [[matchpathcon]] erklärt, dass [[file1]] mit dem Typ [[samba_share_t]] gekennzeichnet ist, aber mit dem Typ [[httpd_sys_content_t]] gekennzeichnet sein sollte
| |
|
| |
| /var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
| |
| | |
| Um das Label-Problem zu beheben und dem Apache-HTTP-Server als root Zugriff auf [[file1]] zu gewähren, verwenden Sie das Dienstprogramm [[restorecon]]
| |
| sudo restorecon -v /var/www/ html/file1
| |
| restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t: s0
| |
| | |
| ==== Dateien mit tar archivieren ====
| |
| Das Dienstprogramm [[tar]] behält standardmäßig keine erweiterten Attribute bei
| |
| * Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
| |
| * Verwenden Sie den Befehl [[tar --selinux]], um Archive zu erstellen, die Kontexte beibehalten, und um Dateien aus den Archiven wiederherzustellen
| |
| * Wenn ein [[tar]] Archiv Dateien ohne erweiterte Attribute enthält oder wenn Sie möchten, dass die erweiterten Attribute den Systemstandardwerten entsprechen, verwenden Sie das Dienstprogramm [[restorecon]]
| |
| tar -xvf ‚'archive.tar‘' | restorecon -f -
| |
| | |
| Beachten Sie, dass Sie je nach Verzeichnis möglicherweise Root-Rechte benötigen, um das [ [restorecon]]
| |
| | |
| Das folgende Beispiel zeigt, wie ein [[tar]]-Archiv erstellt wird, das SELinux-Kontexte beibehält
| |
| ; Erstellen eines tar-Archivs
| |
| # Wechseln Sie in das Verzeichnis [[/var/www/html/]] und zeigen Sie dessen SELinux-Kontext an
| |
| cd /var/www/html/
| |
|
| |
| ls -dZ /var/www/html/
| |
| drwxr-xr-x
| |
| * root root system_u:object_r:httpd_sys_content_t:s0
| |
| | |
| # Erstellen Sie als Root drei Dateien ([[file1]], [ [file2] und [[file3]]) im Verzeichnis [[/var/www/html/]]
| |
| * Diese Dateien erben den Typ [[httpd_sys_content_t]] vom Verzeichnis [[/var/www/html/]]
| |
| html]# touch file{1,2,3}
| |
| | |
| ls -Z /var/www/html/
| |
|
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
| |
| -rw -r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
| |
| | |
| # Geben Sie als root den folgenden Befehl ein, um ein [[tar]]-Archiv mit dem Namen [[test.tar]] zu erstellen
| |
| * Verwenden Sie die Option [[--selinux]], um den SELinux-Kontext beizubehalten
| |
| sudo tar --selinux -cf test.tar file{1,2,3}
| |
| | |
| # Erstellen Sie als root ein neues Verzeichnis namens [[test/]] und gewähren Sie anschließend allen Benutzern vollen Zugriff darauf
| |
| sudo mkdir /test
| |
| sudo chmod 777 /test/
| |
| | |
| # Kopieren Sie die Datei [[test.tar]] in [[test/]]
| |
| cp /var/www/html/test.tar /test/
| |
| | |
| # Wechseln Sie in das Verzeichnis [[test/]]
| |
| * Geben Sie in diesem Verzeichnis den folgenden Befehl ein, um das [[tar]]-Archiv zu entpacken
| |
| * Geben Sie die Option [[--selinux]] erneut an, da sonst der SELinux-Kontext auf [[default_t]] geändert wird
| |
| cd /test/
| |
| | |
| tar --selinux -xvf test.tar
| |
| | |
| # SELinux-Kontexte anzeigen
| |
| * Der Typ [[httpd_sys_content_t]] wurde beibehalten und nicht in [[default_t]] geändert, was geschehen wäre, wenn [[--selinux]] nicht verwendet worden wäre
| |
| test]$ ls -lZ /test/
| |
| -rw -r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
| |
| -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
| |
| -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t: s0 file3
| |
| -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.tar
| |
| | |
| # Wenn das Verzeichnis [[test/]] nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
| |
| sudo rm -ri /test/
| |
| | |
| Weitere Informationen zu [[tar]], wie beispielsweise die Option [[- -xattrs]], die alle erweiterten Attribute beibehält
| |
| | |
| ==== Dateien mit star archivieren ====
| |
| Das Dienstprogramm [[star]] behält standardmäßig keine erweiterten Attribute bei
| |
| * Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
| |
| * Verwenden Sie den Befehl [[star -xattr -H=exustar]], um Archive zu erstellen, die Kontexte beibehalten
| |
| * Das star-Paket ist standardmäßig nicht installiert
| |
| * Um [[star]] zu installieren, führen Sie als Root-Benutzer den Befehl [[yum install star]] aus
| |
| | |
| Das folgende Beispiel zeigt die Erstellung eines [[star]]-Archivs, das SELinux-Kontexte beibehält
| |
| ; Erstellen eines [ [star]]-Archiv
| |
| # Erstellen Sie als Root drei Dateien ([[file1]], [[file2]] und [[file3]]) im Verzeichnis [[/var/www/html/]]
| |
| * Diese Dateien erben den Typ [[httpd_sys_content_t]] von [[/var/www/html/]]
| |
| sudo touch /var/www/html/file{1,2,3}
| |
| | |
| sudo ls -Z / var/www/html/
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
| |
|
| |
| -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
| |
| | |
| # Wechseln Sie in das Verzeichnis [[/var/www/html/]]
| |
| * Geben Sie in diesem Verzeichnis als root den folgenden Befehl ein, um ein [[star]]-Archiv mit dem Namen [[test.star]] zu erstellen
| |
| cd /var/www/html
| |
| | |
| html]# star -xattr -H=exustar -c -f=test.star file{1,2,3}
| |
| star
| |
| 1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 k)
| |
| | |
| # Erstellen Sie als Root ein neues Verzeichnis namens [[test/]] und gewähren Sie allen Benutzern vollständigen Zugriff darauf
| |
| sudo mkdir /test
| |
| | |
| sudo chmod 777 /test/
| |
| | |
| # Geben Sie den folgenden Befehl ein, um die Datei [[test.star]] in [[test/]] zu kopieren
| |
| cp /var/www/html/test.star /test/
| |
| | |
| # Wechseln Sie in das Verzeichnis [[test/]]
| |
| * Sobald Sie sich in diesem Verzeichnis befinden, geben Sie den folgenden Befehl ein, um das [[star]]-Archiv zu extrahieren
| |
| cd /test/
| |
| | |
| test]$ star -x -f=test.star
| |
| star
| |
| 1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 kB)
| |
| | |
| # Zeigen Sie die SELinux-Kontexte an
| |
| * Der Typ [[httpd_sys_content_t]] wurde beibehalten und nicht in [ [default_t] geändert worden wäre, was geschehen wäre, wenn die Option [[-xattr -H=exustar]] nicht verwendet worden wäre
| |
| ls -lZ /test/
| |
| -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
| |
| -rw-r --r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
| |
| -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3
| |
| -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.star
| |
| | |
| # Wenn das Verzeichnis [[test/]] Verzeichnis nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
| |
| sudo rm -ri /test/
| |
| | |
| # Wenn [[star]] nicht mehr benötigt wird, entfernen Sie das Paket als root
| |
| sudo yum remove star
| |
| | |
| Weitere Informationen zu [[star]] finden Sie auf der Handbuchseite star(1)
| |
| | |
| === Tools zur Informationsbeschaffung ===
| |
| Die unten aufgeführten Dienstprogramme sind Befehlszeilentools, die gut formatierte Informationen liefern, wie beispielsweise Statistiken zum Access Vector Cache oder die Anzahl der Klassen, Typen oder Booleschen Werte
| |
| | |
| ==== avcstat ====
| |
| Dieser Befehl liefert eine kurze Ausgabe der Access Vector Cache-Statistiken seit dem Systemstart
| |
| * Sie können die Statistiken in Echtzeit verfolgen, indem Sie ein Zeitintervall in Sekunden angeben
| |
| * Dies liefert aktualisierte Statistiken seit der ersten Ausgabe
| |
| * Die verwendete Statistikdatei ist [[/sys/fs/selinux/avc/cache_stats]], und Sie können mit der Option [ [-f /Pfad/zur/Datei]]
| |
| | |
| sudo avcstat
| |
| Lookups Hits Misses Allocs Reclaims Frees
| |
| 47517410 47504630 12780 12780 12176 12275
| |
| | |
| ==== seinfo ====
| |
| Dieses Dienstprogramm ist nützlich, um die Aufschlüsselung einer Richtlinie zu beschreiben, wie z. B. die Anzahl der Klassen, Typen, Booleschen Werte, Zulassungsregeln und andere. [[seinfo]] ist ein Kommandozeilen-Dienstprogramm, das eine [[policy.conf]]-Datei, eine binäre Richtliniendatei, eine modulare Liste von Richtlinienpaketen oder eine Richtlinienlistendatei als Eingabe verwendet
| |
| * Sie müssen das Paket setools-console installiert haben, um das Dienstprogramm [[seinfo]] nutzen
| |
| | |
| Die Ausgabe von [[seinfo]] variiert zwischen Binär- und Quelldateien
| |
| * Beispielsweise verwendet die Richtlinienquelldatei die Klammern [[{ }]] , um mehrere Regelelemente in einer einzigen Zeile zu gruppieren
| |
| * Ein ähnlicher Effekt tritt bei Attributen auf, bei denen sich ein einzelnes Attribut in einen oder mehrere Typen auflöst
| |
| * Da diese aufgelöst werden und in der binären Richtlinien-Datei nicht mehr relevant sind, haben sie in den Suchergebnissen den Rückgabewert Null
| |
| * Die Anzahl der Regeln steigt jedoch erheblich an, da jede ehemals einzeilige Regel, die Klammern nun aus mehreren einzelnen Zeilen besteht
| |
| | |
| Einige Elemente sind in der binären Richtlinie nicht vorhanden
| |
| * Beispielsweise werden neverallow-Regeln nur während der Kompilierung der Richtlinie überprüft, nicht zur Laufzeit, und anfängliche Sicherheitskennungen (SIDs) sind nicht Teil der binären Richtlinie, da sie erforderlich sind, bevor die Richtlinie beim Booten vom Kernel geladen wird
| |
|
| |
| sudo seinfo
| |
| | |
| Statistiken zur Richtliniendatei
| |
| /sys/fs/selinux/policy
| |
| Richtlinienversion & Typ
| |
| v.28 (binär, mls)
| |
| | |
| Klassen
| |
| 77 Berechtigungen
| |
| 229
| |
| Sensitivitäten
| |
| 1 Kategorien
| |
| 1024
| |
| Typen
| |
| 3001 Attribute
| |
| 244
| |
| Benutzer
| |
| 9 Rollen
| |
| 13
| |
| Boolesche Werte
| |
| 158 Cond
| |
| * Ausdrücke
| |
| 193
| |
| Zulassen
| |
| 262796 Niemals zulassen
| |
| 0
| |
| Audit zulassen
| |
| 44 Kein Audit
| |
| 156710
| |
| Typ_trans
| |
| 10760 Typ_change
| |
| 38
| |
| Typ_member
| |
| 44 Rolle zulassen
| |
| 20
| |
| Rolle_trans
| |
| 237 Bereich_trans
| |
| 2546
| |
|
| |
| Einschränkungen
| |
| 62 Validatetrans
| |
| 0
| |
| Anfängliche SIDs
| |
| 27 Fs_use
| |
| 22
| |
| Genfscon
| |
| 82 Portcon
| |
| 373
| |
| Netifcon
| |
| 0 Nodecon
| |
| 0
| |
| Permissives
| |
| 22 Polcap
| |
| 2
| |
| | |
| Das Dienstprogramm [[seinfo]] kann auch die Anzahl der Typen mit dem Attribut „domain“ auflisten und so eine Schätzung der Anzahl verschiedener eingeschränkter Prozesse liefern
| |
|
| |
| sudo seinfo -adomain -x | wc -l
| |
| 550
| |
| | |
| Nicht alle Domänentypen sind eingeschränkt
| |
| * Um die Anzahl der nicht eingeschränkten Domänen anzuzeigen, verwenden Sie das Attribut [[unconfined_domain]]
| |
| sudo seinfo -aunconfined_domain_type -x | wc -l
| |
| 52
| |
| | |
| Permissive Domänen können mit der Option [[--permissive]] gezählt werden
| |
| sudo seinfo --permissive -x | wc -l
| |
| 31
| |
| | |
| Entfernen Sie den zusätzlichen [ [ wc -l]] aus den obigen Befehlen, um die vollständigen Listen anzuzeigen
| |
| | |
| ==== sesearch ====
| |
| Sie können das Dienstprogramm [[sesearch]] verwenden, um nach einer bestimmten Regel in der Richtlinie zu suchen
| |
| * Es ist möglich, entweder die Quelldateien der Richtlinie oder die Binärdatei zu durchsuchen
| |
| * Zum Beispiel
| |
| sesearch --role_allow -t httpd_sys_content_t
| |
| 20 Regeln für die Zulassung von Rollen gefunden
| |
| allow system_r sysadm_r;
| |
| allow sysadm_r system_r;
| |
| allow sysadm_r staff_r;
| |
| allow sysadm_r user_r;
| |
| allow system_r git_shell_r;
| |
| allow system_r guest_r;
| |
| allow logadm_r system _r;
| |
| allow system_r logadm_r;
| |
| allow system_r nx_server_r;
| |
| allow system_r staff_r;
| |
| allow staff_r logadm_r;
| |
| allow staff_r sysadm_r;
| |
| allow staff_r unconfined_r;
| |
|
| |
| erlaube staff_r webadm_r;
| |
| erlaube unconfined_r system_r;
| |
| erlaube system_r unconfined_r;
| |
| erlaube system_r user_r;
| |
| erlaube webadm_r system_r;
| |
| erlaube system_r webadm_r;
| |
| erlaube system_r xguest_r;
| |
| | |
| Das Dienstprogramm [[sesearch]] kann die Anzahl der ‚'allow‘'-Regeln anzeigen
| |
| sudo sesearch --allow | wc -l
| |
| 262798
| |
| | |
| Und die Anzahl der ‚'dontaudit‘'-Regeln
| |
| sudo sesearch --dontaudit | wc -l
| |
| 156712
| |
| | |
| === Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen ===
| |
| Der Speicher für SELinux-Module in [[/etc/selinux/]] ermöglicht die Verwendung einer Priorität für SELinux-Module
| |
| * Geben Sie den folgenden Befehl als Root ein, um zwei Modulverzeichnisse mit unterschiedlicher Priorität anzuzeigen
| |
| sudo ls /etc/selinux/targeted/active/ module
| |
| 100 400 disabled
| |
| | |
| Während die Standardpriorität des Dienstprogramms [[semodule]] 400 beträgt, liegt die Priorität in selinux-policy-Paketen bei 100, sodass die meisten installierten SELinux-Module die Priorität 100 haben
| |
| | |
| Sie können ein vorhandenes Modul durch ein modifiziertes Modul mit demselben Namen und einer höheren Priorität überschreiben
| |
| * Wenn mehrere Module mit demselben Namen und unterschiedlichen Prioritäten vorhanden sind, wird beim Erstellen der Richtlinie nur das Modul mit der höchsten Priorität verwendet
| |
| | |
| ; Verwendung von SELinux-Richtlinienmodulen – Priorität
| |
| | |
| Erstellen Sie ein neues Modul mit geändertem Dateikontext
| |
| * Installieren Sie das Modul mit dem Befehl [[semodule -i]] und setzen Sie die Priorität des Moduls auf 400
| |
| * Im folgenden Beispiel verwenden wir [[sandbox.pp]]
| |
| | |
| sudo semodule -X 400 -i sandbox.pp
| |
| sudo semodule --list-modules=full | grep sandbox
| |
| 400 sandbox pp
| |
| 100 sandbox pp
| |
| | |
| Um zum Standardmodul zurückzukehren, geben Sie als Root den Befehl [[semodule -r]] ein
| |
| sudo semodule -X 400 -r sandbox
| |
| libsemanage.semanage_direct_remove_key
| |
| Das Sandbox-Modul mit der Priorität 100 ist nun aktiv
| |
| | |
| ==== Deaktivieren eines System-Policy-Moduls ====
| |
| Um ein [[System-Policy]]-Modul zu deaktivieren, geben Sie als Root den folgenden Befehl ein
| |
| semodule -d ‚'MODULE_NAME‘'
| |
| | |
| ; Warnung
| |
| | |
| Wenn Sie ein [[System-Policy]]-Modul mit dem Befehl [[semodule -r]] entfernen, wird es vom Speichersystem gelöscht und kann nicht erneut geladen werden
| |
| * Um unnötige Neuinstallationen des selinux -policy-targeted-Pakets zur Wiederherstellung aller [[Systemrichtlinien]]-Module, verwenden Sie stattdessen den Befehl [[semodule -d]]
| |
| | |
| === Multi-Level Security (MLS) ===
| |
| Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt
| |
| * Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
| |
| * Sowohl Subjekte als auch Objekte sind mit einer Sicherheitsstufe gekennzeichnet, die die Sicherheitsfreigabe eines Subjekts oder die Klassifizierung eines Objekts angibt
| |
| * Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt
| |
| | |
| Abbildung „Sicherheitsfreigabestufen“ zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen
| |
| * Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen
| |
| * Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen
| |
| | |
| ; Abbildung Sicherheitsfreigabestufen
| |
| | |
| Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“ zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft, und verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen
| |
| * Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften
| |
| „no read up“ und „no write down“
| |
| | |
| ; Abbildung Zulässige Datenflüsse unter Verwendung von MLS
| |
| | |
| ==== MLS und Systemberechtigungen ====
| |
| MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert
| |
| * Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
| |
| * Es ist wichtig zu beachten, dass die MLS-Richtlinien von SELinux „nach“ den DAC-Regeln überprüft werden
| |
| * Eine höhere Sicherheitsfreigabe gewährt nicht automatisch die Berechtigung, willkürlich im Dateisystem zu stöbern
| |
| | |
| Benutzer mit Freigaben der höchsten Stufe erhalten in mehrstufigen Systemen nicht automatisch Administratorrechte
| |
| * Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen
| |
| | |
| ==== Aktivieren von MLS in SELinux ====
| |
| ; Hinweis
| |
| | |
| Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft
| |
| | |
| Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren
| |
| | |
| ; Aktivieren der SELinux-MLS-Richtlinie
| |
| # Installieren Sie das Paket selinux-policy-mls
| |
| sudo yum install selinux-policy-mls
| |
| # Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
| |
| * Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
| |
| * Um dies zu verhindern, konfigurieren Sie [[SELINUX=permissive]] in der Datei [[/etc/selinux/config]]
| |
| * Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie [[SELINUXTYPE=mls]] konfigurieren
| |
| * Ihre Konfigurationsdatei sollte wie folgt aussehen
| |
| # 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 – Zielgerichtete Prozesse werden geschützt,
| |
| # mls – Multi-Level-Security-Schutz
| |
| SELINUXTYPE=mls
| |
| | |
| # Stellen Sie sicher, dass SELinux im permissiven Modus läuft
| |
| sudo setenforce 0
| |
| | |
| getenforce
| |
| Permissive
| |
| | |
| # Verwenden Sie das Skript [[fixfiles]], um die Datei [[/.autorelabel]] mit der Option [[-F]] zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
| |
| sudo fixfiles -F onboot
| |
| | |
| # Starten Sie Ihr System neu
| |
| * Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
| |
| * Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
| |
|
| |
| *** Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
| |
| *** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
| |
| *** Größe des Dateisystems und der Geschwindigkeit der Festplatten
| |
| ***********
| |
| | |
| Jedes [[*]] (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden
| |
| * Im obigen Beispiel stehen elf [[*]]-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
| |
| * Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
| |
| * Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
| |
| * Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
| |
| # Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
| |
| * Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
| |
| * Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
| |
| * Siehe Kapitel [[Fehlerbehebung]] für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat
| |
| | |
| sudo grep „SELinux is preventing“ /var/log/messages
| |
| | |
| # Wenn die Datei [[/var/log/messages]] keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie [[SELINUX=enforcing]] 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=enforcing
| |
| # SELINUXTYPE= kann einen dieser beiden Werte annehmen
| |
| # targeted - Zielgerichtete Prozesse werden geschützt,
| |
| # mls - Multi-Level-Security-Schutz
| |
| SELINUXTYPE=mls
| |
| # Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
| |
| getenforce
| |
| Durchsetzung
| |
| | |
| und die MLS-Richtlinie ist aktiviert
| |
| sudo sestatus |grep mls
| |
| Richtlinie aus der Konfigurationsdatei
| |
| mls
| |
| | |
| ==== Einen Benutzer mit einem bestimmten MLS-Bereich erstellen ====
| |
| Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen
| |
| ; Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
| |
| # Fügen Sie einen neuen Linux-Benutzer mit dem [[useradd ]] und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall [[staff_u]])
| |
| sudo useradd -Z staff_u john
| |
| # Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu
| |
| Eingabeaufforderung sudo passwd john
| |
| # Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen
| |
| * Die Ausgabe sollte wie folgt aussehen
| |
| sudo semanage login -l
| |
| Anmeldename SELinux-Benutzer MLS/ MCS-Bereich Dienst
| |
| | |
| __default__ user_u s0-s0 *
| |
| john staff_u s0-s15:c0.c1023 *
| |
| root root s0-s15:c0.c1023 *
| |
| staff staff_u s0-s15:c0.c1023 *
| |
|
| |
| sysadm staff_u s0-s15:c0.c1023 *
| |
| system_u system_u s0-s15:c0.c1023 *
| |
| # Definieren Sie einen spezifischen Bereich für den Benutzer [[john]]
| |
| sudo semanage login --modify --range s2:c100 john
| |
| # Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an
| |
| * Beachten Sie, dass für den Benutzer [[john]] nun ein spezifischer MLS-Bereich definiert ist
| |
| sudo semanage login -l
| |
| Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst
| |
| | |
| __default__ user_u s0-s0 *
| |
|
| |
| john staff_u s2:c100 *
| |
| root root s0-s15:c0.c1023 *
| |
| staff staff_u s0-s15:c0.c1023 *
| |
| sysadm staff_u s0-s15:c0.c1023 *
| |
| system_u system_u s0-s15:c0.c1023 *
| |
| | |
| # Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein
| |
| sudo chcon -R -l s2:c100 /home/john
| |
| | |
| ==== Einrichten von polyinstanziierten Verzeichnissen ====
| |
| Die Verzeichnisse [[/tmp]] und [[/var/tmp/]] werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt
| |
| * Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
| |
| * SELinux bietet eine Lösung in Form von ‚‘ polyinstanziierten'' Verzeichnissen
| |
| * Dies bedeutet im Effekt, dass sowohl [[/tmp]] als auch [[/var/tmp/]] instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
| |
| * Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse [[/tmp]] und [[/var/tmp/]] jedes Benutzers automatisch unter [[/tmp-inst]] und [[/var/tmp/tmp-inst]] eingebunden
| |
| | |
| Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren
| |
| ; Aktivieren der Polyinstanziierung von Verzeichnissen
| |
| # Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei [[/etc/security/namespace.conf]], um die Instanziierung von [[/tmp]], [[/var/tmp/]] und den Home-Verzeichnissen der Benutzer zu aktivieren
| |
| tail -n 3 /etc/security/namespace.conf
| |
| /tmp /tmp-inst/ level root,adm
| |
| /var/tmp /var/tmp/tmp-inst/ level root, adm
| |
| $HOME $HOME/$USER.inst/ level
| |
| # Stellen Sie sicher, dass in der Datei [[/etc/pam.d/login]] das Modul [[pam_namespace.so]] für die Sitzung konfiguriert ist
| |
| grep namespace /etc/pam.d/login
| |
| session required pam_namespace.so
| |
| # Starten Sie Ihr System neu
| |
| | |
| === Dateinamenübergang ===
| |
| Die Funktion „Dateinamenübergang“ ermöglicht es Richtlinienautoren, den Dateinamen beim Schreiben von Richtlinienübergangsregeln anzugeben
| |
| * Es ist möglich, eine Regel zu schreiben, die besagt
| |
| Wenn ein Prozess mit der Kennzeichnung [[A_t]] eine bestimmte Objektklasse in einem Verzeichnis mit der Kennzeichnung [[B_t]] erstellt und die bestimmte Objektklasse den Namen [[objectname]] trägt, erhält sie die Kennzeichnung [ [C_t]]
| |
| * Dieser Mechanismus ermöglicht eine feinere Steuerung der Prozesse auf dem System
| |
| | |
| Ohne Dateinamenübergang gibt es drei Möglichkeiten, ein Objekt zu kennzeichnen
| |
| * Standardmäßig erben Objekte Labels von übergeordneten Verzeichnissen
| |
| * Wenn der Benutzer beispielsweise eine Datei in einem Verzeichnis mit dem Label [[etc_t]] erstellt, erhält die Datei ebenfalls das Label [[etc_t]]
| |
| * Diese Methode ist jedoch unbrauchbar, wenn mehrere Dateien innerhalb eines Verzeichnisses unterschiedliche Labels haben sollen
| |
| * Richtlinienautoren können eine Regel in der Richtlinie schreiben, die besagt
| |
| Wenn ein Prozess vom Typ [[A_t]] eine bestimmte Objektklasse in einem Verzeichnis mit dem Label [[B_t]] erstellt, erhält das Objekt die neue Kennzeichnung [[C_t]]
| |
| * Diese Vorgehensweise ist problematisch, wenn ein einzelnes Programm mehrere Objekte im selben Verzeichnis erstellt, wobei jedes Objekt eine eigene Kennzeichnung benötigt
| |
| * Darüber hinaus bieten diese Regeln nur eine teilweise Kontrolle, da die Namen der erstellten Objekte nicht angegeben werden
| |
| * Bestimmte Anwendungen verfügen über SELinux-Unterstützung, die es einer solchen Anwendung ermöglicht, das System zu fragen, wie die Kennzeichnung eines bestimmten Pfads lauten soll
| |
| * Diese Anwendungen fordern dann den Kernel auf, das Objekt mit der erforderlichen Kennzeichnung zu erstellen
| |
| * Beispiele für Anwendungen mit SELinux-Unterstützung sind der ‚‘'rpm'‚‘ Paketmanager, das ‚‘'restorecon'‚‘ Dienstprogramm oder der ‚‘'udev'‚‘ Gerätemanager
| |
| * Es ist jedoch nicht möglich, jede Anwendung, die Dateien oder Verzeichnisse erstellt, mit SELinux-Unterstützung auszustatten
| |
| * Oft ist es notwendig, Objekte nach der Erstellung mit dem korrekten Label neu zu kennzeichnen
| |
| * Andernfalls werden AVC-Meldungen zurückgegeben, wenn eine eingeschränkte Domäne versucht, das Objekt zu verwenden
| |
| | |
| Die Funktion zur Dateinamenumwandlung verringert Probleme im Zusammenhang mit falscher Kennzeichnung und verbessert die Sicherheit des Systems
| |
| * Richtlinienautoren können eindeutig festlegen, dass eine bestimmte Anwendung eine Datei mit einem bestimmten Namen nur in einem bestimmten Verzeichnis erstellen darf
| |
| * Die Regeln berücksichtigen den Dateinamen, nicht den Dateipfad
| |
| * Dies ist der Basisname des Dateipfads
| |
| * Beachten Sie, dass die Dateinamenübergabe eine exakte Übereinstimmung verwendet, die durch die [[strcmp()]]-Funktion durchgeführt wird
| |
| * Die Verwendung von regulären Ausdrücken oder Platzhaltern wird nicht berücksichtigt
| |
| | |
| ; Hinweis
| |
| : Dateipfade können im Kernel variieren, und die Dateinamenumwandlung verwendet die Pfade nicht zur Bestimmung von Labels
| |
| * Folglich wirkt sich diese Funktion nur auf die anfängliche Dateierstellung aus und behebt keine falschen Labels bereits erstellter Objekte
| |
| | |
| ; Beispiele für mit Dateinamenumwandlung geschriebene Richtlinienregeln
| |
| Das folgende Beispiel zeigt eine Policy-Regel mit Dateinamenumwandlung
| |
| filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, „.ssh“)
| |
| | |
| Diese Regel besagt, dass, wenn ein Prozess vom Typ [[unconfined_t]] das Verzeichnis [[~/.ssh/]] in einem Verzeichnis mit der Bezeichnung [[admin_home_t]] erstellt, das Verzeichnis [[~/.ssh/]] die Bezeichnung [[ssh _home_t]]
| |
| | |
| Ähnliche Beispiele für mit Dateinamenübergängen geschriebene Richtlinienregeln sind unten aufgeführt
| |
| filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, „public_html“)
| |
| filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, „missfont.log“)
| |
| filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, „nvidia0“)
| |
| filetrans_pattern (puppet_t, etc_t, krb5_conf_t, file, „krb5.conf“)
| |
| | |
| ; Hinweis
| |
| :Die Funktion zur Änderung von Dateinamen betrifft hauptsächlich die Verfasser von Richtlinien, aber Benutzer können feststellen, dass einige Dateiobjekte ein anderes Label aufweisen, als in der Richtlinie festgelegt, anstatt wie fast immer mit dem Standard-Label des übergeordneten Verzeichnisses erstellt zu werden
| |
| | |
| === Deaktivieren von ptrace() ===
| |
| Der Systemaufruf [[ptrace()]] ] ermöglicht es einem Prozess, die Ausführung eines anderen Prozesses zu beobachten und zu steuern sowie dessen Speicher und Register zu ändern
| |
| * Dieser Aufruf wird in erster Linie von Entwicklern während der Fehlersuche verwendet, beispielsweise bei der Verwendung des Dienstprogramms [[strace]]
| |
| * Wenn [[ptrace()]] nicht benötigt wird, kann es deaktiviert werden, um die Systemsicherheit zu verbessern
| |
| * Dies kann durch Aktivieren des Booleschen Werts [[deny_ptrace]] erfolgen, der allen Prozessen – auch solchen, die in [[unconfined_t]]-Domänen laufen – die Verwendung von [[ptrace()]] auf andere Prozesse verweigert
| |
| | |
| Der [ Boolesche Variable [[deny_ptrace]] ist standardmäßig deaktiviert
| |
| * Um sie zu aktivieren, führen Sie als Root-Benutzer den Befehl [[setsebool -P deny_ptrace on]] aus
| |
| sudo setsebool -P deny_ptrace on
| |
| | |
| Um zu überprüfen, ob diese Boolesche Variable aktiviert ist, verwenden Sie den folgenden Befehl
| |
| getsebool deny_ptrace
| |
|
| |
| deny_ptrace --> on
| |
| | |
| Um diesen Boolean zu deaktivieren, führen Sie den Befehl [[setsebool -P deny_ptrace off]] als Root aus
| |
| sudo setsebool -P deny_ptrace off
| |
| | |
| ; Hinweis
| |
| : Der Befehl [[setsebool -P]] bewirkt dauerhafte Änderungen
| |
| * Verwenden Sie die Option [[-P]] nicht, wenn Sie nicht möchten, dass die Änderungen über Neustarts hinweg bestehen bleiben
| |
| | |
| Dieser Boolean-Wert wirkt sich nur auf Pakete aus, die Teil von Red Hat Enterprise Linux sind
| |
| * Daher könnten Pakete von Drittanbietern weiterhin den Systemaufruf [[ptrace()]] verwenden
| |
| * Um alle Domänen aufzulisten, denen die Verwendung von [[ptrace()]] gestattet ist, geben Sie den folgenden Befehl ein
| |
| * Beachten Sie, dass das Paket setools-console das Dienstprogramm [[sesearch]] bereitstellt und dass das Paket standardmäßig nicht installiert ist
| |
| | |
| sudo sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ‚ ‘ -f 5
| |
| | |
| === Schutz von Miniaturansichten ===
| |
| Die Miniaturansichtssymbole können es einem Angreifer potenziell ermöglichen, mithilfe von Wechselmedien wie USB-Geräten oder CDs in einen gesperrten Rechner einzudringen
| |
| * Wenn das System einen Wechseldatenträger erkennt, führt der Dateimanager Nautilus den Code des Miniaturansicht-Treibers aus, um Miniaturansichten in einem entsprechenden Dateibrowser anzuzeigen, selbst wenn der Rechner gesperrt ist
| |
| * Dieses Verhalten ist unsicher, da ein Angreifer, falls die ausführbaren Miniaturansicht-Dateien anfällig wären, den Code des Miniaturansicht-Treibers nutzen könnte, um den Sperrbildschirm zu umgehen, ohne das Passwort einzugeben
| |
| | |
| Daher wird eine neue SELinux-Richtlinie verwendet, um solche Angriffe zu verhindern
| |
| * Diese Richtlinie stellt sicher, dass alle Miniaturansicht-Treiber gesperrt sind, wenn der Bildschirm gesperrt ist
| |
| * Der Miniaturansicht-Schutz ist sowohl für eingeschränkte als auch für uneingeschränkte Benutzer aktiviert
| |
| | |
| Diese Richtlinie betrifft die folgenden Anwendungen
| |
| * /usr/bin/evince-thumbnailer
| |
| * /usr/bin/ffmpegthumbnailer
| |
| * /usr/bin/gnome-exe-thumbnailer.sh
| |
| * /usr/bin/gnome-nds-thumbnailer
| |
| * /usr/bin/gnome-xcf-thumbnailer
| |
| * /usr/bin/gsf-office-thumbnailer
| |
| * /usr/bin/raw-thumbnailer
| |
| * /usr/bin/shotwell-video-thumbnailer
| |
| * /usr/bin/totem-video-thumbnailer
| |
| * /usr/bin/whaaw-thumbnailer
| |
| * /usr/lib/tumbler-1/tumblerd
| |
| * /usr/lib64/tumbler-1/tumblerd
| |
| | |
| == Links ==
| |
| * [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)
| |
| | |
| [[Kategorie:SELinux/DOC]]
| |