Zum Inhalt springen

Linux/SELinux/03 Default Policy: Unterschied zwischen den Versionen

Aus Foxwiki
Zeile 234: Zeile 234:


= TMP =
= TMP =
=== Eingeschränkte und uneingeschränkte Benutzer ===
Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet
* Dadurch können Linux-Benutzer die Einschränkungen von SELinux-Benutzern erben
* Diese Zuordnung der Linux-Benutzer lässt sich durch Ausführen des Befehls `semanage login -l` als root anzeigen:
# semanage login -l
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst
__default__ unconfined_u s0-s0:c0.c1023 <nowiki>*</nowiki> root unconfined_u s0-s0:c0.c1023 <nowiki>*</nowiki> system_u system_u s0-s0:c0.c1023 <nowiki>*</nowiki>
In Linux werden Linux-Benutzer standardmäßig dem SELinux-Login __default__ zugeordnet, der wiederum dem SELinux-Benutzer unconfined_u zugeordnet ist
* Die folgende Zeile definiert die Standardzuordnung:
__default__ unconfined_u s0-s0:c0.c1023
Das folgende Verfahren zeigt, wie Sie einen neuen Linux-Benutzer zum System hinzufügen und diesen Benutzer dem SELinux-Benutzer unconfined_u zuordnen
* Es wird davon ausgegangen, dass der Root-Benutzer im unconfined-Modus läuft, wie es in Linux standardmäßig der Fall ist:
'''Vorgehensweise 3.4. Zuordnung eines neuen Linux-Benutzers zum SELinux-Benutzer unconfined_u'''# Geben Sie als root den folgenden Befehl ein, um einen neuen Linux-Benutzer namens newuser anzulegen:
# useradd newuser
# So weisen Sie dem Linux-Benutzer newuser ein Passwort zu
* Geben Sie als root den folgenden Befehl ein: # passwd newuser Passwort für Benutzer newuser ändern
* Neues UNIX-Passwort: ‚'Geben Sie ein Passwort ein‘' Neues UNIX-Passwort erneut eingeben: ‚'Geben Sie dasselbe Passwort erneut ein‘' passwd: Alle Authentifizierungstoken wurden erfolgreich aktualisiert
# Melden Sie sich von Ihrer aktuellen Sitzung ab und melden Sie sich als Linux-Benutzer „newuser“ an
* Bei der Anmeldung ordnet das PAM-Modul '''pam_selinux''' den Linux-Benutzer automatisch einem SELinux-Benutzer zu (in diesem Fall unconfined_u) und richtet den resultierenden SELinux-Kontext ein
* Die Shell des Linux-Benutzers wird dann mit diesem Kontext gestartet
*
Geben Sie den folgenden Befehl ein, um den Kontext eines Linux-Benutzers anzuzeigen: [newuser@localhost $ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 '''Hinweis''' Wenn Sie den Benutzer „newuser“ auf Ihrem System nicht mehr benötigen, melden Sie sich von der Sitzung des Linux-Benutzers „newuser“ ab, melden Sie sich mit Ihrem Konto an und führen Sie den Befehl userdel -r newuser als Root aus
* Dadurch wird newuser zusammen mit seinem Home-Verzeichnis entfernt
Eingeschränkte und uneingeschränkte Linux-Benutzer unterliegen Prüfungen auf ausführbaren und beschreibbaren Speicher und werden zudem durch MCS oder MLS eingeschränkt
Um die verfügbaren SELinux-Benutzer aufzulisten, geben Sie den folgenden Befehl ein:
$seinfo -u Benutzer: 8
sysadm_u
system_u
xguest_u
root
guest_u
staff_u
user_u
unconfined_u
Beachten Sie, dass der Befehl „seinfo“ vom Paket „setools-console“ bereitgestellt wird, das standardmäßig nicht installiert ist
Wenn ein nicht eingeschränkter Linux-Benutzer eine Anwendung ausführt, die laut SELinux-Richtlinie als solche definiert ist, die von der Domäne „unconfined_t“ in ihre eigene eingeschränkte Domäne wechseln kann, unterliegt der nicht eingeschränkte Linux-Benutzer dennoch den Einschränkungen dieser eingeschränkten Domäne* Der Sicherheitsvorteil dabei ist, dass die Anwendung auch dann eingeschränkt bleibt, wenn ein Linux-Benutzer uneingeschränkt arbeitet* Daher kann die Ausnutzung einer Schwachstelle in der Anwendung durch die Richtlinie begrenzt werdenEbenso können wir diese Prüfungen auf eingeschränkte Benutzer anwenden* Jeder eingeschränkte Linux-Benutzer unterliegt den Einschränkungen einer eingeschränkten Benutzerdomäne* Die SELinux-Richtlinie kann auch einen Übergang von einer eingeschränkten Benutzerdomäne zu einer eigenen Ziel-Einschränkungsdomäne definieren* In einem solchen Fall unterliegen eingeschränkte Linux-Benutzer den Einschränkungen dieser Ziel-Einschränkungsdomäne* Der wichtigste Punkt ist, dass den eingeschränkten Benutzern entsprechend ihrer Rolle besondere Privilegien zugewiesen werden* In der folgenden Tabelle finden Sie Beispiele für grundlegende eingeschränkte Domänen für Linux-Benutzer unter Linux:Tabelle 3.1. SELinux-Benutzerfähigkeiten{| style="border-spacing:0;width:17cm;"! align="center" |Benutzer! align="center" |Rolle! align="center" |Domäne! align="center" |X Window System! align="center" |su oder sudo! align="center" |Ausführen im Home-Verzeichnis und in /tmp (Standard)! align="center" |Netzwerk|- style="border:none;padding:0.049cm;"|sysadm_u|sysadm_r|sysadm_t|ja|'''su''' und '''sudo'''|ja|ja|- style="border:none;padding:0.049cm;"|staff_u|staff_r|staff_t|ja|nur '''sudo'''|ja|ja|- style="border:none;padding:0.049cm;"|user_u|user_r|user_t|ja|nein|ja|ja|- style="border:none;padding:0.049cm;"|guest_u|guest_r|guest_t
|nein
|nein
|ja
|nein
|- style="border:none;padding:0.049cm;"
|xguest_u
|xguest_r
|xguest_t
|ja
|nein
|ja
|nur Firefox
|-
|}
* Linux-Benutzer in den Domänen user_t, guest_t und xguest_t können Anwendungen mit festgelegter Benutzer-ID (setuid) nur ausführen, wenn die SELinux-Richtlinie dies zulässt (z. B. passwd)
* Diese Benutzer können die setuid-Anwendungen su und sudo nicht ausführen und daher diese Anwendungen nicht nutzen, um Root-Rechte zu erlangen
* Linux-Benutzer in den Domänen sysadm_t, staff_t, user_t und xguest_t können sich über das X Window System und ein Terminal anmelden
* Standardmäßig können Linux-Benutzer in den Domänen staff_t, user_t, guest_t und xguest_t Anwendungen in ihren Home-Verzeichnissen und in /tmp ausführen
* Um zu verhindern, dass sie Anwendungen, die die Berechtigungen der Benutzer erben, in Verzeichnissen ausführen, auf die sie Schreibzugriff haben, setzen Sie die Booleans „guest_exec_content“ und „xguest_exec_content“ auf „off“
* Dies hilft dabei, zu verhindern, dass fehlerhafte oder bösartige Anwendungen die Dateien der Benutzer verändern
* Informationen darüber, wie Sie Benutzern das Ausführen von Anwendungen in ihren Home-Verzeichnissen und in /tmp erlauben oder verhindern können, finden Sie in Abschnitt 6.6, „Booleane für Benutzer, die Anwendungen ausführen“
* Der einzige Netzwerkzugriff, über den Linux-Benutzer in der Domäne xguest_t verfügen, ist die Verbindung von '''Firefox''' zu Webseiten
Beachten Sie, dass system_u eine spezielle Benutzeridentität für Systemprozesse und -objekte ist
* Sie darf niemals mit einem Linux-Benutzer verknüpft werden
* Außerdem sind unconfined_u und root nicht eingeschränkte Benutzer
* Aus diesen Gründen sind sie nicht in der oben genannten Tabelle der SELinux-Benutzerfähigkeiten enthalten
Neben den bereits erwähnten SELinux-Benutzern gibt es spezielle Rollen, die diesen Benutzern zugeordnet werden können
* Diese Rollen legen fest, was SELinux dem Benutzer erlaubt: * webadm_r kann nur SELinux-Typen verwalten, die mit dem Apache-HTTP-Server zusammenhängen
* Weitere Informationen finden Sie in Abschnitt 13.2, „Typen“
* dbadm_r kann nur SELinux-Typen verwalten, die mit der MariaDB-Datenbank und dem PostgreSQL-Datenbankmanagementsystem zusammenhängen
* Weitere Informationen finden Sie in Abschnitt 20.2, „Typen“ und Abschnitt 21.2, „Typen“
* logadm_r kann nur SELinux-Typen verwalten, die mit den syslog- und auditlog-Prozessen zusammenhängen
* secadm_r kann nur SELinux verwalten
* auditadm_r kann nur Prozesse verwalten, die mit dem Audit-Subsystem zusammenhängen
Um alle verfügbaren Rollen aufzulisten, geben Sie den folgenden Befehl ein:
$ seinfo -r
Wie bereits erwähnt, wird der Befehl seinfo vom Paket setools-console bereitgestellt, das standardmäßig nicht installiert ist
=== Der sudo-Übergang und SELinux-Rollen ===
=== Der sudo-Übergang und SELinux-Rollen ===
In bestimmten Fällen müssen eingeschränkte Benutzer eine administrative Aufgabe ausführen, die Root-Rechte erfordert
In bestimmten Fällen müssen eingeschränkte Benutzer eine administrative Aufgabe ausführen, die Root-Rechte erfordert

Version vom 23. März 2026, 12:35 Uhr

SELinux/DOC/03 Targeted Policy

Linux/SELinux/03 Default Policy - Beschreibung

Beschreibung

Die Targeted Policy ist die in Linux verwendete Standard-SELinux-Richtlinie
  • Bei Verwendung der Targeted Policy laufen Prozesse, die als „targeted“ gekennzeichnet sind, in einer eingeschränkten Domäne, während Prozesse, die nicht als „targeted“ gekennzeichnet sind, in einer uneingeschränkten Domäne laufen
  • Beispielsweise laufen angemeldete Benutzer standardmäßig in der Domäne unconfined_t, und von init gestartete Systemprozesse laufen in der Domäne unconfined_service_t; beide Domänen sind unconfined

Prüfungen auf ausführbaren und beschreibbaren Speicher können sowohl für eingeschränkte als auch für unconfined Domänen gelten

  • Standardmäßig können Subjekte, die in einer unconfined Domäne laufen, jedoch beschreibbaren Speicher zuweisen und diesen ausführen
  • Diese Speicherprüfungen können durch das Setzen von Booleschen Werten aktiviert werden, wodurch die SELinux-Richtlinie zur Laufzeit geändert werden kann
  • Die Konfiguration der Booleschen Werte wird später behandelt

Eingeschränkte Prozesse

Fast jeder Dienst, der auf einem Netzwerk lauscht, wie sshd oder httpd, ist in Linux eingeschränkt

  • Auch die meisten Prozesse, die als Root-Benutzer laufen und Aufgaben für Benutzer ausführen, wie beispielsweise das Dienstprogramm passwd, sind eingeschränkt
  • Wenn ein Prozess eingeschränkt ist, läuft er in seiner eigenen Domäne, wie beispielsweise der httpd-Prozess, der in der Domäne httpd_t läuft
  • Wenn ein eingeschränkter Prozess von einem Angreifer kompromittiert wird, sind je nach Konfiguration der SELinux-Richtlinie der Zugriff des Angreifers auf Ressourcen und der mögliche Schaden, den er anrichten kann, begrenzt

Führen Sie diesen Vorgang durch, um sicherzustellen, dass SELinux aktiviert ist und das System für die Durchführung des folgenden Beispiels vorbereitet ist:

Vorgang 3.1. Überprüfen des SELinux-Status

  1. Überprüfen Sie, ob SELinux aktiviert ist, im Enforcing-Modus läuft und die Targeted-Richtlinie verwendet wird

Die korrekte Ausgabe sollte in etwa wie folgt aussehen:

$ sestatus
SELinux-Status: aktiviert
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: aktiviert
Status der Richtlinie deny_unknown: erlaubt
Maximale Kernel-Richtlinienversion: 30

Siehe Abschnitt 4.4, „Dauerhafte Änderungen an SELinux-Zuständen und -Modi“ für detaillierte Informationen zum Ändern von SELinux-Modi

  1. Erstellen Sie als root eine Datei im Verzeichnis /var/www/html/: # touch /var/www/html/testfile
  2. Geben Sie den folgenden Befehl ein, um den SELinux-Kontext der neu erstellten Datei anzuzeigen: $ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r: httpd_sys_content_t:s0 /var/www/html/testfile Standardmäßig laufen Linux-Benutzer unter Linux im unconfined-Modus, weshalb die Datei testfile mit dem SELinux-Benutzer unconfined_u gekennzeichnet ist
  • RBAC wird für Prozesse verwendet, nicht für Dateien
  • Rollen haben für Dateien keine Bedeutung; die Rolle „object_r“ ist eine generische Rolle, die für Dateien (auf persistenten Speichern und Netzwerkdateisystemen) verwendet wird
  • Im Verzeichnis /proc können Dateien, die sich auf Prozesse beziehen, die Rolle „system_r“ verwenden
  • Der Typ „httpd_sys_content_t“ erlaubt dem httpd-Prozess den Zugriff auf diese Datei

Das folgende Beispiel zeigt, wie SELinux den Apache-HTTP-Server (httpd) daran hindert, Dateien zu lesen, die nicht korrekt gekennzeichnet sind, wie z. B. Dateien, die für die Verwendung durch Samba vorgesehen sind

  • Dies ist ein Beispiel und sollte nicht in der Produktion verwendet werden
  • Es wird davon ausgegangen, dass die Pakete httpd und wget installiert sind, die SELinux-Targeted-Policy verwendet wird und dass SELinux im Enforcing-Modus läuft

Vorgehensweise 3.2. Ein Beispiel für einen eingeschränkten Prozess# Starten Sie als Root den httpd-Daemon:

# systemctl start httpd.service

Überprüfen Sie, ob der Dienst läuft

  • Die Ausgabe sollte die folgenden Informationen enthalten (nur der Zeitstempel weicht ab):
$ systemctl status httpd.service

httpd.service – Der Apache-HTTP-Server

Geladen: geladen (/usr/lib/systemd/system/httpd.service; deaktiviert)
Aktiv: aktiv (läuft) seit Mo 05.08.2013 14:00:55 MESZ; vor 8 s
  1. Wechseln Sie in ein Verzeichnis, auf das Ihr Linux-Benutzer Schreibzugriff hat, und geben Sie den folgenden Befehl ein
  • Sofern keine Änderungen an der Standardkonfiguration vorgenommen wurden, wird dieser Befehl erfolgreich ausgeführt: $ wget http://localhost/testfile --2009-11-06 17:43:01-- http://localhost/testfile Auflösen von localhost... 127.0.0.1 Verbindung zu localhost|127.0.0.1|:80...hergestellt
  • HTTP-Anfrage gesendet, warte auf Antwort... 200 OK Länge: 0 [text/plain] Speichere in: `testfile'
[ <=> ] 0 --.-K/s in 0s
2009-11-06 17:43:01 (0,00 B/s) - `testfile' gespeichert [0/0]
  1. Der Befehl chcon kennzeichnet Dateien neu; solche Kennzeichnungsänderungen bleiben jedoch nicht erhalten, wenn das Dateisystem neu gekennzeichnet wird
  • Für dauerhafte Änderungen, die eine Neukennzeichnung des Dateisystems überstehen, verwenden Sie das Dienstprogramm semanage, das später behandelt wird
  • Geben Sie als root den folgenden Befehl ein, um den Typ auf einen von Samba verwendeten Typ zu ändern: # chcon -t samba_share_t /var/www/html/testfile Geben Sie den folgenden Befehl ein, um die Änderungen anzuzeigen: $ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
  1. Beachten Sie, dass die aktuellen DAC-Berechtigungen dem httpd-Prozess Zugriff auf testfile gewähren
  • Wechseln Sie in ein Verzeichnis, auf das Ihr Benutzer Schreibzugriff hat, und geben Sie den folgenden Befehl ein
  • Sofern keine Änderungen an der Standardkonfiguration vorgenommen wurden, schlägt dieser Befehl fehl: $ wget http://localhost/testfile --2009-11-06 14:11:23-- http://localhost/testfile Resolving localhost... 127.0.0.1 Verbindung zu localhost|127.0.0.1|:80 wird hergestellt..
  • verbunden
  • HTTP-Anfrage gesendet, warte auf Antwort... 403 Forbidden 2009-11-06 14:11:23 ERROR 403: Forbidden
  1. Entfernen Sie als root die Datei „testfile“: # rm -i /var/www/html/testfile
  2. Wenn Sie httpd nicht benötigen, geben Sie als root den folgenden Befehl ein, um den Dienst zu beenden: # systemctl stop httpd.service

Dieses Beispiel veranschaulicht die zusätzliche Sicherheit, die SELinux bietet

  • Obwohl die DAC-Regeln dem httpd-Prozess in Schritt 2 den Zugriff auf testfile erlaubten, verweigerte SELinux den Zugriff, da die Datei mit einem Typ gekennzeichnet war, auf den der httpd-Prozess keinen Zugriff hat

Wenn der auditd-Daemon läuft, wird ein Fehler ähnlich dem folgenden in /var/log/audit/audit.log protokolliert:

type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } für pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit= -13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsg id=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key= (null)

