Zum Inhalt springen

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

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
'''SELinux/DOC/03 Targeted Policy'''
‚‘'SELinux/DOC/03 Targeted Policy'‚‘


=== Beschreibung ===
=== Beschreibung ===
Targeted policy is the default SELinux policy used in Red Hat Enterprise Linux
Die Targeted Policy ist die in Red Hat Enterprise Linux verwendete Standard-SELinux-Richtlinie
* When using targeted policy, processes that are targeted
* Bei Verwendung der Targeted Policy laufen Prozesse, die als „targeted“ gekennzeichnet sind,
run in a confined domain, and processes that are not targeted run in an unconfined domain
in einer eingeschränkten Domäne, während Prozesse, die nicht als „targeted“ gekennzeichnet sind, in einer uneingeschränkten Domäne laufen
* For example, by default, logged-in users run in the unconfined_t domain, and system processes started by init run in the unconfined_service_t domain; both of these domains are unconfined
* 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


Executable and writable memory checks may apply to both confined and unconfined domains
Prüfungen auf ausführbaren und beschreibbaren Speicher können sowohl für eingeschränkte als auch für unconfined Domänen gelten
* However, by default, subjects running in an unconfined domain can allocate writable memory and execute it
* Standardmäßig können Subjekte, die in einer unconfined Domäne laufen, jedoch beschreibbaren Speicher zuweisen und diesen ausführen
* These memory checks can be enabled by setting Booleans, which allow the SELinux policy to be modified at runtime
* Diese Speicherprüfungen können durch das Setzen von Booleschen Werten aktiviert werden, wodurch die SELinux-Richtlinie zur Laufzeit geändert werden kann
* Boolean configuration is discussed later
* Die Konfiguration der Booleschen Werte wird später behandelt


=== Confined Processes ===
=== Eingeschränkte Prozesse ===
Almost every service that listens on a network, such as sshd or httpd, is confined in Red Hat Enterprise Linux
Fast jeder Dienst, der auf einem Netzwerk lauscht, wie sshd oder httpd, ist in Red Hat Enterprise Linux eingeschränkt
* Also, most processes that run as the root user and perform tasks for users, such as the passwd utility, are confined
* Auch die meisten Prozesse, die als Root-Benutzer laufen und Aufgaben für Benutzer ausführen, wie beispielsweise das Dienstprogramm passwd, sind eingeschränkt
* When a process is confined, it runs in its own domain, such as the httpd process running in the httpd_t domain
* 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
* If a confined process is compromised by an attacker, depending on SELinux policy configuration, an attacker's access to resources and the possible damage they can do is limited
* 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


Complete this procedure to ensure that SELinux is enabled and the system is prepared to perform the following example:
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:


'''Procedure 3.1. How to Verify SELinux Status'''
‚‘'Vorgang 3.1. Überprüfen des SELinux-Status'‚‘
# Confirm that SELinux is enabled, is running in enforcing mode, and that targeted policy is being used
# Überprüfen Sie, ob SELinux aktiviert ist, im Enforcing-Modus läuft und die Targeted-Richtlinie verwendet wird


The correct output should look similar to the output below:
Die korrekte Ausgabe sollte in etwa wie folgt aussehen:
  $ sestatus
  $ sestatus
  SELinux status: enabled
  SELinux-Status: aktiviert
  SELinuxfs mount: /sys/fs/selinux
  SELinuxfs-Mount: /sys/fs/selinux
  SELinux root directory: /etc/selinux
  SELinux-Stammverzeichnis: /etc/selinux
  Loaded policy name: targeted
   
  Current mode: enforcing
Name der geladenen Richtlinie: targeted
  Mode from config file: enforcing
  Aktueller Modus: enforcing
  Policy MLS status: enabled
  Modus aus Konfigurationsdatei: enforcing
  Policy deny_unknown status: allowed
  MLS-Status der Richtlinie: aktiviert
  Max kernel policy version: 30
  Status der Richtlinie deny_unknown: erlaubt
  Maximale Kernel-Richtlinienversion: 30


