Linux/SELinux/04/07 Kontexte: Unterschied zwischen den Versionen
| Zeile 17: | Zeile 17: | ||
* Wenn Sie beispielsweise eine neue Datei im Verzeichnis [[/etc]] erstellen, das mit dem Typ [[etc_t]] gekennzeichnet ist, erbt die neue Datei denselben Typ | * 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 | ls -dZ - /etc | ||
drwxr-xr-x root root system_u:object_r:‚'etc_t‘':s0 /etc | |||
drwxr-xr-x root root system_u:object_r:‚'etc_t‘':s0 /etc | |||
sudo touch /etc/file1 | sudo touch /etc/file1 | ||
Version vom 28. März 2026, 13:47 Uhr
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
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
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“