Außerdem wird ein Fehler ähnlich dem folgenden in /var/log/httpd/error_log protokolliert:

[Mi 06. Mai 23:00:54 2009] [Fehler] [Client ‚'127.0.0.1‘'] (13)Zugriff verweigert: Zugriff auf /testfile verweigert

Uneingeschränkte Prozesse

Nicht eingeschränkte Prozesse laufen in nicht eingeschränkten Domänen; beispielsweise laufen von init ausgeführte nicht eingeschränkte Dienste in der Domäne unconfined_service_t, von Kernel ausgeführte nicht eingeschränkte Dienste in der Domäne kernel_t und von nicht eingeschränkten Linux-Benutzern ausgeführte nicht eingeschränkte Dienste in der Domäne unconfined_t

  • Für nicht eingeschränkte Prozesse gelten SELinux-Richtlinienregeln, es gibt jedoch Richtlinienregeln, die Prozessen, die in nicht eingeschränkten Domänen laufen, fast uneingeschränkten Zugriff gewähren
  • Prozesse, die in nicht eingeschränkten Domänen laufen, greifen ausschließlich auf DAC-Regeln zurück
  • Wenn ein nicht eingeschränkter Prozess kompromittiert wird, verhindert SELinux nicht, dass ein Angreifer Zugriff auf Systemressourcen und Daten erhält, aber natürlich werden weiterhin DAC-Regeln angewendet
  • SELinux ist eine Sicherheitserweiterung zusätzlich zu den DAC-Regeln – es ersetzt diese nicht

