Linux/SELinux/06 Benutzer
Einschränkung von Benutzern
Unter Linux werden Benutzer standardmäßig dem SELinux-Benutzer „unconfined_u“ zugeordnet
- Alle von „unconfined_u“ ausgeführten Prozesse befinden sich in der Domäne „unconfined_t“
- Das bedeutet, dass Benutzer innerhalb der Grenzen der Standard-DAC-Richtlinie von Linux auf das gesamte System zugreifen können
- In Red Hat Enterprise Linux stehen jedoch eine Reihe von eingeschränkten SELinux-Benutzern zur Verfügung
- Das bedeutet, dass Benutzer auf einen begrenzten Satz von Fähigkeiten beschränkt werden können
Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet, wodurch Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen erben können, beispielsweise (je nach Benutzer) die Unfähigkeit:
- das X Window System auszuführen
- Netzwerkfunktionen nutzen
- Setuid-Anwendungen ausführen (es sei denn, die SELinux-Richtlinie erlaubt dies)
- oder die Befehle „su“ und „sudo“ ausführen
Beispielsweise befinden sich Prozesse, die vom SELinux-Benutzer „user_u“ ausgeführt werden, in der Domäne „user_t“
- Solche Prozesse können eine Verbindung zum Netzwerk herstellen, aber nicht die Befehle „su“ oder „sudo“ ausführen
- Dies trägt dazu bei, das System vor dem Benutzer zu schützen
- Weitere Informationen zu eingeschränkten Benutzern und ihren Fähigkeiten finden Sie in Abschnitt Eingeschränkte und uneingeschränkte Benutzer, Tabelle„SELinux-Benutzerfähigkeiten“
Zuordnungen zwischen Linux- und SELinux-Benutzern
Geben Sie als root den folgenden Befehl ein, um die Zuordnung zwischen Linux-Benutzern und SELinux-Benutzern anzuzeigen:
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 *
In Red Hat Enterprise Linux werden Linux-Benutzer standardmäßig dem SELinux-Login „__default__“ zugeordnet (das wiederum dem SELinux-Benutzer „unconfined_u“ zugeordnet ist)
- Wenn ein Linux-Benutzer mit dem Befehl „useradd“ erstellt wird und keine Optionen angegeben werden, wird er dem SELinux-Benutzer „unconfined_u“ zugeordnet
Das Folgende definiert die Standardzuordnung:
__default__ unconfined_u s0-s0:c0.c1023 *
Einschränkung neuer Linux-Benutzer: useradd
Linux-Benutzer, die dem SELinux-Benutzer „unconfined_u“ zugeordnet sind, laufen in der Domäne „unconfined_t“
Dies lässt sich durch Ausführen des Befehls ‚'id -Z‘' erkennen, während man als Linux-Benutzer angemeldet ist, der ‚'unconfined_u‘' zugeordnet ist:
id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
Wenn Linux-Benutzer in der Domäne „unconfined_t“ laufen, werden SELinux-Richtlinienregeln angewendet, es gibt jedoch Richtlinienregeln, die Linux-Benutzern in der Domäne „unconfined_t“ nahezu uneingeschränkten Zugriff gewähren
- Wenn nicht eingeschränkte Linux-Benutzer eine Anwendung ausführen, für die die SELinux-Richtlinie einen Übergang von der Domäne „unconfined_t“ in ihre eigene eingeschränkte Domäne definiert, unterliegen diese nicht eingeschränkten Linux-Benutzer dennoch den Einschränkungen dieser eingeschränkten Domäne
Der Sicherheitsvorteil dabei ist, dass, obwohl ein Linux-Benutzer uneingeschränkt arbeitet, die Anwendung eingeschränkt bleibt und somit die Ausnutzung einer Schwachstelle in der Anwendung durch die Richtlinie begrenzt werden kann
- Hinweis
- Dies schützt das System nicht vor dem Benutzer
- Stattdessen werden der Benutzer und das System vor möglichen Schäden geschützt, die durch eine Schwachstelle in der Anwendung verursacht werden
Verwenden Sie beim Erstellen von Linux-Benutzern mit dem Befehl „useradd“ die Option „-Z“, um anzugeben, welchem SELinux-Benutzer sie zugeordnet werden sollen
- Das folgende Beispiel erstellt einen neuen Linux-Benutzer namens „useruuser“ und ordnet diesen Benutzer dem SELinux-Benutzer „user_u“ zu
- Linux-Benutzer, die dem SELinux-Benutzer „user_u“ zugeordnet sind, laufen in der Domäne „user_t“
- In dieser Domäne können Linux-Benutzer keine Setuid-Anwendungen ausführen, es sei denn, die SELinux-Richtlinie erlaubt dies (z. B. „passwd“), und sie können den Befehl „su“ oder „sudo“ nicht ausführen, wodurch verhindert wird, dass sie mit diesen Befehlen zum Root-Benutzer werden
- Einen neuen Linux-Benutzer auf den SELinux-Benutzer „user_u“ beschränken
- Erstellen Sie als Root einen neuen Linux-Benutzer („useruuser“), der dem SELinux-Benutzer „user_u“ zugeordnet ist
sudo useradd -Z user_u useruuser
- Um die Zuordnung zwischen „useruuser“ und „user_u“ anzuzeigen, geben Sie als Root den folgenden Befehl ein:
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 *
useruuser user_u s0 *
- Weisen Sie als root dem Linux-Benutzer ‚'useruuser‘' ein Passwort zu:
sudo passwd useruuser Passwort für Benutzer useruuser ändern
Neues Passwort: ‚'Geben Sie ein Passwort ein‘'
Neues 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 ‚'useruuser‘' an
- Wenn Sie sich anmelden, ordnet das Modul ‚'pam_selinux‘' den Linux-Benutzer einem SELinux-Benutzer zu (in diesem Fall ‚'user_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:
~]$ id -Z user_u:user_r:user_t:s0
- Melden Sie sich von der Sitzung des Linux-Benutzers „useruuser“ ab und melden Sie sich mit Ihrem Konto wieder an
- Wenn Sie den Linux-Benutzer „useruuser“ nicht mehr benötigen, geben Sie den folgenden Befehl als Root ein, um ihn zusammen mit seinem Home-Verzeichnis zu entfernen:
sudo userdel -Z -r useruuser
Bestehende Linux-Benutzer einschränken: semanage login
Wenn ein Linux-Benutzer dem SELinux-Benutzer ‚'unconfined_u‘' zugeordnet ist (das Standardverhalten) und Sie ändern möchten, welchem SELinux-Benutzer er zugeordnet ist, verwenden Sie den Befehl ‚'semanage login‘'
- Das folgende Beispiel erstellt einen neuen Linux-Benutzer namens ‚'newuser‘' und ordnet diesen Linux-Benutzer dann dem SELinux-Benutzer ‚'user_u‘' zu:
- Zuordnung von Linux-Benutzern zu SELinux-Benutzern
- Erstellen Sie als root einen neuen Linux-Benutzer (‚'newuser‘')
- Da für diesen Benutzer die Standardzuordnung gilt, erscheint er nicht in der Ausgabe von ‚'semanage login -l‘':
sudo useradd newuser 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 *
- Um den Linux-Benutzer „newuser“ dem SELinux-Benutzer „user_u“ zuzuordnen, geben Sie als root den folgenden Befehl ein:
sudo semanage login -a -s user_u newuser
Die Option „-a“ fügt einen neuen Eintrag hinzu, und die Option „-s“ gibt den SELinux-Benutzer an, dem ein Linux-Benutzer zugeordnet werden soll
- Das letzte Argument, ‚'newuser‘', ist der Linux-Benutzer, den Sie dem angegebenen SELinux-Benutzer zuordnen möchten
- Um die Zuordnung zwischen dem Linux-Benutzer ‚'newuser‘' und ‚'user_u‘' anzuzeigen, verwenden Sie erneut das Dienstprogramm ‚'semanage‘':
sudo semanage login -l
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst
__default__ unconfined_u s0-s0:c0.c1023 * newuser user_u s0 * root unconfined_u s0-s0:c0.c1023 * system_u system_u s0-s0:c0.c1023 *
- Weisen Sie als root dem Linux-Benutzer ‚'newuser‘' ein Passwort zu:
sudo passwd newuser Passwort für Benutzer newuser ändern Neues Passwort: ‚'Geben Sie ein Passwort ein‘' Neues 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
- Geben Sie den folgenden Befehl ein, um den SELinux-Kontext von ‚'newuser‘' anzuzeigen:
id -Z user_u:user_r:user_t:s0
- Melden Sie sich von der Sitzung des Linux-Benutzers ‚'newuser‘' ab und melden Sie sich wieder mit Ihrem Konto an
- Wenn Sie den Linux-Benutzer ‚'newuser‘' nicht benötigen, geben Sie den folgenden Befehl als root ein, um ihn zusammen mit seinem Home-Verzeichnis zu entfernen:
sudo userdel -r newuser
Entfernen Sie als root die Zuordnung zwischen dem Linux-Benutzer ‚'newuser‘' und ‚'user_u‘':
sudo semanage login -d newuser 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 *
Ändern der Standardzuordnung
Unter Linux werden Benutzer standardmäßig dem SELinux-Login „__default__“ zugeordnet (der wiederum dem SELinux-Benutzer „unconfined_u“ zugeordnet ist)
Wenn Sie möchten, dass neue Linux-Benutzer sowie Linux-Benutzer, die nicht ausdrücklich einem SELinux-Benutzer zugeordnet sind, standardmäßig eingeschränkt werden, ändern Sie die Standardzuordnung mit dem Befehl ‚'semanage login‘'
Geben Sie beispielsweise als Root den folgenden Befehl ein, um die Standardzuordnung von ‚'unconfined_u‘' auf ‚'user_u‘' zu ändern:
sudo semanage login -m -S targeted -s „user_u“ -r s0 __default__
Überprüfen Sie, ob der ‚'__default__‘'-Login auf ‚'user_u‘' zugeordnet ist:
sudo semanage login -l
Login-Name SELinux-Benutzer MLS/MCS-Bereich Dienst
__default__ user_u s0-s0:c0.c1023 * root unconfined_u s0-s0:c0.c1023 * system_u system_u s0-s0:c0.c1023 *
Wenn ein neuer Linux-Benutzer angelegt wird und kein SELinux-Benutzer angegeben ist, oder wenn sich ein bestehender Linux-Benutzer anmeldet und nicht mit einem bestimmten Eintrag aus der Ausgabe von ‚'semanage login -l‘' übereinstimmt, wird er gemäß der ‚'__default__‘'-Anmeldung dem ‚'user_u‘' zugeordnet
Um zum Standardverhalten zurückzukehren, geben Sie als Root den folgenden Befehl ein, um die Anmeldung „__default__“ dem SELinux-Benutzer „unconfined_u“ zuzuordnen:
sudo semanage login -m -S targeted -s „unconfined_u“ -r s0-s0:c0.c1023 __default__
xguest: Kiosk-Modus
Das xguest-Paket stellt ein Kiosk-Benutzerkonto bereit
- Dieses Konto dient zur Sicherung von Rechnern, an denen sich Benutzer spontan anmelden und diese nutzen, wie beispielsweise in Bibliotheken, Banken, Flughäfen, Informationskiosken und Cafés
- Das Kiosk-Benutzerkonto ist stark eingeschränkt: Im Wesentlichen erlaubt es einem Benutzer lediglich, sich anzumelden und mit Firefox im Internet zu surfen
- Der Gastbenutzer ist ‚'xguest_u‘' zugewiesen, siehe Tabelle „SELinux-Benutzerfähigkeiten“
- Alle Änderungen, die während der Anmeldung mit diesem Konto vorgenommen werden, wie das Erstellen von Dateien oder das Ändern von Einstellungen, gehen beim Abmelden verloren
So richten Sie das Kiosk-Konto ein:
- Installieren Sie als Root das xguest-Paket
- Installieren Sie die erforderlichen Abhängigkeiten:
sudo yum install xguest
- Damit das Kiosk-Konto von verschiedenen Personen genutzt werden kann, ist es nicht passwortgeschützt; daher kann das Konto nur geschützt werden, wenn SELinux im Enforcing-Modus läuft
- Bevor Sie sich mit diesem Konto anmelden, überprüfen Sie mit dem Dienstprogramm ‚'getenforce‘', ob SELinux im Enforcing-Modus läuft:
getenforce Enforcing
Ist dies nicht der Fall, finden Sie in Abschnitt „Dauerhafte Änderungen an SELinux-Zuständen und -Modi“, Informationen zum Wechsel in den Enforcing-Modus
- Es ist nicht möglich, sich mit diesem Konto anzumelden, wenn SELinux im Permissive-Modus läuft oder deaktiviert ist
- Sie können sich nur über den GNOME Display Manager (GDM) bei diesem Konto anmelden
- Sobald das xguest-Paket installiert ist, wird dem GDM-Anmeldebildschirm ein „Guest“-Konto hinzugefügt
Boolesche Werte für Benutzer
- Boolesche Werte für Benutzer, die Anwendungen ausführen
Wenn Linux-Benutzern nicht gestattet wird, Anwendungen (die die Berechtigungen der Benutzer erben) in ihren Home-Verzeichnissen und im Verzeichnis „/tmp“ auszuführen, auf das sie Schreibzugriff haben, wird verhindert, dass fehlerhafte oder bösartige Anwendungen Dateien ändern, die den Benutzern gehören
Es stehen Boolesche Werte zur Verfügung, um dieses Verhalten zu ändern; diese werden mit dem Dienstprogramm „setsebool“ konfiguriert, das als Root ausgeführt werden muss
- Der Befehl „setsebool -P“ nimmt dauerhafte Änderungen vor
Verwenden Sie die Option -P'‚ nicht, wenn Sie nicht möchten, dass die Änderungen über Neustarts hinweg bestehen bleiben:
guest_t
Um Linux-Benutzern in der Domäne ‘'guest_t'‚ die Ausführung von Anwendungen in ihren Home-Verzeichnissen und im Verzeichnis ‘'/tmp'‚ zu ‘'verhindern: sudo setsebool -P guest_exec_content off
xguest_t
Um zu ‚'verhindern‘', dass Linux-Benutzer in der ‚'xguest_t‘'-Domäne Anwendungen in ihren Home-Verzeichnissen und in /tmp ausführen:
sudo setsebool -P xguest_exec_content off
user_t
Um zu ‚'verhindern‘', dass Linux-Benutzer in der Domäne ‚'user_t‘' Anwendungen in ihren Home-Verzeichnissen und in /tmp ausführen:
sudo setsebool -P user_exec_content off
staff_t
Um zu ‚'verhindern‘', dass Linux-Benutzer in der Domäne ‚'staff_t‘' Anwendungen in ihren Home-Verzeichnissen und in /tmp ausführen: sudo setsebool -P staff_exec_content offUm den Booleschen Wert ‚'staff_exec_content‘' zu aktivieren und Linux-Benutzern in der Domäne ‚'staff_t‘' zu ‚'erlauben‘', Anwendungen in ihren Home-Verzeichnissen und in /tmp auszuführen:
sudo setsebool -P staff_exec_content on