See Section 4.4, “Permanent Changes in SELinux States and Modes” for detailed information about changing SELinux modes
Siehe Abschnitt 4.4, „Dauerhafte Änderungen an SELinux-Zuständen und -Modi“ für detaillierte Informationen zum Ändern von SELinux-Modi


# As root, create a file in the /var/www/html/ directory: # touch /var/www/html/testfile
# Erstellen Sie als root eine Datei im Verzeichnis /var/www/html/: # touch /var/www/html/testfile
# Enter the following command to view the SELinux context of the newly created file: $ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile By default, Linux users run unconfined in Red Hat Enterprise Linux, which is why the testfile file is labeled with the SELinux unconfined_u user
# 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 Red Hat Enterprise Linux im unconfined-Modus, weshalb die Datei testfile mit dem SELinux-Benutzer unconfined_u gekennzeichnet ist
* RBAC is used for processes, not files
* RBAC wird für Prozesse verwendet, nicht für Dateien
* Roles do not have a meaning for files; the object_r role is a generic role used for files (on persistent storage and network file systems)
* 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
* Under the /proc directory, files related to processes may use the system_r role
* Im Verzeichnis /proc können Dateien, die sich auf Prozesse beziehen, die Rolle „system_r“ verwenden
* The httpd_sys_content_t type allows the httpd process to access this file
* Der Typ „httpd_sys_content_t“ erlaubt dem httpd-Prozess den Zugriff auf diese Datei


The following example demonstrates how SELinux prevents the Apache HTTP Server (httpd) from reading files that are not correctly labeled, such as files intended for use by Samba
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
* This is an example, and should not be used in production
* Dies ist ein Beispiel und sollte nicht in der Produktion verwendet werden
* It assumes that the httpd and wget packages are installed, the SELinux targeted policy is used, and that SELinux is running in enforcing mode
* 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


'''Procedure 3.2. An Example of Confined Process'''# As root, start the httpd daemon:
‚‘'Vorgehensweise 3.2. Ein Beispiel für einen eingeschränkten Prozess'‚‘# Starten Sie als Root den httpd-Daemon:


  # systemctl start httpd.service
  # systemctl start httpd.service


Confirm that the service is running
Überprüfen Sie, ob der Dienst läuft
* The output should include the information below (only the time stamp will differ):
* Die Ausgabe sollte die folgenden Informationen enthalten (nur der Zeitstempel weicht ab):


  $ systemctl status httpd.service
  $ systemctl status httpd.service
httpd.service – Der Apache-HTTP-Server


  httpd.service - The Apache HTTP Server
  Geladen: geladen (/usr/lib/systemd/system/httpd.service; deaktiviert)


  Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
  Aktiv: aktiv (läuft) seit Mo 05.08.2013 14:00:55 MESZ; vor 8 s


Active: active (running) since Mon 2013-08-05 14:00:55 CEST; 8s ago
# 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
# Change into a directory where your Linux user has write access to, and enter the following command
* HTTP-Anfrage gesendet, warte auf Antwort... 200 OK Länge: 0 [text/plain] Speichere in: `testfile'
* Unless there are changes to the default configuration, this command succeeds: $ wget http://localhost/testfile --2009-11-06 17:43:01-- http://localhost/testfile Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:80...connected
* HTTP request sent, awaiting response... 200 OK Length: 0 [text/plain] Saving to: `testfile'
  [ <=> ] 0 --.-K/s in 0s
  [ <=> ] 0 --.-K/s in 0s
  2009-11-06 17:43:01 (0.00 B/s) - `testfile' saved [0/0]
  2009-11-06 17:43:01 (0,00 B/s) - `testfile' gespeichert [0/0]
 