Um sicherzustellen, dass SELinux aktiviert ist und das System für die Ausführung des folgenden Beispiels vorbereitet ist, führen Sie die in Abschnitt 3.1 beschriebene Vorgehensweise 3.1, „So überprüfen Sie den SELinux-Status“, durch, „Eingeschränkte Prozesse“

Das folgende Beispiel zeigt, wie der Apache-HTTP-Server (httpd) auf Daten zugreifen kann, die für die Verwendung durch Samba vorgesehen sind, wenn er ohne Einschränkungen ausgeführt wird

  • Beachten Sie, dass unter Linux der httpd-Prozess standardmäßig in der eingeschränkten httpd_t-Domäne läuft
  • Dies ist ein Beispiel und sollte nicht in einer Produktionsumgebung verwendet werden
  • Es wird davon ausgegangen, dass die Pakete httpd, wget, dbus und audit installiert sind, dass die SELinux-Targeted-Policy verwendet wird und dass SELinux im Enforcing-Modus läuft

Vorgehensweise 3.3. Ein Beispiel für einen nicht eingeschränkten Prozess# Der Befehl chcon kennzeichnet Dateien neu; solche Label-Änderungen bleiben jedoch nicht erhalten, wenn das Dateisystem neu gekennzeichnet wird

  • Für dauerhafte Änderungen, die eine Neukennzeichnung des Dateisystems überstehen, verwenden Sie das Dienstprogramm semanage, das später behandelt wird
  • Geben Sie als Root-Benutzer den folgenden Befehl ein, um den Typ auf einen von Samba verwendeten Typ zu ändern:
  1. chcon -t samba_share_t /var/www/html/testfile

