|
|
| Zeile 84: |
Zeile 84: |
|
| |
|
| </noinclude> | | </noinclude> |
|
| |
| = TMP =
| |
| == Beschreibung ==
| |
| ; Prozesse und Dateien werden mit einem SELinux-Kontext gekennzeichnet
| |
| * der zusätzliche Informationen enthält, wie beispielsweise einen SELinux-Benutzer, eine Rolle, einen Typ und optional eine Sicherheitsstufe
| |
|
| |
| Bei der Ausführung von SELinux
| |
| * werden all diese Informationen herangezogen, um Entscheidungen zur Zugriffskontrolle zu treffen
| |
|
| |
| <!--
| |
| In Red Hat Enterprise Linux bietet SELinux eine Kombination aus rollenbasierter Zugriffskontrolle (RBAC), Typdurchsetzung (TE) und optional mehrstufiger Sicherheit (MLS)
| |
| -->
| |
|
| |
| ; Beispiel
| |
| Das folgende Beispiel zeigt einen SELinux-Kontext
| |
| * SELinux-Kontexte werden auf Prozessen, Linux-Benutzern und Dateien unter Linux-Betriebssystemen verwendet, auf denen SELinux läuft
| |
|
| |
| ; SELinux-Kontext von Dateien und Verzeichnissen anzeigen
| |
| ~ ls -Z file1
| |
| -rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
| |
|
| |
| === SELinux-Kontext-Syntax ===
| |
| SELinux-Kontexte folgen der
| |
| SELinux user:role:type:level
| |
|
| |
| ; Felder
| |
| {| class="wikitable options big"
| |
| ! Bestandteil
| |
| ! Beispiel
| |
| ! Beschreibung
| |
| |-
| |
| | user
| |
| | <name>_u''
| |
| | SELinux-Benutzer
| |
| * Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts
| |
| |-
| |
| | role
| |
| | <name>_r'‚
| |
| | SELinux-Rolle
| |
| * Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen
| |
| |-
| |
| | type
| |
| | <name>_t'‚
| |
| | SELinux-Typ – 'der wichtigste Bestandteil' im Type-Enforcement-Modell
| |
|
| |
| * Der Typ wird in Zugriffsregeln ausgewertet und 'bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind'
| |
| |-
| |
| | level
| |
| | s0
| |
| | SELinux-Level – die Sicherheitsstufe
| |
| * In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten
| |
|
| |
| * In vielen Standardszenarien erscheint hier einfach s0
| |
| |}
| |
|
| |
| === SELinux-Benutzer ===
| |
| ; Die SELinux-Benutzeridentität ist eine der Richtlinie bekannte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten MLS/MCS-Bereich autorisiert ist
| |
| * Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet
| |
|
| |
| * Dadurch können Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen übernehmen
| |
| * Die zugeordnete SELinux-Benutzeridentität wird im SELinux-Kontext für Prozesse in dieser Sitzung verwendet, um zu definieren, welche Rollen und Ebenen sie betreten dürfen
| |
|
| |
| Geben Sie den folgenden Befehl als root ein, um eine Liste der Zuordnungen zwischen SELinux- und Linux-Benutzerkonten anzuzeigen (das Paket policycoreutils-python muss installiert sein):
| |
| sudo semanage login -l
| |
| Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst
| |
|
| |
| __default__ unconfined_u s0-s0:c0.c1023 *
| |
| root unconfined_u s0-s0:c0.c1023 *
| |
| system_u system_u s0-s0:c0.c1023 *
| |
|
| |
| Die Ausgabe kann von System zu System leicht abweichen:
| |
| * Die Spalte Login Name listet Linux-Benutzer auf
| |
| * Die Spalte SELinux User listet auf, welchem SELinux-Benutzer der Linux-Benutzer zugeordnet ist
| |
|
| |
| * Bei Prozessen legt der SELinux-Benutzer fest, auf welche Rollen und Ebenen zugegriffen werden kann
| |
| * Die Spalte MLS/MCS-Bereich gibt die Ebene an, die von Multi-Level Security (MLS) und Multi-Category Security (MCS) verwendet wird
| |
| * Die Spalte Dienst bestimmt den korrekten SELinux-Kontext, in dem der Linux-Benutzer am System angemeldet sein soll
| |
|
| |
| * Standardmäßig wird das Sternchen (*) verwendet, das für jeden beliebigen Dienst steht
| |
|
| |
| ; Rolle
| |
|
| |
| ; Teil von SELinux ist das Sicherheitsmodell der rollenbasierten Zugriffskontrolle (RBAC)
| |
| * Die Rolle ist ein Attribut von RBAC
| |
| * SELinux-Benutzer sind für Rollen autorisiert, und Rollen sind für Domänen autorisiert
| |
|
| |
| * Die Rolle dient als Vermittler zwischen Domänen und SELinux-Benutzern
| |
| * Die Rollen, auf die zugegriffen werden kann, bestimmen, auf welche Domänen zugegriffen werden kann; letztendlich steuert dies, auf welche Objekttypen zugegriffen werden kann
| |
| * Dies trägt dazu bei, die Anfälligkeit für Angriffe zur Rechteausweitung zu verringern
| |
|
| |
| ; Typ
| |
|
| |
| ; Der Typ ist ein Attribut der Typdurchsetzung
| |
| * Der Typ definiert eine Domäne für Prozesse und einen Typ für Dateien
| |
|
| |
| * SELinux-Richtlinienregeln definieren, wie Typen aufeinander zugreifen können, sei es eine Domäne, die auf einen Typ zugreift, oder eine Domäne, die auf eine andere Domäne zugreift
| |
| * Zugriff ist nur erlaubt, wenn eine spezifische SELinux-Richtlinienregel existiert, die dies zulässt
| |
|
| |
| ; level
| |
|
| |
| ; Die Stufe ist ein Attribut von MLS und MCS
| |
| * Ein MLS-Bereich ist ein Paar von Stufen, das als lowlevel-highlevel geschrieben wird, wenn sich die Stufen unterscheiden, oder als lowlevel, wenn die Stufen identisch sind (s0-s0 entspricht s0)
| |
|
| |
| * Jede Stufe ist ein Paar aus Sensitivitätsstufe und Kategorie, wobei Kategorien optional sind
| |
| * Wenn Kategorien vorhanden sind, wird die Stufe als Sensitivitätsstufe:Kategoriengruppe geschrieben
| |
| * Wenn keine Kategorien vorhanden sind, wird sie als Sensitivitätsstufe geschrieben
| |
|
| |
| ; Wenn die Kategoriengruppe eine zusammenhängende Reihe ist, kann sie abgekürzt werden
| |
| * Beispielsweise entspricht c0.c3 dem Ausdruck c0,c1,c2,c3
| |
| * Die Datei /etc/selinux/targeted/setrans.conf ordnet Stufen (s0:c0) einer für Menschen lesbaren Form zu (nämlich CompanyConfidential)
| |
|
| |
| * In Red Hat Enterprise Linux setzt die gezielte Richtlinie MCS durch, und in MCS gibt es nur eine Sensitivitätsstufe, s0
| |
|
| |
| * MCS in Red Hat Enterprise Linux unterstützt 1024 verschiedene Kategorien: c0 bis c1023. s0-s0:c0.c1023 entspricht der Sensitivitätsstufe s0 und ist für alle Kategorien autorisiert
| |
|
| |
| ; MLS setzt das Bell-La-Padula-Modell für zwingenden Zugriff durch und wird in LSPP-Umgebungen (Labeled Security Protection Profile) verwendet
| |
| * Um MLS-Einschränkungen zu nutzen, installieren Sie das Paket selinux-policy-mls und konfigurieren Sie MLS als Standard-SELinux-Richtlinie
| |
|
| |
| * Die mit Red Hat Enterprise Linux gelieferte MLS-Richtlinie lässt viele Programmdomänen außer Acht, die nicht Teil der evaluierten Konfiguration waren, weshalb MLS auf einer Desktop-Workstation unbrauchbar ist (keine Unterstützung für das X Window System); es kann jedoch eine MLS-Richtlinie aus der vorgelagerten SELinux-Referenzrichtlinie erstellt werden, die alle Programmdomänen enthält
| |
|
| |
| * Weitere Informationen zur MLS-Konfiguration finden Sie unter [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#mls Abschnitt 4.13, „Multi-Level Security (MLS)“]
| |
|
| |
| == Domänenübergänge ==
| |
| Ein Prozess in einer Domäne wechselt in eine andere Domäne, indem er eine Anwendung ausführt, die den Typ entrypoint für die neue Domäne hat
| |
| * Die Berechtigung entrypoint wird in der SELinux-Richtlinie verwendet und steuert, welche Anwendungen zum Betreten einer Domäne verwendet werden können
| |
| * Das folgende Beispiel veranschaulicht einen Domänenwechsel
| |
|
| |
| ; Ein Beispiel für einen Domänenübergang
| |
| Ein Benutzer möchte sein Passwort ändern
| |
| * Dazu führt er das Dienstprogramm passwd aus
| |
|
| |
| Die ausführbare Datei /usr/bin/passwd ist mit dem Typ passwd_exec_t gekennzeichnet:
| |
| ~ ls -Z /usr/bin/passwd
| |
| -rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
| |
|
| |
| Das Dienstprogramm passwd greift auf /etc/shadow zu, das mit dem Typ shadow_t gekennzeichnet ist:
| |
| ~ ls -Z /etc/shadow
| |
| -r--------
| |
| root root system_u:object_r:shadow_t:s0 /etc/shadow
| |
|
| |
| Eine SELinux-Richtlinienregel besagt, dass Prozesse, die in der passwd_t-Domäne laufen, Dateien lesen und schreiben dürfen, die mit dem Typ shadow_t gekennzeichnet sind
| |
| * Der Typ shadow_t wird nur auf Dateien angewendet, die für eine Passwortänderung erforderlich sind
| |
| * Dazu gehören /etc/gshadow, /etc/shadow und deren Sicherungsdateien
| |
|
| |
| Eine SELinux-Richtlinienregel besagt, dass für die passwd_t-Domäne die entrypoint-Berechtigung auf den Typ passwd_exec_t gesetzt ist
| |
|
| |
| Wenn ein Benutzer das Dienstprogramm passwd ausführt, wechselt der Shell-Prozess des Benutzers in die passwd_t-Domäne
| |
| * Da bei SELinux die Standardaktion „Verweigern“ ist und eine Regel existiert, die (unter anderem) Anwendungen, die in der passwd_t-Domäne laufen, den Zugriff auf Dateien mit dem Typ shadow_t erlaubt, darf die passwd-Anwendung auf /etc/shadow zugreifen und das Passwort des Benutzers aktualisieren
| |
|
| |
| Dieses Beispiel ist nicht erschöpfend und dient als grundlegendes Beispiel zur Erläuterung des Domänenwechsels
| |
| * Obwohl es eine tatsächliche Regel gibt, die es Subjekten, die in der passwd_t-Domäne laufen, erlaubt, auf Objekte zuzugreifen, die mit dem Dateityp shadow_t gekennzeichnet sind, müssen andere SELinux-Richtlinienregeln erfüllt sein, bevor das Subjekt in eine neue Domäne wechseln kann
| |
|
| |
| : In diesem Beispiel stellt die Typdurchsetzung Folgendes sicher
| |
| * Die passwd_t-Domäne kann nur durch die Ausführung einer Anwendung betreten werden, die mit dem Typ passwd_exec_t gekennzeichnet ist; sie darf nur aus autorisierten gemeinsam genutzten Bibliotheken, wie z. B. dem Typ lib_t, ausführen; und sie darf keine anderen Anwendungen ausführen
| |
| * Nur autorisierte Domänen, wie z. B. passwd_t, können in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind
| |
| * Selbst wenn andere Prozesse mit Superuser-Rechten laufen, können diese Prozesse nicht in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind, da sie nicht in der Domäne passwd_t laufen
| |
| * Nur autorisierte Domänen können in die passwd_t-Domäne wechseln
| |
| * Beispielsweise hat der in der sendmail_t-Domäne laufende sendmail-Prozess keinen legitimen Grund, passwd<nowiki> auszuführen; daher kann er niemals in die </nowiki>passwd_t-Domäne wechseln
| |
| * Prozesse, die in der passwd_t-Domäne laufen, können nur auf autorisierte Typen lesen und schreiben, wie z. B. Dateien, die mit den Typen etc_t oder shadow_t gekennzeichnet sind
| |
| * Dies verhindert, dass die passwd-Anwendung dazu verleitet wird, beliebige Dateien zu lesen oder zu schreiben
| |
|
| |
| # [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#sect-Security-Enhanced_Linux-SELinux_Contexts-Domain_Transitions 2.1. Domänenübergänge]
| |
|
| |
| == Prozesskontext ==
| |
| Verwenden Sie den Befehl ps -eZ, um den SELinux-Kontext für Prozesse anzuzeigen
| |
|
| |
| ; Beispiel
| |
| Anzeigen des SELinux-Kontexts für das Dienstprogramm passwd
| |
| # Öffnen Sie ein Terminal, z. B. über Anwendungen → Systemwerkzeuge → Terminal
| |
| # Führen Sie das Dienstprogramm passwd aus
| |
|
| |
| Geben Sie kein neues Passwort ein:
| |
| ~ passwd
| |
| Passwort für Benutzer ‚'user_name‘' ändern
| |
| Passwort für ‚'user_name‘' ändern
| |
| (aktuelles) UNIX-Passwort:
| |
|
| |
| Öffnen Sie einen neuen Tab oder ein weiteres Terminal und geben Sie den folgenden Befehl ein
| |
|
| |
| Die Ausgabe sieht in etwa wie folgt aus:
| |
| ~ ps -eZ | grep passwd
| |
| unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd
| |
|
| |
| Drücken Sie im ersten Tab/Terminal Strg+C, um das Dienstprogramm passwd abzubrechen
| |
|
| |
| In diesem Beispiel wechselt der Shell-Prozess des Benutzers in die Domäne passwd_t, wenn das Dienstprogramm passwd (mit dem Typ passwd_exec_t gekennzeichnet) ausgeführt wird
| |
| * Beachten Sie, dass der Typ eine Domäne für Prozesse und einen Typ für Dateien definiert
| |
|
| |
| Um die SELinux-Kontexte aller laufenden Prozesse anzuzeigen, führen Sie das Dienstprogramm ps erneut aus
| |
|
| |
| Beachten Sie, dass es sich bei der folgenden Ausgabe um ein gekürztes Beispiel handelt, das auf Ihrem System abweichen kann:
| |
| ps -eZ
| |
| system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient
| |
| system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd
| |
| system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm
| |
| system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond
| |
| system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops
| |
| system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd
| |
|
| |
| Die Rolle system_r wird für Systemprozesse wie Daemons verwendet
| |
| * Type Enforcement trennt dann jede Domäne
| |
|
| |
| # [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Processes 2.2. SELinux-Kontexte für Prozesse]
| |
|
| |
| == Benutzerkontext ==
| |
| Verwenden Sie den folgenden Befehl, um den SELinux-Kontext anzuzeigen, der Ihrem Linux-Benutzer zugeordnet ist:
| |
| id -Z
| |
| unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
| |
|
| |
| ; Standardmäßig laufen Linux-Benutzer in der unconfined-Rolle
| |
| Dieser SELinux-Kontext zeigt, dass der Linux-Benutzer dem SELinux-Benutzer <tt>unconfined_u</tt> zugeordnet ist, in der Rolle <tt>unconfined_r</tt> läuft und in der Domäne <tt>unconfined_t</tt> ausgeführt wird. <tt>s0-s0</tt> ist ein MLS-Bereich, der in diesem Fall mit <tt>s0</tt> identisch ist.
| |
| * Die Kategorien, auf die der Benutzer Zugriff hat, werden durch <tt>c0.c1023</tt> definiert, was alle Kategorien (<tt>c0</tt> bis <tt>c1023</tt>) umfasst.
| |
|
| |
| # [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Users 2.3. SELinux-Kontexte für Benutzer]
| |