# The chcon command relabels files; however, such label changes do not survive when the file system is relabeled
* For permanent changes that survive a file system relabel, use the semanage utility, which is discussed later
* As root, enter the following command to change the type to a type used by Samba: # chcon -t samba_share_t /var/www/html/testfile Enter the following command to view the changes: $ ls -Z /var/www/html/testfile -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
# Note that the current DAC permissions allow the httpd process access to testfile
* Change into a directory where your user has write access to, and enter the following command
* Unless there are changes to the default configuration, this command fails: $ wget http://localhost/testfile --2009-11-06 14:11:23-- http://localhost/testfile Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:80..
* connected
* HTTP request sent, awaiting response... 403 Forbidden 2009-11-06 14:11:23 ERROR 403: Forbidden
# As root, remove testfile: # rm -i /var/www/html/testfile
# If you do not require httpd to be running, as root, enter the following command to stop it: # systemctl stop httpd.service
 
This example demonstrates the additional security added by SELinux
* Although DAC rules allowed the httpd process access to testfile in step 2, because the file was labeled with a type that the httpd process does not have access to, SELinux denied access


If the auditd daemon is running, an error similar to the following is logged to /var/log/audit/audit.log:
# 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


type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for 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
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


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 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
Wenn der auditd-Daemon läuft, wird ein Fehler ähnlich dem folgenden in /var/log/audit/audit.log protokolliert:


Also, an error similar to the following is logged to /var/log/httpd/error_log:
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
  [Wed May 06 23:00:54 2009] [error] [client ''127.0.0.1''] (13)Permission denied: access to /testfile denied
  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)


=== Unconfined Processes ===
Außerdem wird ein Fehler ähnlich dem folgenden in /var/log/httpd/error_log protokolliert:
Unconfined processes run in unconfined domains, for example, unconfined services executed by init end up running in the unconfined_service_t domain, unconfined services executed by kernel end up running in the kernel_t domain, and unconfined services executed by unconfined Linux users end up running in the unconfined_t domain
[Mi 06. Mai 23:00:54 2009] [Fehler] [Client ‚'127.0.0.1‘'] (13)Zugriff verweigert: Zugriff auf /testfile verweigert
* For unconfined processes, SELinux policy rules are applied, but policy rules exist that allow processes running in unconfined domains almost all access
* Processes running in unconfined domains fall back to using DAC rules exclusively
* If an unconfined process is compromised, SELinux does not prevent an attacker from gaining access to system resources and data, but of course, DAC rules are still used
* SELinux is a security enhancement on top of DAC rules – it does not replace them


To ensure that SELinux is enabled and the system is prepared to perform the following example, complete the Procedure&nbsp;3.1, “How to Verify SELinux Status” described in Section&nbsp;3.1, “Confined Processes”
=== Nicht eingeschrä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


The following example demonstrates how the Apache HTTP Server (httpd) can access data intended for use by Samba, when running unconfined
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“
* Note that in Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, the httpd process runs in the confined httpd_t domain by default
* This is an example, and should not be used in production
* It assumes that the httpd, wget, dbus and audit packages are installed, that the SELinux targeted policy is used, and that SELinux is running in enforcing mode


'''Procedure&nbsp;3.3.&nbsp;An Example of Unconfined Process'''# The chcon command relabels files; however, such label changes do not survive when the file system is relabeled
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
* For permanent changes that survive a file system relabel, use the semanage utility, which is discussed later
* Beachten Sie, dass unter Red Hat Enterprise Linux der httpd-Prozess standardmäßig in der eingeschränkten httpd_t-Domäne läuft
* As the root user, enter the following command to change the type to a type used by Samba:
* 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


  # chcon -t samba_share_t /var/www/html/testfile
‚‘'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:
   
# chcon -t samba_share_t /var/www/html/testfile


View the changes:
Zeigen Sie die Änderungen an:
  $ ls -Z /var/www/html/testfile
  $ ls -Z /var/www/html/testfile
  -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
  -rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile


# Enter the following command to confirm that the httpd process is not running: $ systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: inactive (dead) If the output differs, enter the following command as root to stop the httpd process: # systemctl stop httpd.service
# 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
# To make the httpd process run unconfined, enter the following command as root to change the type of the /usr/sbin/httpd file, to a type that does not transition to a confined domain: # chcon -t bin_t /usr/sbin/httpd
# 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
# Confirm that /usr/sbin/httpd is labeled with the bin_t type: $ ls -Z /usr/sbin/httpd -rwxr-xr-x
# Ü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
* root root system_u:object_r:bin_t:s0 /usr/sbin/httpd
# As root, start the httpd process and confirm, that it started successfully: # systemctl start httpd.service # systemctl status httpd.service httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled) Active: active (running) since Thu 2013-08-15 11:17:01 CEST; 5s ago
# 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
 
# Enter the following command to view httpd running in the unconfined_service_t domain: $ 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


# Change into a directory where your Linux user has write access to, and enter the following command
# 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 ?
* Unless there are changes to the default configuration, this command succeeds: $ wget http://localhost/testfile --2009-05-07 01:41:10-- http://localhost/testfile Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:80..
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
* connected
* HTTP request sent, awaiting response... 200 OK Length: 0 [text/plain] Saving to: `testfile'


  [ <=> ]--.-K/s in 0s
# 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


  2009-05-07 01:41:10 (0.00 B/s) - `testfile' saved [0/0]
  07.05.2009 01:41:10 (0,00 B/s) `testfile' gespeichert [0/0]


Although the httpd process does not have access to files labeled with the samba_share_t type, httpd is running in the unconfined unconfined_service_t domain, and falls back to using DAC rules, and as such, the wget command succeeds
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
* Had httpd been running in the confined httpd_t domain, the wget command would have failed
* Wäre httpd in der eingeschränkten Domäne httpd_t gelaufen, wäre der Befehl wget fehlgeschlagen


# The restorecon utility restores the default SELinux context for files
# Das Dienstprogramm restorecon stellt den Standard-SELinux-Kontext für Dateien wieder her
* As root, enter the following command to restore the default SELinux context for /usr/sbin/httpd: # 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
* 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


Confirm that /usr/sbin/httpd is labeled with the httpd_exec_t type:
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
  $ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd


# As root, enter the following command to restart httpd
# Geben Sie als root den folgenden Befehl ein, um httpd neu zu starten
* After restarting, confirm that httpd is running in the confined httpd_t domain: # 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
* 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 ?
# As root, remove testfile: # rm -i /var/www/html/testfile rm: remove regular empty file `/var/www/html/testfile'? y
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
# If you do not require httpd to be running, as root, enter the following command to stop httpd: # systemctl stop httpd.service
# Entfernen Sie als root die Datei „testfile“: # rm -i /var/www/html/testfile rm: reguläre leere Datei `/var/www/html/testfile` entfernen? y
# Wenn httpd nicht laufen muss, geben Sie als root den folgenden Befehl ein, um httpd zu stoppen: # systemctl stop httpd.service


The examples in these sections demonstrate how data can be protected from a compromised confined-process (protected by SELinux), as well as how data is more accessible to an attacker from a compromised unconfined-process (not protected by SELinux)
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)


=== Confined and Unconfined Users ===
=== Eingeschränkte und uneingeschränkte Benutzer ===
Each Linux user is mapped to an SELinux user using SELinux policy
Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet
* This allows Linux users to inherit the restrictions on SELinux users
* Dadurch können Linux-Benutzer die Einschränkungen von SELinux-Benutzern erben
* This Linux user mapping is seen by running the semanage login -l command as root:
* Diese Zuordnung der Linux-Benutzer lässt sich durch Ausführen des Befehls `semanage login -l` als root anzeigen:
  # semanage login -l
  # semanage login -l
  Login Name SELinux User MLS/MCS Range Service
  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>
  __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 Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, Linux users are mapped to the SELinux __default__ login by default, which is mapped to the SELinux unconfined_u user