Zeigen Sie die Änderungen an:

$ ls -Z /var/www/html/testfile
-rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
  1. Geben Sie den folgenden Befehl ein, um zu überprüfen, ob der httpd-Prozess nicht läuft: $ systemctl status httpd.service httpd.service - Der Apache-HTTP-Server Geladen: geladen (/usr/lib/systemd/system/httpd.service; deaktiviert) Aktiv: inaktiv (beendet) Falls die Ausgabe abweicht, geben Sie den folgenden Befehl als Root ein, um den httpd-Prozess zu stoppen: # systemctl stop httpd.service
  2. Damit der httpd-Prozess uneingeschränkt läuft, geben Sie als root den folgenden Befehl ein, um den Typ der Datei /usr/sbin/httpd so zu ändern, dass sie nicht in eine eingeschränkte Domäne wechselt: # chcon -t bin_t /usr/sbin/httpd
  3. Überprüfen Sie, ob /usr/sbin/httpd mit dem Typ bin_t gekennzeichnet ist: $ ls -Z /usr/sbin/httpd -rwxr-xr-x
  • root root system_u:object_r:bin_t:s0 /usr/sbin/httpd
  1. Starten Sie als root den httpd-Prozess und überprüfen Sie, ob er erfolgreich gestartet wurde: # systemctl start httpd.service # systemctl status httpd.service httpd.service – Der Apache-HTTP-Server Geladen: geladen (/usr/lib/systemd/system/httpd.service; deaktiviert) Aktiv: aktiv (läuft) seit Do 15.08.2013 11:17:01 MESZ; vor 5 s
  1. Geben Sie den folgenden Befehl ein, um httpd in der Domäne unconfined_service_t anzuzeigen: $ ps -eZ | grep httpd system_u:system_r:unconfined_service_t:s0 11884 ? 00:00:00 httpd system_u:system_r:unconfined_service_t:s0 11885 ?
