|
|
| (85 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
| '''SELinux/DOC/03 Targeted Policy''' | | {{Navigation|Linux/SELinux/02 Kontext|Linux/SELinux/03 Default Policy/Prozesse}} |
| | '''Linux/SELinux/03 Default Policy''' - Targeted Policy |
|
| |
|
| '''{{BASEPAGENAME}}''' - Beschreibung
| | === Beschreibung === |
| | === Targeted Policy === |
| | Standard-Linux-SELinux-Richtlinie |
|
| |
|
| == Beschreibung ==
| | ; Verwendung der Targeted Policy |
| ; Die Targeted Policy ist die in Linux verwendete Standard-SELinux-Richtlinie | | {| class="table table-striped table-hover options big" |
| * 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
| | ! Policy !! Beschreibung |
| * 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'''
| |
| # Ü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
| |
| | |
| # Erstellen Sie als root eine Datei im Verzeichnis /var/www/html/: # touch /var/www/html/testfile
| |
| # 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
| |
| | |
| # 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]
| |
| | |
| # 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
| |
| # 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
| |
| # Entfernen Sie als root die Datei „testfile“: # rm -i /var/www/html/testfile
| |
| # 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
| |
| | |
| == Installation ==
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| < /syntaxhighlight>
| |
| | |
| == Aufruf ==
| |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| |
| < /syntaxhighlight>
| |
| | |
| === Optionen ===
| |
| {| class="wikitable sortable options gnu big" | |
| |-
| |
| ! Unix !! GNU !! Parameter !! Beschreibung | |
| |- | | |- |
| | || || || | | | targeted || Prozesse, die als „targeted“ gekennzeichnet sind, laufen in einer eingeschränkten [[Domäne]] |
| |- | | |- |
| | | not targeted || Prozesse, die nicht als „targeted“ gekennzeichnet sind, laufen in einer uneingeschränkten [[Domäne]] |
| |} | | |} |
|
| |
|
| === Parameter ===
| | ; Beispiel |
| === Umgebungsvariablen ===
| | {| class="table table-striped table-hover options big" |
| === Exit-Status ===
| | ! Domäne |
| {| class="wikitable options col1center big" | | ! Beschreibung |
| |-
| |
| ! Wert !! Beschreibung
| |
| |- | | |- |
| | 0 || Erfolg | | | unconfined_t |
| | | Angemeldete Benutzer (standardmäßig) |
| |- | | |- |
| | >0 || Fehler | | | unconfined_service_t |
| | | Von init gestartete Systemprozesse |
| |} | | |} |
| | Beide Domänen sind '''[[SELinux/unconfined|unconfined]]''' |
|
| |
|
| == Anwendung == | | === Speicherprüfungen === |
| <syntaxhighlight lang="bash" highlight="1" line copy>
| | Prüfungen auf ausführbaren und beschreibbaren Speicher |
| < /syntaxhighlight>
| |
|
| |
|
| <!-- output -->
| | * Können für eingeschränkte und für unconfined Domänen gelten |
| <syntaxhighlight lang="bash" highlight="" line>
| |
| < /syntaxhighlight>
| |
|
| |
|
| === Problembehebung ===
| | * Standardmäßig können Subjekte, die in einer unconfined Domäne laufen, jedoch beschreibbaren Speicher zuweisen und diesen ausführen |
| | | Speicherprüfungen können durch das Setzen von [[Booleschen Werten]] aktiviert werden, wodurch die SELinux-Richtlinie zur Laufzeit geändert werden kann |
| == Konfiguration ==
| |
| === Dateien ===
| |
| {| class="wikitable options big"
| |
| |-
| |
| ! Datei !! Beschreibung
| |
| |-
| |
| | ||
| |
| |-
| |
| | ||
| |
| |}
| |
|
| |
|
| <noinclude> | | <noinclude> |
|
| |
| == Anhang == | | == Anhang == |
| === Siehe auch === | | === Siehe auch === |
| | ; Unterseiten |
| | {{Special:PrefixIndex/{{BASEPAGENAME}}/}} |
| | |
| | ; Inhalt der Kategorie Linux/SELinux |
| <div style="column-count:2"> | | <div style="column-count:2"> |
| <categorytree hideroot=on mode="pages">{{BASEPAGENAME}}</categorytree> | | <categorytree hideroot=on mode="pages">Linux/SELinux</categorytree> |
| </div> | | </div> |
| ----
| |
| {{Special:PrefixIndex/{{BASEPAGENAME}}/}}
| |
|
| |
|
| === Dokumentation === | | === Dokumentation === |
| Zeile 170: |
Zeile 64: |
| --> | | --> |
|
| |
|
| [[Kategorie:SELinux/DOC]]
| |
|
| |
|
| | [[Kategorie:Linux/SELinux]] |
| | [[Kategorie:Linux/SELinux/03]] |
| | |
| | {{Navigation|Linux/SELinux/02 Kontext|Linux/SELinux/03 Default Policy/Prozesse}} |
| </noinclude> | | </noinclude> |
|
| |
| = 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 ===
| |
| 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
| |
|
| |
| # 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 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
| |
|
| |
| # 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
| |