In Red Hat Enterprise Linux werden Linux-Benutzer standardmäßig dem SELinux-Login __default__ zugeordnet, der wiederum dem SELinux-Benutzer unconfined_u zugeordnet ist
* The following line defines the default mapping:
* Die folgende Zeile definiert die Standardzuordnung:
  __default__ unconfined_u s0-s0:c0.c1023
  __default__ unconfined_u s0-s0:c0.c1023


The following procedure demonstrates how to add a new Linux user to the system and how to map that user to the SELinux unconfined_u user
Das folgende Verfahren zeigt, wie Sie einen neuen Linux-Benutzer zum System hinzufügen und diesen Benutzer dem SELinux-Benutzer unconfined_u zuordnen
* It assumes that the root user is running unconfined, as it does by default in Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux:
* Es wird davon ausgegangen, dass der Root-Benutzer im unconfined-Modus läuft, wie es in Red Hat Enterprise Linux standardmäßig der Fall ist:


'''Procedure&nbsp;3.4.&nbsp;Mapping a New Linux User to the SELinux unconfined_u User'''# As root, enter the following command to create a new Linux user named newuser:
‚‘'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
  # useradd newuser


# To assign a password to the Linux newuser user
# So weisen Sie dem Linux-Benutzer newuser ein Passwort zu
* Enter the following command as root: # passwd newuser Changing password for user newuser
* Geben Sie als root den folgenden Befehl ein: # passwd newuser Passwort für Benutzer newuser ändern
* New UNIX password: ''Enter a password'' Retype new UNIX password: ''Enter the same password again'' passwd: all authentication tokens updated successfully
* 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
# Log out of your current session, and log in as the Linux newuser user
# Melden Sie sich von Ihrer aktuellen Sitzung ab und melden Sie sich als Linux-Benutzer „newuser“ an
* When you log in, the '''pam_selinux''' PAM module automatically maps the Linux user to an SELinux user (in this case, unconfined_u), and sets up the resulting SELinux context
* 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
* The Linux user's shell is then launched with this context
* Die Shell des Linux-Benutzers wird dann mit diesem Kontext gestartet
* Enter the following command to view the context of a Linux user: [newuser@localhost $ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 '''Note''' If you no longer need the newuser user on your system, log out of the Linux newuser's session, log in with your account, and run the userdel -r newuser command as root
*
* It will remove newuser along with their home directory
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


Confined and unconfined Linux users are subject to executable and writable memory checks, and are also restricted by MCS or MLS
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


To list the available SELinux users, enter the following command:
Um die verfügbaren SELinux-Benutzer aufzulisten, geben Sie den folgenden Befehl ein:
  $seinfo -u Users: 8
  $seinfo -u Benutzer: 8
  sysadm_u
   
sysadm_u
  system_u
  system_u
  xguest_u
  xguest_u
Zeile 188: Zeile 192:
  user_u
  user_u
  unconfined_u
  unconfined_u
Beachten Sie, dass der Befehl „seinfo“ vom Paket „setools-console“ bereitgestellt wird, das standardmäßig nicht installiert ist


Note that the seinfo command is provided by the setools-console package, which is not installed by default
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 Red Hat Enterprise 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
If an unconfined Linux user executes an application that SELinux policy defines as one that can transition from the unconfined_t domain to its own confined domain, the unconfined Linux user is still subject to the restrictions of that confined domain
|nein
* The security benefit of this is that, even though a Linux user is running unconfined, the application remains confined
|ja
* Therefore, the exploitation of a flaw in the application can be limited by the policy
|nein
 
Similarly, we can apply these checks to confined users
* Each confined Linux user is restricted by a confined user domain
* The SELinux policy can also define a transition from a confined user domain to its own target confined domain
* In such a case, confined Linux users are subject to the restrictions of that target confined domain
* The main point is that special privileges are associated with the confined users according to their role
* In the table below, you can see examples of basic confined domains for Linux users in Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux:
 
Table&nbsp;3.1.&nbsp;SELinux User Capabilities
{| style="border-spacing:0;width:17cm;"
! align="center" |User
! align="center" |Role
! align="center" |Domain
! align="center" |X Window System
! align="center" |su or sudo
! align="center" |Execute in home directory and /tmp (default)
! align="center" |Networking
|- style="border:none;padding:0.049cm;"
|sysadm_u
|sysadm_r
|sysadm_t
|yes
|'''su''' and '''sudo'''
|yes
|yes
|- style="border:none;padding:0.049cm;"
|staff_u
|staff_r
|staff_t
|yes
|only '''sudo'''
|yes
|yes
|- style="border:none;padding:0.049cm;"
|user_u
|user_r
|user_t
|yes
|no
|yes
|yes
|- style="border:none;padding:0.049cm;"
|guest_u
|guest_r
|guest_t
|no
|no
|yes
|no
|- style="border:none;padding:0.049cm;"
|- style="border:none;padding:0.049cm;"
|xguest_u
|xguest_u
|xguest_r
|xguest_r
|xguest_t
|xguest_t
|yes
|ja
|no
|nein
|yes
|ja
|Firefox only
|nur Firefox
|-
|-
|}
|}