00:00:00 httpd system_u:system_r:unconfined_service_t:s0 11886 ? 00:00:00 httpd system_u:system_r:unconfined_service_t:s0 11887 ? 00:00:00 httpd system_u:system_r:unconfined_service_t:s0 11888 ? 00:00:00 httpd system_u:system_r:unconfined_service_t:s0 11889 ? 00:00:00 httpd
  1. Wechseln Sie in ein Verzeichnis, auf das Ihr Linux-Benutzer Schreibzugriff hat, und geben Sie den folgenden Befehl ein
  • Sofern keine Änderungen an der Standardkonfiguration vorgenommen wurden, wird dieser Befehl erfolgreich ausgeführt: $ wget http://localhost/testfile --2009-05-07 01:41:10-- http://localhost/testfile Auflösen von localhost... 127.0.0.1 Verbindung zu localhost|127.0.0.1|:80 wird hergestellt..
  • verbunden
  • HTTP-Anfrage gesendet, warte auf Antwort... 200 OK Länge: 0 [text/plain] Speichern unter: `testfile'

[ <=> ]--.-K/s in 0s

07.05.2009 01:41:10 (0,00 B/s) – `testfile' gespeichert [0/0]

Obwohl der httpd-Prozess keinen Zugriff auf Dateien hat, die mit dem Typ samba_share_t gekennzeichnet sind, läuft httpd in der uneingeschränkten Domäne unconfined_service_t und greift auf DAC-Regeln zurück, sodass der Befehl wget erfolgreich ist

  • Wäre httpd in der eingeschränkten Domäne httpd_t gelaufen, wäre der Befehl wget fehlgeschlagen
  1. Das Dienstprogramm restorecon stellt den Standard-SELinux-Kontext für Dateien wieder her
  • Geben Sie als root den folgenden Befehl ein, um den Standard-SELinux-Kontext für /usr/sbin/httpd wiederherzustellen: # restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_exec_t:s0->system_u:object_r:httpd_exec_t:s0

