Linux/SELinux/03 Default Policy/Benutzer
Benutzer
- 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 * root unconfined_u s0-s0:c0.c1023 * system_u system_u s0-s0:c0.c1023 *
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:
- 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:
- SELinux-Benutzerfähigkeiten
| Benutzer | Rolle | Domäne | X Window System | su oder sudo | Ausführen im Home-Verzeichnis und in /tmp (Standard) | Netzwerk |
|---|---|---|---|---|---|---|
| sysadm_u | sysadm_r | sysadm_t | ja | su und sudo | ja | ja |
| staff_u | staff_r | staff_t | ja | nur sudo | ja | ja |
| user_u | user_r | user_t | ja | nein | ja | ja |
| guest_u | guest_r | guest_t | nein | nein | ja | nein |
| 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
sudo-Übergang
- 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
- 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
- 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:
# semanage user -a -r s0-s0:c0.c1023 -R „‚'default_role_r‘' ‚'administrator_r‘'“ ‚'SELinux_user_u‘'
- 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‘'
- Ordnen Sie den neu erstellten SELinux-Benutzer einem bestehenden Linux-Benutzer zu:
semanage login -a -s ‚'SELinux_user_u‘' -rs0:c0.c1023 ‚'linux_user‘'
- 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‘ ‚
- Verwenden Sie das Dienstprogramm restorecon, um das Home-Verzeichnis von ‘'linux_user'‚ neu zu kennzeichnen:
# restorecon -FR -v /home/‘'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 ‚'SELinux_user_u‘':‚'default_role_r‘':‚'SELinux_user_t‘':s0:c0.c1023
- 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
- 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
- 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