* Linux users in the user_t, guest_t, and xguest_t domains can only run set user ID (setuid) applications if SELinux policy permits it (for example, passwd)
* 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)
* These users cannot run the su and sudo setuid applications, and therefore cannot use these applications to become root
* 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 users in the sysadm_t, staff_t, user_t, and xguest_t domains can log in using the X Window System and a terminal
* 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
* By default, Linux users in the staff_t, user_t, guest_t, and xguest_t domains can execute applications in their home directories and /tmp
* 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
* To prevent them from executing applications, which inherit users' permissions, in directories they have write access to, set the guest_exec_content and xguest_exec_contentbooleans to off
* 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“
* This helps prevent flawed or malicious applications from modifying users' files
* Dies hilft dabei, zu verhindern, dass fehlerhafte oder bösartige Anwendungen die Dateien der Benutzer verändern
* See Section&nbsp;6.6, “Booleans for Users Executing Applications” for information about allowing and preventing users from executing applications in their home directories and /tmp
* 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“
* The only network access Linux users in the xguest_t domain have is '''Firefox''' connecting to web pages
* Der einzige Netzwerkzugriff, über den Linux-Benutzer in der Domäne xguest_t verfügen, ist die Verbindung von ‚‘'Firefox'‚‘ zu Webseiten


Note that system_u is a special user identity for system processes and objects
Beachten Sie, dass system_u eine spezielle Benutzeridentität für Systemprozesse und -objekte ist
* It must never be associated to a Linux user
* Sie darf niemals mit einem Linux-Benutzer verknüpft werden
* Also, unconfined_u and root are unconfined users
* Außerdem sind unconfined_u und root nicht eingeschränkte Benutzer
* For these reasons, they are not included in the aforementioned table of SELinux user capabilities
* Aus diesen Gründen sind sie nicht in der oben genannten Tabelle der SELinux-Benutzerfähigkeiten enthalten


Alongside with the already mentioned SELinux users, there are special roles, that can be mapped to those users
Neben den bereits erwähnten SELinux-Benutzern gibt es spezielle Rollen, die diesen Benutzern zugeordnet werden können
* These roles determine what SELinux allows the user to do: * webadm_r can only administrate SELinux types related to the Apache HTTP Server
* Diese Rollen legen fest, was SELinux dem Benutzer erlaubt: * webadm_r kann nur SELinux-Typen verwalten, die mit dem Apache-HTTP-Server zusammenhängen
* See Section&nbsp;13.2, “Types” for further information
* Weitere Informationen finden Sie in Abschnitt 13.2, „Typen“