Vergewissern Sie sich, dass /usr/sbin/httpd mit dem Typ httpd_exec_t gekennzeichnet ist:

$ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
  1. Geben Sie als root den folgenden Befehl ein, um httpd neu zu starten
  • Vergewissern Sie sich nach dem Neustart, dass httpd in der eingeschränkten httpd_t-Domäne läuft: # systemctl restart httpd.service $ ps -eZ | grep httpd system_u:system_r:httpd_t:s0 8883 ? 00:00:00 httpd system_u:system_r: httpd_t:s0 8884 ? 00:00:00 httpd system_u:system_r:httpd_t:s0 8885 ?
00:00:00 httpd system_u:system_r:httpd_t:s0 8886 ? 00:00:00 httpd system_u:system_r:httpd_t:s0 8887 ? 00:00:00 httpd system_u:system_r:httpd_t:s0 8888 ? 00:00:00 httpd system_u:system_r:httpd_t:s0 8889 ? 00:00:00 httpd
  1. Entfernen Sie als root die Datei „testfile“: # rm -i /var/www/html/testfile rm: reguläre leere Datei `/var/www/html/testfile` entfernen? y
  2. Wenn httpd nicht laufen muss, geben Sie als root den folgenden Befehl ein, um httpd zu stoppen: # systemctl stop httpd.service

