Zum Inhalt springen

Linux/SELinux/02 Kontext: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „ z. B. “ durch „ beispielsweise “
 
(103 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''SELinux/Contexts'''
{{Navigation|Linux/SELinux/02 Installation|Linux/SELinux/03 Default Policy}}
'''Linux/SELinux/02 Kontext''' - SELinux Context


== Beschreibung ==
== Beschreibung ==
* [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#chap-Security-Enhanced_Linux-SELinux_Contexts Chapter 2. SELinux Contexts]
; Kennzeichnung
Prozesse und Dateien werden mit einem Kontext gekennzeichnet


Processes and files are labeled with an SELinux context that contains additional information, such as an SELinux user, role, type, and, optionally, a level. When running SELinux, all of this information is used to make access control decisions. In Red Hat Enterprise Linux, SELinux provides a combination of Role-Based Access Control (RBAC), Type Enforcement (TE), and, optionally, Multi-Level Security (MLS).
; Kontext
* SELinux-Benutzer
* Rolle
* Typ
* Sicherheitsstufe


The following is an example showing SELinux context. SELinux contexts are used on processes, Linux users, and files, on Linux operating systems that run SELinux. Use the following command to view the SELinux context of files and directories:
; Ausführung von SELinux 
Entscheidungen zur Zugriffskontrolle des Kontexts


SELinux bietet eine Kombination aus
* [[Rollenbasierter Zugriffskontrolle]] ([[RBAC]])
* [[Typdurchsetzung]] ([[TE]])
* [[Mehrstufiger Sicherheit]] ([[MLS]])


~]$ ls -Z file1
; Beispiele für SELinux-Kontexte
-rwxrw-r--  user1 group1 unconfined_u:object_r:user_home_t:s0      file1
SELinux-Kontexte werden auf Prozessen, Linux-Benutzern und Dateien unter Linux-Betriebssystemen verwendet, auf denen SELinux läuft


SELinux contexts follow the ''SELinux user:role:type:level'' syntax. The fields are as follows:
== Kontext-Syntax ==
 '''SELinuxUser:role:type:level'''


<div style="margin-left:0cm;">''SELinux user''</div>
; Felder
{| class="wikitable options big"
! Bestandteil
! Beispiel
! Beschreibung
|-
| user
| <name>_u
| SELinux-Benutzer
* Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts
|-
| role
| <name>_r
| SELinux-Rolle
* Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen
|-
| type
| '''<name>_t'''
| SELinux-Typ – 'der wichtigste Bestandteil' im Type-Enforcement-Modell


<div style="margin-left:1cm;">The SELinux user identity is an identity known to the policy that is authorized for a specific set of roles, and for a specific MLS/MCS range. Each Linux user is mapped to an SELinux user using SELinux policy. This allows Linux users to inherit the restrictions placed on SELinux users. The mapped SELinux user identity is used in the SELinux context for processes in that session, in order to define what roles and levels they can enter. Enter the following command as root to view a list of mappings between SELinux and Linux user accounts (you need to have the policycoreutils-python package installed): </div>
* Der Typ wird in Zugriffsregeln ausgewertet und 'bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind'
|-
| level
| s0
| SELinux-Level – die Sicherheitsstufe
* In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten
* In vielen Standardszenarien erscheint hier einfach s0
|}


== Domänenübergänge ==
Ein Prozess in einer Domäne wechselt in eine andere Domäne, indem er eine Anwendung ausführt, die den Typ entrypoint für die neue Domäne hat
* Die Berechtigung entrypoint wird in der SELinux-Richtlinie verwendet und steuert, welche Anwendungen zum Betreten einer Domäne verwendet werden können
* Das folgende Beispiel veranschaulicht einen Domänenwechsel


~]# semanage login -l
; Ein Beispiel für einen Domänenübergang
Login Name          SELinux User        MLS/MCS Range        Service
Ein Benutzer möchte sein Passwort ändern
* Dazu führt er das Dienstprogramm passwd aus


__default__          unconfined_u        s0-s0:c0.c1023      <nowiki>*</nowiki>
Die ausführbare Datei /usr/bin/passwd ist mit dem Typ '''passwd_exec_t''' gekennzeichnet. Das Dienstprogramm passwd greift auf /etc/shadow zu, das mit dem Typ '''shadow_t''' gekennzeichnet ist.
root                unconfined_u        s0-s0:c0.c1023      <nowiki>*</nowiki>
system_u            system_u            s0-s0:c0.c1023      <nowiki>*</nowiki>


<div style="margin-left:1cm;">Output may differ slightly from system to system: </div>* The <tt>Login Name</tt> column lists Linux users.
; Eine SELinux-Richtlinienregel besagt
* The <tt>SELinux User</tt> column lists which SELinux user the Linux user is mapped to. For processes, the SELinux user limits which roles and levels are accessible.
* dass Prozesse, die in der '''passwd_t'''-Domäne laufen, Dateien lesen und schreiben dürfen, die mit dem Typ '''shadow_t''' gekennzeichnet sind
* The <tt>MLS/MCS Range</tt> column, is the level used by Multi-Level Security (MLS) and Multi-Category Security (MCS).
* The <tt>Service</tt> column determines the correct SELinux context, in which the Linux user is supposed to be logged in to the system. By default, the asterisk (<tt><nowiki>*</nowiki></tt>) character is used, which stands for any service.


Wenn ein Benutzer das Dienstprogramm passwd ausführt wechselt der Shell-Prozess des Benutzers in die '''passwd_t'''-Domäne.


Da bei SELinux die Standardaktion '''Verweigern''' ist und eine Regel existiert, die Anwendungen, die in der '''passwd_t'''-Domäne laufen, den Zugriff auf Dateien mit dem Typ '''shadow_t''' erlaubt, darf die passwd-Anwendung auf /etc/shadow zugreifen und das Passwort des Benutzers aktualisieren.


<div style="margin-left:0cm;">''role''</div>
== Praxis: Kontexte anzeigen und ändern ==
; SELinux-Kontext von Dateien und Verzeichnissen anzeigen
<syntaxhighlight lang="bash" highlight="1" copy line>
ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
</syntaxhighlight>


<div style="margin-left:1cm;">Part of SELinux is the Role-Based Access Control (RBAC) security model. The role is an attribute of RBAC. SELinux users are authorized for roles, and roles are authorized for domains. The role serves as an intermediary between domains and SELinux users. The roles that can be entered determine which domains can be entered; ultimately, this controls which object types can be accessed. This helps reduce vulnerability to privilege escalation attacks. </div>
; SELinux- und Linux-Benutzer
Geben Sie den folgenden Befehl als root ein, um eine Liste der Zuordnungen zwischen SELinux- und Linux-Benutzerkonten anzuzeigen (das Paket policycoreutils-python muss installiert sein):
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo semanage login -l
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst


<div style="margin-left:0cm;">''type''</div>
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
</syntaxhighlight>


<div style="margin-left:1cm;">The type is an attribute of Type Enforcement. The type defines a domain for processes, and a type for files. SELinux policy rules define how types can access each other, whether it be a domain accessing a type, or a domain accessing another domain. Access is only allowed if a specific SELinux policy rule exists that allows it. </div>
; Prozesskontext
Verwenden Sie den Befehl ps -eZ, um den SELinux-Kontext für Prozesse anzuzeigen.
Anzeigen des SELinux-Kontexts für das Dienstprogramm passwd:
<syntaxhighlight lang="bash" highlight="1" copy line>
ps -eZ | grep passwd
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd
</syntaxhighlight>


<div style="margin-left:0cm;">''level''</div>
Um die SELinux-Kontexte aller laufenden Prozesse anzuzeigen, führen Sie das Dienstprogramm ps erneut aus:
<syntaxhighlight lang="bash" highlight="1" copy line>
ps -eZ
system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient
system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd
system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond
system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd
</syntaxhighlight>


<div style="margin-left:1cm;">The level is an attribute of MLS and MCS. An MLS range is a pair of levels, written as ''lowlevel-highlevel'' if the levels differ, or ''lowlevel'' if the levels are identical (<tt>s0-s0</tt> is the same as <tt>s0</tt>). Each level is a sensitivity-category pair, with categories being optional. If there are categories, the level is written as ''sensitivity:category-set''. If there are no categories, it is written as ''sensitivity''. </div>
Die Rolle system_r wird für Systemprozesse wie Daemons verwendet. Type Enforcement trennt dann jede Domäne.


<div style="margin-left:1cm;">If the category set is a contiguous series, it can be abbreviated. For example, <tt>c0.c3</tt> is the same as <tt>c0,c1,c2,c3</tt>. The <tt>/etc/selinux/targeted/setrans.conf</tt> file maps levels (<tt>s0:c0</tt>) to human-readable form (that is <tt>CompanyConfidential</tt>). In Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, targeted policy enforces MCS, and in MCS, there is just one sensitivity, <tt>s0</tt>. MCS in Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux supports 1024 different categories: <tt>c0</tt> through to <tt>c1023</tt>. <tt>s0-s0:c0.c1023</tt> is sensitivity <tt>s0</tt> and authorized for all categories. </div>
; Benutzerkontext
Verwenden Sie den folgenden Befehl, um den SELinux-Kontext anzuzeigen, der Ihrem Linux-Benutzer zugeordnet ist:
<syntaxhighlight lang="bash" highlight="1" copy line>
id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
</syntaxhighlight>
 
Dieser SELinux-Kontext zeigt, dass der Linux-Benutzer dem SELinux-Benutzer unconfined_u zugeordnet ist, in der Rolle unconfined_r läuft und in der Domäne '''unconfined_t''' ausgeführt wird. s0-s0 ist ein MLS-Bereich, der in diesem Fall mit s0 identisch ist. Standardmäßig laufen Linux-Benutzer in der unconfined-Rolle.
 
== Context setzen mit chcon ==
* Category und Sensitivity Label setzen mit chcat
<syntaxhighlight lang="bash" highlight="1" copy line>
ps -eZ | grep httpd
system_u:system_r:httpd_t:s0  16392 ?    00:00:01 apache2
</syntaxhighlight>
 
== Benutzer ==
; SELinux-Benutzeridentität
 
Richtlinie bekannte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten MLS/MCS-Bereich autorisiert ist
* Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet
* Dadurch können Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen übernehmen
* Die zugeordnete SELinux-Benutzeridentität wird im SELinux-Kontext für Prozesse in dieser Sitzung verwendet, um zu definieren, welche Rollen und Ebenen sie betreten dürfen
 
Die Ausgabe kann von System zu System leicht abweichen:
* Die Spalte Login Name listet Linux-Benutzer auf
* Die Spalte SELinux User listet auf, welchem SELinux-Benutzer der Linux-Benutzer zugeordnet ist
 
* Bei Prozessen legt der SELinux-Benutzer fest, auf welche Rollen und Ebenen zugegriffen werden kann
* Die Spalte MLS/MCS-Bereich gibt die Ebene an, die von Multi-Level Security (MLS) und Multi-Category Security (MCS) verwendet wird
* Die Spalte Dienst bestimmt den korrekten SELinux-Kontext, in dem der Linux-Benutzer am System angemeldet sein soll
 
* Standardmäßig wird das Sternchen (*) verwendet, das für jeden beliebigen Dienst steht
 
; Rolle
 
; Teil von SELinux ist das Sicherheitsmodell der rollenbasierten Zugriffskontrolle (RBAC)
* Die Rolle ist ein Attribut von RBAC
* SELinux-Benutzer sind für Rollen autorisiert, und Rollen sind für Domänen autorisiert
 
* Die Rolle dient als Vermittler zwischen Domänen und SELinux-Benutzern
* Die Rollen, auf die zugegriffen werden kann, bestimmen, auf welche Domänen zugegriffen werden kann; letztendlich steuert dies, auf welche Objekttypen zugegriffen werden kann
* Dies trägt dazu bei, die Anfälligkeit für Angriffe zur Rechteausweitung zu verringern
 
; Typ
Der Typ ist ein Attribut der Typdurchsetzung
* Der Typ definiert eine Domäne für Prozesse und einen Typ für Dateien
* SELinux-Richtlinienregeln definieren, wie Typen aufeinander zugreifen können, sei es eine Domäne, die auf einen Typ zugreift, oder eine Domäne, die auf eine andere Domäne zugreift
* Zugriff ist nur erlaubt, wenn eine spezifische SELinux-Richtlinienregel existiert, die dies zulässt
 
; level
Die Stufe ist ein Attribut von MLS und MCS
* Ein MLS-Bereich ist ein Paar von Stufen, das als lowlevel-highlevel geschrieben wird, wenn sich die Stufen unterscheiden, oder als lowlevel, wenn die Stufen identisch sind (s0-s0 entspricht s0)
 
* Jede Stufe ist ein Paar aus Sensitivitätsstufe und Kategorie, wobei Kategorien optional sind
* Wenn Kategorien vorhanden sind, wird die Stufe als Sensitivitätsstufe:Kategoriengruppe geschrieben
* Wenn keine Kategorien vorhanden sind, wird sie als Sensitivitätsstufe geschrieben
 
; Wenn die Kategoriengruppe eine zusammenhängende Reihe ist, kann sie abgekürzt werden
* Beispielsweise entspricht c0.c3 dem Ausdruck c0,c1,c2,c3
* Die Datei /etc/selinux/targeted/setrans.conf ordnet Stufen (s0:c0) einer für Menschen lesbaren Form zu (nämlich CompanyConfidential)
 
* In Linux setzt die gezielte Richtlinie MCS durch, und in MCS gibt es nur eine Sensitivitätsstufe, s0


<div style="margin-left:1cm;">MLS enforces the Bell-La Padula Mandatory Access Model, and is used in Labeled Security Protection Profile (LSPP) environments. To use MLS restrictions, install the selinux-policy-mls package, and configure MLS to be the default SELinux policy. The MLS policy shipped with Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux omits many program domains that were not part of the evaluated configuration, and therefore, MLS on a desktop workstation is unusable (no support for the X Window System); however, an MLS policy from the upstream SELinux Reference Policy can be built that includes all program domains. For more information on MLS configuration, see [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#mls Section 4.13, “Multi-Level Security (MLS)”]. </div>
* MCS in Linux unterstützt 1024 verschiedene Kategorien: c0 bis c1023. s0-s0:c0.c1023 entspricht der Sensitivitätsstufe s0 und ist für alle Kategorien autorisiert


=== [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#sect-Security-Enhanced_Linux-SELinux_Contexts-Domain_Transitions 2.1. Domain Transitions] ===
; MLS setzt das Bell-La-Padula-Modell für zwingenden Zugriff durch und wird in LSPP-Umgebungen (Labeled Security Protection Profile) verwendet
* Um MLS-Einschränkungen zu nutzen, installieren Sie das Paket selinux-policy-mls und konfigurieren Sie MLS als Standard-SELinux-Richtlinie


A process in one domain transitions to another domain by executing an application that has the <tt>entrypoint</tt> type for the new domain. The <tt>entrypoint</tt> permission is used in SELinux policy and controls which applications can be used to enter a domain. The following example demonstrates a domain transition:
* Die mit Linux gelieferte MLS-Richtlinie lässt viele Programmdomänen außer Acht, die nicht Teil der evaluierten Konfiguration waren, weshalb MLS auf einer Desktop-Workstation unbrauchbar ist (keine Unterstützung für das X Window System); es kann jedoch eine MLS-Richtlinie aus der vorgelagerten SELinux-Referenzrichtlinie erstellt werden, die alle Programmdomänen enthält


'''Procedure&nbsp;2.1.&nbsp;An Example of a Domain Transition'''# A user wants to change their password. To do this, they run the <tt>passwd</tt> utility. The <tt>/usr/bin/passwd</tt> executable is labeled with the <tt>passwd_exec_t</tt> type: <br/>
; Weitere Informationen
~]$ ls -Z /usr/bin/passwd<br/>-rwsr-xr-x  root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd<br/>The <tt>passwd</tt> utility accesses <tt>/etc/shadow</tt>, which is labeled with the <tt>shadow_t</tt> type: <br/>
zur MLS-Konfiguration finden Sie unter [[Linux/SELinux/04/13 Multi-Level Security]]
~]$ ls -Z /etc/shadow<br/>-r--------. root root system_u:object_r:shadow_t:s0    /etc/shadow<br/>


# An SELinux policy rule states that processes running in the <tt>passwd_t</tt> domain are allowed to read and write to files labeled with the <tt>shadow_t</tt> type. The <tt>shadow_t</tt> type is only applied to files that are required for a password change. This includes <tt>/etc/gshadow</tt>, <tt>/etc/shadow</tt>, and their backup files.
== File Context Verwaltung ==
# An SELinux policy rule states that the <tt>passwd_t</tt> domain has its <tt>entrypoint</tt> permission set to the <tt>passwd_exec_t</tt> type.
'''SELinux/File Context''' - Verhalten bei Dateisystemen mit und ohne xattr Unterstützung
# When a user runs the <tt>passwd</tt> utility, the user's shell process transitions to the <tt>passwd_t</tt> domain. With SELinux, since the default action is to deny, and a rule exists that allows (among other things) applications running in the <tt>passwd_t</tt> domain to access files labeled with the <tt>shadow_t</tt> type, the <tt>passwd</tt> application is allowed to access <tt>/etc/shadow</tt>, and update the user's password.


; Mount Optionen
<syntaxhighlight lang="bash" highlight="1">
SELinux (context=, defcontext=, fs,context=, rootcontext=)
</syntaxhighlight>


<syntaxhighlight lang="bash" highlight="1" copy>
ls -Z /usr/bin/passwd
</syntaxhighlight>
<!-- output -->
<syntaxhighlight lang="bash" highlight="" >
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
</syntaxhighlight>


This example is not exhaustive, and is used as a basic example to explain domain transition. Although there is an actual rule that allows subjects running in the <tt>passwd_t</tt> domain to access objects labeled with the <tt>shadow_t</tt> file type, other SELinux policy rules must be met before the subject can transition to a new domain. In this example, Type Enforcement ensures: * The <tt>passwd_t</tt> domain can only be entered by executing an application labeled with the <tt>passwd_exec_t</tt> type; can only execute from authorized shared libraries, such as the <tt>lib_t</tt> type; and cannot execute any other applications.
<syntaxhighlight lang="bash" highlight="1" line copy>
* Only authorized domains, such as <tt>passwd_t</tt>, can write to files labeled with the <tt>shadow_t</tt> type. Even if other processes are running with superuser privileges, those processes cannot write to files labeled with the <tt>shadow_t</tt> type, as they are not running in the <tt>passwd_t</tt> domain.
ls -Z /etc/shadow
* Only authorized domains can transition to the <tt>passwd_t</tt> domain. For example, the <tt>sendmail</tt> process running in the <tt>sendmail_t</tt> domain does not have a legitimate reason to execute <tt>passwd</tt><nowiki>; therefore, it can never transition to the </nowiki><tt>passwd_t</tt> domain.
</syntaxhighlight>
* Processes running in the <tt>passwd_t</tt> domain can only read and write to authorized types, such as files labeled with the <tt>etc_t</tt> or <tt>shadow_t</tt> types. This prevents the <tt>passwd</tt> application from being tricked into reading or writing arbitrary files.
<!-- output -->
<syntaxhighlight lang="bash" highlight="" line>
-r--------
root root system_u:object_r:shadow_t:s0 /etc/shadow
</syntaxhighlight>


* Der Typ shadow_t wird nur auf Dateien angewendet, die für eine Passwortänderung erforderlich sind
* Dazu gehören /etc/gshadow, /etc/shadow und deren Sicherungsdateien


Eine SELinux-Richtlinienregel besagt, dass für die passwd_t-Domäne die entrypoint-Berechtigung auf den Typ passwd_exec_t gesetzt ist


=== [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Processes 2.2. SELinux Contexts for Processes] ===
Dieses Beispiel ist nicht erschöpfend und dient als grundlegendes Beispiel zur Erläuterung des Domänenwechsels
* Obwohl es eine tatsächliche Regel gibt, die es Subjekten, die in der passwd_t-Domäne laufen, erlaubt, auf Objekte zuzugreifen, die mit dem Dateityp shadow_t gekennzeichnet sind, müssen andere SELinux-Richtlinienregeln erfüllt sein, bevor das Subjekt in eine neue Domäne wechseln kann


Use the <tt>ps -eZ</tt> command to view the SELinux context for processes. For example:
: In diesem Beispiel stellt die Typdurchsetzung Folgendes sicher
* Die passwd_t-Domäne kann nur durch die Ausführung einer Anwendung betreten werden, die mit dem Typ passwd_exec_t gekennzeichnet ist; sie darf nur aus autorisierten gemeinsam genutzten Bibliotheken, wie beispielsweise dem Typ lib_t, ausführen; und sie darf keine anderen Anwendungen ausführen
* Nur autorisierte Domänen, wie beispielsweise passwd_t, können in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind
* Selbst wenn andere Prozesse mit Superuser-Rechten laufen, können diese Prozesse nicht in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind, da sie nicht in der Domäne passwd_t laufen
* Nur autorisierte Domänen können in die passwd_t-Domäne wechseln
* Beispielsweise hat der in der sendmail_t-Domäne laufende sendmail-Prozess keinen legitimen Grund, passwd<nowiki> auszuführen; daher kann er niemals in die </nowiki>passwd_t-Domäne wechseln
* Prozesse, die in der passwd_t-Domäne laufen, können nur auf autorisierte Typen lesen und schreiben, wie beispielsweise Dateien, die mit den Typen etc_t oder shadow_t gekennzeichnet sind
* Dies verhindert, dass die passwd-Anwendung dazu verleitet wird, beliebige Dateien zu lesen oder zu schreiben


'''Procedure&nbsp;2.2.&nbsp;View the SELinux Context for the <tt>passwd</tt> Utility'''# Open a terminal, such as '''Applications''' '''System Tools''' '''Terminal'''.
# Öffnen Sie ein Terminal, beispielsweise über Anwendungen Systemwerkzeuge → Terminal  
# Run the <tt>passwd</tt> utility. Do not enter a new password: <br/>~]$ passwd<br/>Changing password for user ''user_name''.<br/>Changing password for ''user_name''.<br/>(current) UNIX password:
# Führen Sie das Dienstprogramm passwd aus
# Open a new tab, or another terminal, and enter the following command. The output is similar to the following: <br/>~]$ ps -eZ | grep passwd<br/>unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd
# In the first tab/terminal, press <tt>'''Ctrl+C'''</tt> to cancel the <tt>passwd</tt> utility.


Geben Sie kein neues Passwort ein:
<syntaxhighlight lang="bash" highlight="1" line copy>
passwd
</syntaxhighlight>
<!-- output -->
<syntaxhighlight lang="bash" highlight="" line>
Passwort für Benutzer ‚'user_name‘' ändern
Passwort für ‚'user_name‘' ändern
(aktuelles) UNIX-Passwort:
</syntaxhighlight>


Öffnen Sie einen neuen Tab oder ein weiteres Terminal und geben Sie den folgenden Befehl ein


In this example, when the <tt>passwd</tt> utility (labeled with the <tt>passwd_exec_t</tt> type) is executed, the user's shell process transitions to the <tt>passwd_t</tt> domain. Remember that the type defines a domain for processes, and a type for files.
Die Ausgabe sieht in etwa wie folgt aus:
<syntaxhighlight lang="bash" highlight="1" line copy>
</syntaxhighlight>


To view the SELinux contexts for all running processes, run the <tt>ps</tt> utility again. Note that below is a truncated example of the output, and may differ on your system:
<!-- output -->
<syntaxhighlight lang="bash" highlight="" line>
</syntaxhighlight>


Drücken Sie im ersten Tab/Terminal Strg+C, um das Dienstprogramm passwd abzubrechen


In diesem Beispiel wechselt der Shell-Prozess des Benutzers in die Domäne passwd_t, wenn das Dienstprogramm passwd (mit dem Typ passwd_exec_t gekennzeichnet) ausgeführt wird
* Beachten Sie, dass der Typ eine Domäne für Prozesse und einen Typ für Dateien definiert


Beachten Sie, dass es sich bei der folgenden Ausgabe um ein gekürztes Beispiel handelt, das auf Ihrem System abweichen kann:
* Die Kategorien, auf die der Benutzer Zugriff hat, werden durch <tt>c0.c1023</tt> definiert, was alle Kategorien (<tt>c0</tt> bis <tt>c1023</tt>) umfasst.


{| class="wikitable options big"
! Bestandteil
! Beispiel
! Beschreibung
|-
| user
| ''<name>_u''
| SELinux User. Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts.
|-
| role
| ''<name>_r''
| SELinux Role. Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen.
|-
| type
| ''<name>_t''
| SELinux Type - '''der wichtigste Bestandteil''' im Type-Enforcement-Modell. Der Typ wird in Zugriffsregeln ausgewertet und '''bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind'''.
|-
| level
| ''s0''
| SELinux Level - die Sicherheitsstufe. In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten. In vielen Standardszenarien erscheint hier einfach ''s0''.
|}


<noinclude>


]$ ps -eZ
== Anhang ==
system_u:system_r:dhcpc_t:s0            1869 ?  00:00:00 dhclient
=== Siehe auch ===
system_u:system_r:sshd_t:s0-s0:c0.c1023  1882 ?  00:00:00 sshd
; Unterseiten
system_u:system_r:gpm_t:s0              1964 ?  00:00:00 gpm
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ?  00:00:00 crond
----
system_u:system_r:kerneloops_t:s0        1983 ?  00:00:05 kerneloops
; Inhalt der aktuellen Kategorie
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ?  00:00:00 atd
<div style="column-count:2">
<categorytree hideroot=on mode="pages">Linux/SELinux</categorytree>
</div>


The <tt>system_r</tt> role is used for system processes, such as daemons. Type Enforcement then separates each domain.  
=== Dokumentation ===
<!--
; Man-Page
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]


=== [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#sect-Security-Enhanced_Linux-SELinux_Contexts-SELinux_Contexts_for_Users 2.3. SELinux Contexts for Users] ===
; Info-Pages
-->


Use the following command to view the SELinux context associated with your Linux user:
=== Links ===
==== Projekt ====
==== Weblinks ====
# [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#chap-Security-Enhanced_Linux-SELinux_Contexts Kapitel 2. SELinux-Kontexte]


~]$ id -Z
<!--
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
{{DEFAULTSORT:new}}
{{DISPLAYTITLE:new}}
-->
 
----
 
{{Navigation|Linux/SELinux/02 Installation|Linux/SELinux/03 Default Policy}}
 
[[Kategorie:Linux/SELinux]]


In Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, Linux users run unconfined by default. This SELinux context shows that the Linux user is mapped to the SELinux <tt>unconfined_u</tt> user, running as the <tt>unconfined_r</tt> role, and is running in the <tt>unconfined_t</tt> domain. <tt>s0-s0</tt> is an MLS range, which in this case, is the same as just <tt>s0</tt>. The categories the user has access to is defined by <tt>c0.c1023</tt>, which is all categories (<tt>c0</tt> through to <tt>c1023</tt>).
</noinclude>

Aktuelle Version vom 16. Juni 2026, 09:24 Uhr

Linux/SELinux/02 Kontext - SELinux Context

Beschreibung

Kennzeichnung

Prozesse und Dateien werden mit einem Kontext gekennzeichnet

Kontext
  • SELinux-Benutzer
  • Rolle
  • Typ
  • Sicherheitsstufe
Ausführung von SELinux 

Entscheidungen zur Zugriffskontrolle des Kontexts

SELinux bietet eine Kombination aus

Beispiele für SELinux-Kontexte

SELinux-Kontexte werden auf Prozessen, Linux-Benutzern und Dateien unter Linux-Betriebssystemen verwendet, auf denen SELinux läuft

Kontext-Syntax

 SELinuxUser:role:type:level

Felder
Bestandteil Beispiel Beschreibung
user <name>_u SELinux-Benutzer
  • Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts
role <name>_r SELinux-Rolle
  • Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen
type <name>_t SELinux-Typ – 'der wichtigste Bestandteil' im Type-Enforcement-Modell
  • Der Typ wird in Zugriffsregeln ausgewertet und 'bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind'
level s0 SELinux-Level – die Sicherheitsstufe
  • In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten
  • In vielen Standardszenarien erscheint hier einfach s0

Domänenübergänge

Ein Prozess in einer Domäne wechselt in eine andere Domäne, indem er eine Anwendung ausführt, die den Typ entrypoint für die neue Domäne hat

  • Die Berechtigung entrypoint wird in der SELinux-Richtlinie verwendet und steuert, welche Anwendungen zum Betreten einer Domäne verwendet werden können
  • Das folgende Beispiel veranschaulicht einen Domänenwechsel
Ein Beispiel für einen Domänenübergang

Ein Benutzer möchte sein Passwort ändern

  • Dazu führt er das Dienstprogramm passwd aus

Die ausführbare Datei /usr/bin/passwd ist mit dem Typ passwd_exec_t gekennzeichnet. Das Dienstprogramm passwd greift auf /etc/shadow zu, das mit dem Typ shadow_t gekennzeichnet ist.

Eine SELinux-Richtlinienregel besagt
  • dass Prozesse, die in der passwd_t-Domäne laufen, Dateien lesen und schreiben dürfen, die mit dem Typ shadow_t gekennzeichnet sind

Wenn ein Benutzer das Dienstprogramm passwd ausführt wechselt der Shell-Prozess des Benutzers in die passwd_t-Domäne.

Da bei SELinux die Standardaktion Verweigern ist und eine Regel existiert, die Anwendungen, die in der passwd_t-Domäne laufen, den Zugriff auf Dateien mit dem Typ shadow_t erlaubt, darf die passwd-Anwendung auf /etc/shadow zugreifen und das Passwort des Benutzers aktualisieren.

Praxis: Kontexte anzeigen und ändern

SELinux-Kontext von Dateien und Verzeichnissen anzeigen
ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
SELinux- und Linux-Benutzer

Geben Sie den folgenden Befehl als root ein, um eine Liste der Zuordnungen zwischen SELinux- und Linux-Benutzerkonten anzuzeigen (das Paket policycoreutils-python muss installiert sein):

sudo semanage login -l
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst

__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
Prozesskontext

Verwenden Sie den Befehl ps -eZ, um den SELinux-Kontext für Prozesse anzuzeigen. Anzeigen des SELinux-Kontexts für das Dienstprogramm passwd:

ps -eZ | grep passwd
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd

Um die SELinux-Kontexte aller laufenden Prozesse anzuzeigen, führen Sie das Dienstprogramm ps erneut aus:

ps -eZ
system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient
system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd
system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond
system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd

Die Rolle system_r wird für Systemprozesse wie Daemons verwendet. Type Enforcement trennt dann jede Domäne.

Benutzerkontext

Verwenden Sie den folgenden Befehl, um den SELinux-Kontext anzuzeigen, der Ihrem Linux-Benutzer zugeordnet ist:

id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Dieser SELinux-Kontext zeigt, dass der Linux-Benutzer dem SELinux-Benutzer unconfined_u zugeordnet ist, in der Rolle unconfined_r läuft und in der Domäne unconfined_t ausgeführt wird. s0-s0 ist ein MLS-Bereich, der in diesem Fall mit s0 identisch ist. Standardmäßig laufen Linux-Benutzer in der unconfined-Rolle.

Context setzen mit chcon

  • Category und Sensitivity Label setzen mit chcat
ps -eZ | grep httpd
system_u:system_r:httpd_t:s0   16392 ?    00:00:01 apache2

Benutzer

SELinux-Benutzeridentität

Richtlinie bekannte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten MLS/MCS-Bereich autorisiert ist

  • Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet
  • Dadurch können Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen übernehmen
  • Die zugeordnete SELinux-Benutzeridentität wird im SELinux-Kontext für Prozesse in dieser Sitzung verwendet, um zu definieren, welche Rollen und Ebenen sie betreten dürfen

Die Ausgabe kann von System zu System leicht abweichen:

  • Die Spalte Login Name listet Linux-Benutzer auf
  • Die Spalte SELinux User listet auf, welchem SELinux-Benutzer der Linux-Benutzer zugeordnet ist
  • Bei Prozessen legt der SELinux-Benutzer fest, auf welche Rollen und Ebenen zugegriffen werden kann
  • Die Spalte MLS/MCS-Bereich gibt die Ebene an, die von Multi-Level Security (MLS) und Multi-Category Security (MCS) verwendet wird
  • Die Spalte Dienst bestimmt den korrekten SELinux-Kontext, in dem der Linux-Benutzer am System angemeldet sein soll
  • Standardmäßig wird das Sternchen (*) verwendet, das für jeden beliebigen Dienst steht
Rolle
Teil von SELinux ist das Sicherheitsmodell der rollenbasierten Zugriffskontrolle (RBAC)
  • Die Rolle ist ein Attribut von RBAC
  • SELinux-Benutzer sind für Rollen autorisiert, und Rollen sind für Domänen autorisiert
  • Die Rolle dient als Vermittler zwischen Domänen und SELinux-Benutzern
  • Die Rollen, auf die zugegriffen werden kann, bestimmen, auf welche Domänen zugegriffen werden kann; letztendlich steuert dies, auf welche Objekttypen zugegriffen werden kann
  • Dies trägt dazu bei, die Anfälligkeit für Angriffe zur Rechteausweitung zu verringern
Typ

Der Typ ist ein Attribut der Typdurchsetzung

  • Der Typ definiert eine Domäne für Prozesse und einen Typ für Dateien
  • SELinux-Richtlinienregeln definieren, wie Typen aufeinander zugreifen können, sei es eine Domäne, die auf einen Typ zugreift, oder eine Domäne, die auf eine andere Domäne zugreift
  • Zugriff ist nur erlaubt, wenn eine spezifische SELinux-Richtlinienregel existiert, die dies zulässt
level

Die Stufe ist ein Attribut von MLS und MCS

  • Ein MLS-Bereich ist ein Paar von Stufen, das als lowlevel-highlevel geschrieben wird, wenn sich die Stufen unterscheiden, oder als lowlevel, wenn die Stufen identisch sind (s0-s0 entspricht s0)
  • Jede Stufe ist ein Paar aus Sensitivitätsstufe und Kategorie, wobei Kategorien optional sind
  • Wenn Kategorien vorhanden sind, wird die Stufe als Sensitivitätsstufe:Kategoriengruppe geschrieben
  • Wenn keine Kategorien vorhanden sind, wird sie als Sensitivitätsstufe geschrieben
Wenn die Kategoriengruppe eine zusammenhängende Reihe ist, kann sie abgekürzt werden
  • Beispielsweise entspricht c0.c3 dem Ausdruck c0,c1,c2,c3
  • Die Datei /etc/selinux/targeted/setrans.conf ordnet Stufen (s0:c0) einer für Menschen lesbaren Form zu (nämlich CompanyConfidential)
  • In Linux setzt die gezielte Richtlinie MCS durch, und in MCS gibt es nur eine Sensitivitätsstufe, s0
  • MCS in Linux unterstützt 1024 verschiedene Kategorien: c0 bis c1023. s0-s0:c0.c1023 entspricht der Sensitivitätsstufe s0 und ist für alle Kategorien autorisiert
MLS setzt das Bell-La-Padula-Modell für zwingenden Zugriff durch und wird in LSPP-Umgebungen (Labeled Security Protection Profile) verwendet
  • Um MLS-Einschränkungen zu nutzen, installieren Sie das Paket selinux-policy-mls und konfigurieren Sie MLS als Standard-SELinux-Richtlinie
  • Die mit Linux gelieferte MLS-Richtlinie lässt viele Programmdomänen außer Acht, die nicht Teil der evaluierten Konfiguration waren, weshalb MLS auf einer Desktop-Workstation unbrauchbar ist (keine Unterstützung für das X Window System); es kann jedoch eine MLS-Richtlinie aus der vorgelagerten SELinux-Referenzrichtlinie erstellt werden, die alle Programmdomänen enthält
Weitere Informationen

zur MLS-Konfiguration finden Sie unter Linux/SELinux/04/13 Multi-Level Security

File Context Verwaltung

SELinux/File Context - Verhalten bei Dateisystemen mit und ohne xattr Unterstützung

Mount Optionen
SELinux (context=, defcontext=,	fs,context=, rootcontext=)
ls -Z /usr/bin/passwd
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
ls -Z /etc/shadow
-r--------
root root system_u:object_r:shadow_t:s0 /etc/shadow
  • Der Typ shadow_t wird nur auf Dateien angewendet, die für eine Passwortänderung erforderlich sind
  • Dazu gehören /etc/gshadow, /etc/shadow und deren Sicherungsdateien

Eine SELinux-Richtlinienregel besagt, dass für die passwd_t-Domäne die entrypoint-Berechtigung auf den Typ passwd_exec_t gesetzt ist

Dieses Beispiel ist nicht erschöpfend und dient als grundlegendes Beispiel zur Erläuterung des Domänenwechsels

  • Obwohl es eine tatsächliche Regel gibt, die es Subjekten, die in der passwd_t-Domäne laufen, erlaubt, auf Objekte zuzugreifen, die mit dem Dateityp shadow_t gekennzeichnet sind, müssen andere SELinux-Richtlinienregeln erfüllt sein, bevor das Subjekt in eine neue Domäne wechseln kann
In diesem Beispiel stellt die Typdurchsetzung Folgendes sicher
  • Die passwd_t-Domäne kann nur durch die Ausführung einer Anwendung betreten werden, die mit dem Typ passwd_exec_t gekennzeichnet ist; sie darf nur aus autorisierten gemeinsam genutzten Bibliotheken, wie beispielsweise dem Typ lib_t, ausführen; und sie darf keine anderen Anwendungen ausführen
  • Nur autorisierte Domänen, wie beispielsweise passwd_t, können in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind
  • Selbst wenn andere Prozesse mit Superuser-Rechten laufen, können diese Prozesse nicht in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind, da sie nicht in der Domäne passwd_t laufen
  • Nur autorisierte Domänen können in die passwd_t-Domäne wechseln
  • Beispielsweise hat der in der sendmail_t-Domäne laufende sendmail-Prozess keinen legitimen Grund, passwd auszuführen; daher kann er niemals in die passwd_t-Domäne wechseln
  • Prozesse, die in der passwd_t-Domäne laufen, können nur auf autorisierte Typen lesen und schreiben, wie beispielsweise Dateien, die mit den Typen etc_t oder shadow_t gekennzeichnet sind
  • Dies verhindert, dass die passwd-Anwendung dazu verleitet wird, beliebige Dateien zu lesen oder zu schreiben
  1. Öffnen Sie ein Terminal, beispielsweise über Anwendungen → Systemwerkzeuge → Terminal
  2. Führen Sie das Dienstprogramm passwd aus

Geben Sie kein neues Passwort ein:

passwd
Passwort für Benutzer 'user_name‘' ändern
Passwort für 'user_name‘' ändern
(aktuelles) UNIX-Passwort:

Öffnen Sie einen neuen Tab oder ein weiteres Terminal und geben Sie den folgenden Befehl ein

Die Ausgabe sieht in etwa wie folgt aus:

Drücken Sie im ersten Tab/Terminal Strg+C, um das Dienstprogramm passwd abzubrechen

In diesem Beispiel wechselt der Shell-Prozess des Benutzers in die Domäne passwd_t, wenn das Dienstprogramm passwd (mit dem Typ passwd_exec_t gekennzeichnet) ausgeführt wird

  • Beachten Sie, dass der Typ eine Domäne für Prozesse und einen Typ für Dateien definiert

Beachten Sie, dass es sich bei der folgenden Ausgabe um ein gekürztes Beispiel handelt, das auf Ihrem System abweichen kann:

  • Die Kategorien, auf die der Benutzer Zugriff hat, werden durch c0.c1023 definiert, was alle Kategorien (c0 bis c1023) umfasst.
Bestandteil Beispiel Beschreibung
user <name>_u SELinux User. Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts.
role <name>_r SELinux Role. Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen.
type <name>_t SELinux Type - der wichtigste Bestandteil im Type-Enforcement-Modell. Der Typ wird in Zugriffsregeln ausgewertet und bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind.
level s0 SELinux Level - die Sicherheitsstufe. In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten. In vielen Standardszenarien erscheint hier einfach s0.


Anhang

Siehe auch

Unterseiten

Inhalt der aktuellen Kategorie

Dokumentation

Projekt

  1. Kapitel 2. SELinux-Kontexte