Zum Inhalt springen

Linux/SELinux/06 Benutzer

Aus Foxwiki

SELinux/DOC/06 Benutzer einschränken

Einschränkung von Benutzern

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
  1. Erstellen Sie als Root einen neuen Linux-Benutzer („useruuser“), der dem SELinux-Benutzer „user_u“ zugeordnet ist
sudo useradd -Z user_u useruuser
  1. 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 *
  1. 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
  1. 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
  1. 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
  1. 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 *

  1. 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
  1. 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 *
  1. 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
  1. 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
  1. 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:

  1. Installieren Sie als Root das xguest-Paket
  • Installieren Sie die erforderlichen Abhängigkeiten:
sudo yum install xguest
  1. 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
  1. 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