Die Beispiele in diesen Abschnitten zeigen, wie Daten vor einem kompromittierten eingeschränkten Prozess (durch SELinux geschützt) geschützt werden können, sowie wie Daten für einen Angreifer aus einem kompromittierten uneingeschränkten Prozess (nicht durch SELinux geschützt)

Installation

<syntaxhighlight lang="bash" highlight="1" line copy> < /syntaxhighlight>

Aufruf

<syntaxhighlight lang="bash" highlight="1" line copy> < /syntaxhighlight>

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

<syntaxhighlight lang="bash" highlight="1" line copy> < /syntaxhighlight>

<syntaxhighlight lang="bash" highlight="" line> < /syntaxhighlight>

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch


Dokumentation

Projekt


TMP

Der sudo-Übergang und SELinux-Rollen

In bestimmten Fällen müssen eingeschränkte Benutzer eine administrative Aufgabe ausführen, die Root-Rechte erfordert

  • Dazu muss ein solcher eingeschränkter Benutzer mithilfe des Befehls sudo die SELinux-Rolle „confined administrator“ annehmen
  • Der Befehl sudo wird verwendet, um vertrauenswürdigen Benutzern administrativen Zugriff zu gewähren
  • Wenn Benutzer einem administrativen Befehl sudo voranstellen, werden sie zur Eingabe ihres „eigenen“ Passworts aufgefordert
  • Nach der Authentifizierung und vorausgesetzt, der Befehl ist zulässig, wird der administrative Befehl so ausgeführt, als wären sie der Root-Benutzer

Wie in Tabelle 3.1, „SELinux-Benutzerfähigkeiten“, dargestellt, dürfen standardmäßig nur die eingeschränkten SELinux-Benutzer staff_u und sysadm_u sudo verwenden

  • Wenn solche Benutzer einen Befehl mit sudo ausführen, kann ihre Rolle basierend auf den Regeln geändert werden, die in der Konfigurationsdatei /etc/sudoers oder in einer entsprechenden Datei im Verzeichnis /etc/sudoers.d/ festgelegt sind, sofern eine solche Datei existiert

Weitere Informationen zu sudo finden Sie im Abschnitt „Gaining Privileges“ im Linux 7 System Administrator's Guide

Vorgehensweise 3.5. Konfigurieren des sudo-Übergangs