* dbadm_r can only administrate SELinux types related to the MariaDB database and the PostgreSQL database management system
* dbadm_r kann nur SELinux-Typen verwalten, die mit der MariaDB-Datenbank und dem PostgreSQL-Datenbankmanagementsystem zusammenhängen
* See Section&nbsp;20.2, “Types” and Section&nbsp;21.2, “Types” for further information
* Weitere Informationen finden Sie in Abschnitt 20.2, „Typen“ und Abschnitt 21.2, „Typen“
* logadm_r can only administrate SELinux types related to the syslog and auditlog processes
* logadm_r kann nur SELinux-Typen verwalten, die mit den syslog- und auditlog-Prozessen zusammenhängen
* secadm_r can only administrate SELinux
* secadm_r kann nur SELinux verwalten
* auditadm_r can only administrate processes related to the audit subsystem
* auditadm_r kann nur Prozesse verwalten, die mit dem Audit-Subsystem zusammenhängen


To list all available roles, enter the following command:
Um alle verfügbaren Rollen aufzulisten, geben Sie den folgenden Befehl ein:
  $ seinfo -r
  $ seinfo -r


As mentioned before, the seinfo command is provided by the setools-console package, which is not installed by default
Wie bereits erwähnt, wird der Befehl seinfo vom Paket setools-console bereitgestellt, das standardmäßig nicht installiert ist


==== The sudo Transition and SELinux Roles ====
==== Der sudo-Übergang und SELinux-Rollen ====
In certain cases, confined users need to perform an administrative task that require root privileges
In bestimmten Fällen müssen eingeschränkte Benutzer eine administrative Aufgabe ausführen, die Root-Rechte erfordert
* To do so, such a confined user has to gain a ''confined administrator'' SELinux role using the sudo command
* Dazu muss ein solcher eingeschränkter Benutzer mithilfe des Befehls sudo die SELinux-Rolle „confined administrator“ annehmen
* The sudo command is used to give trusted users administrative access
* Der Befehl sudo wird verwendet, um vertrauenswürdigen Benutzern administrativen Zugriff zu gewähren
* When users precede an administrative command with sudo, they are prompted for their ''own'' password
* Wenn Benutzer einem administrativen Befehl sudo voranstellen, werden sie zur Eingabe ihres „eigenen“ Passworts aufgefordert
* Then, when they have been authenticated and assuming that the command is permitted, the administrative command is executed as if they were the root user
* Nach der Authentifizierung und vorausgesetzt, der Befehl ist zulässig, wird der administrative Befehl so ausgeführt, als wären sie der Root-Benutzer


As shown in Table&nbsp;3.1, “SELinux User Capabilities”, only the staff_u and sysadm_u SELinux confined users are permitted to use sudo by default
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
* When such users execute a command with sudo, their role can be changed based on the rules specified in the /etc/sudoers configuration file or in a respective file in the /etc/sudoers.d/ directory if such a file exists
* 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


For more information about sudo, see the ''Gaining Privileges'' section in the Red&nbsp;Hat Enterprise&nbsp;Linux&nbsp;7 System Administrator's Guide
Weitere Informationen zu sudo finden Sie im Abschnitt „Gaining Privileges“ im Red Hat Enterprise Linux 7 System Administrator's Guide


'''Procedure&nbsp;3.5.&nbsp;Configuring the sudo Transition'''
‚‘' Vorgehensweise 3.5. Konfigurieren des sudo-Übergangs'‚‘


This procedure shows how to set up sudo to transition a newly-created ''SELinux_user_u'' confined user from a ''default_role_r'' to an ''administrator_r'' administrator role
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


; Note
; Hinweis
: To configure a confined administrator role for an already existing SELinux user, skip the first two steps
: Um eine eingeschränkte Administratorrolle für einen bereits vorhandenen SELinux-Benutzer zu konfigurieren, überspringen Sie die ersten beiden Schritte