Diese Vorgehensweise zeigt, wie Sie sudo so einrichten, dass ein neu erstellter eingeschränkter Benutzer vom Typ ‚'SELinux_user_u‘' von einer ‚'default_role_r‘'-Rolle in eine ‚'administrator_r‘'-Administratorrolle wechselt

Hinweis
Um eine eingeschränkte Administratorrolle für einen bereits vorhandenen SELinux-Benutzer zu konfigurieren, überspringen Sie die ersten beiden Schritte
  1. Erstellen Sie einen neuen SELinux-Benutzer und legen Sie die Standard-SELinux-Rolle sowie eine zusätzliche eingeschränkte Administratorrolle für diesen Benutzer fest:
  1. semanage user -a -r s0-s0:c0.c1023 -R „‚'default_role_r‘' ‚'administrator_r‘'“ ‚'SELinux_user_u‘'
  1. Richten Sie die Standard-SELinux-Policy-Kontextdatei ein
  • Um beispielsweise die gleichen SELinux-Regeln wie der SELinux-Benutzer „staff_u“ zu verwenden, kopieren Sie die Kontextdatei von „staff_u“: # cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/‚'SELinux_user_u‘'
  1. Ordnen Sie den neu erstellten SELinux-Benutzer einem bestehenden Linux-Benutzer zu: semanage login -a -s ‚'SELinux_user_u‘' -rs0:c0.c1023 ‚'linux_user‘'
  2. Erstellen Sie eine neue Konfigurationsdatei mit demselben Namen wie Ihr Linux-Benutzer im Verzeichnis /etc/sudoers.d/ und fügen Sie folgende Zeichenfolge hinzu: # echo „‚'linux_user‘' ALL=(ALL) TYPE=‚'administrator_t‘' ROLE=‚'administrator_r‘' /bin/bash “ > /etc/sudoers.d/‚'linux_user‘ ‚
  3. Verwenden Sie das Dienstprogramm restorecon, um das Home-Verzeichnis von ‘'linux_user'‚ neu zu kennzeichnen: # restorecon -FR -v /home/‘'linux_user
  4. Melden Sie sich als der neu erstellte Linux-Benutzer am System an und überprüfen Sie, ob der Benutzer mit der Standard-SELinux-Rolle gekennzeichnet ist: $ id -Z ‚'SELinux_user_u‘':‚'default_role_r‘':‚'SELinux_user_t‘':s0:c0.c1023
  5. Führen Sie sudo aus, um den SELinux-Kontext des Benutzers auf die in /etc/sudoers.d/‚'linux_user‘' angegebene zusätzliche SELinux-Rolle zu ändern
  • Die mit sudo verwendete Option -i bewirkt, dass eine interaktive Shell ausgeführt wird:
$ sudo -i # id -Z ‚'SELinux_user_u‘':‚'administrator_r‘':‚'administrator_t‘':s0:c0.c1023

Um die Platzhalter wie ‚'default_role_r‘' oder ‚'administrator_r‘' besser zu verstehen, siehe das folgende Beispiel

Beispiel 3.1. Konfiguration des sudo-Übergangs

In diesem Beispiel wird ein neuer SELinux-Benutzer confined_u mit der standardmäßig zugewiesenen Rolle staff_r erstellt und sudo so konfiguriert, dass die Rolle von confined_u von staff_r auf webadm_r geändert wird

Geben Sie alle folgenden Befehle als Root-Benutzer in der Rolle sysadm_r oder unconfined_r ein

# semanage user -a -r s0-s0:c0.c1023 -R „staff_r webadm_r“ confined_u
# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u

  1. semanage login -a -s confined_u -rs0:c0.c1023 linux_user
# restorecon -FR -v /home/linux_user
# echo „‚'linux_user‘' ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash “ > /etc/sudoers.d/linux_user
  • Melden Sie sich als der neu erstellte Linux-Benutzer am System an und überprüfen Sie, ob der Benutzer mit der Standard-SELinux-Rolle gekennzeichnet ist: $ id -Z confined_u:staff_r:staff_t:s0:c0.c1023 $ sudo -i # id -Z confined_u:webadm_r:webadm_t:s0:c0.c1023