# Create a new SELinux user and specify the default SELinux role and a supplementary confined administrator role for this user:
# 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''
   
# semanage user -a -r s0-s0:c0.c1023 -R „‚'default_role_r‘' 'administrator_r‘'“ ‚'SELinux_user_u‘'


# Set up the default SElinux policy context file
# Richten Sie die Standard-SELinux-Policy-Kontextdatei ein
* For example, to have the same SELinux rules as the staff_u SELinux user, copy the staff_u context file: # cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/''SELinux_user_u''
* 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‘'
# Map the newly-created SELinux user to an existing Linux user: semanage login -a -s ''SELinux_user_u'' -rs0:c0.c1023 ''linux_user''
# Ordnen Sie den neu erstellten SELinux-Benutzer einem bestehenden Linux-Benutzer zu: semanage login -a -s 'SELinux_user_u‘' -rs0:c0.c1023 'linux_user‘'
# Create a new configuration file with the same name as your Linux user in the /etc/sudoers.d/ directory and add the following string to it: # echo "''linux_user'' ALL=(ALL) TYPE=''administrator_t'' ROLE=''administrator_r'' /bin/bash " > /etc/sudoers.d/''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‘ ‚
# Use the restorecon utility to relabel the ''linux_user'' home directory: # restorecon -FR -v /home/''linux_user''
# Verwenden Sie das Dienstprogramm restorecon, um das Home-Verzeichnis von ‘'linux_user'‚ neu zu kennzeichnen: # restorecon -FR -v /home/'linux_user''
# Log in to the system as the newly-created Linux user and check that the user is labeled with the default SELinux role: $ id -Z ''SELinux_user_u'':''default_role_r'':''SELinux_user_t'':s0:c0.c1023
# 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
# Run sudo to change the user's SELinux context to the supplementary SELinux role as specified in /etc/sudoers.d/''linux_user''
# 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
* The -i option used with sudo causes that an interactive shell is executed:
* 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
  $ sudo -i # id -Z 'SELinux_user_u‘':'administrator_r‘':'administrator_t‘':s0:c0.c1023


To better understand the placeholders, such as ''default_role_r'' or ''administrator_r'', see the following example
Um die Platzhalter wie ‚'default_role_r‘' oder ‚'administrator_r‘' besser zu verstehen, siehe das folgende Beispiel


'''Example&nbsp;3.1.&nbsp;Configuring the sudo Transition'''
‚‘'Beispiel 3.1. Konfiguration des sudo-Übergangs'‚‘


This example creates a new SELinux user confined_u with default assigned role staff_r and with sudo configured to change the role of confined_u from staff_r to webadm_r
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


Enter all the following commands as the root user in the sysadm_r or unconfined_r role
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
  # 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
  # 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
   
# semanage login -a -s confined_u -rs0:c0.c1023 linux_user
  # restorecon -FR -v /home/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
  # echo „‚'linux_user‘' ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash > /etc/sudoers.d/linux_user


* Log in to the system as the newly-created Linux user and check that the user is labeled with the default SELinux role: $ id -Z confined_u:staff_r:staff_t:s0:c0.c1023 $ sudo -i # id -Z confined_u:webadm_r:webadm_t:s0:c0.c1023
* 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


[[Kategorie:SELinux/DOC]]
[[Kategorie:SELinux/DOC]]

Version vom 21. März 2026, 14:20 Uhr

‚‘'SELinux/DOC/03 Targeted Policy'‚‘

Beschreibung

Die Targeted Policy ist die in Red Hat Enterprise 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 Red Hat Enterprise 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 Red Hat Enterprise 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

Nicht eingeschrä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 Red Hat Enterprise 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)

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 Red Hat Enterprise 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 Red Hat Enterprise 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
  1. 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
  1. 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 Red Hat Enterprise 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 Red Hat Enterprise 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