Zum Inhalt springen

Linux/SELinux/01 Grundlagen: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=== Introduction ===
=== Einleitung ===
Security Enhanced Linux (SELinux) provides an additional layer of system security. SELinux fundamentally answers the question: "May <subject> do <action> to <object>", for example: "May a web server access files in users' home directories?".
Security Enhanced Linux (SELinux) bietet eine zusätzliche Ebene der Systemsicherheit. SELinux beantwortet im Wesentlichen die Frage: „Darf <Subjekt> die <Aktion> an <Objekt> ausführen?“, zum Beispiel: „Darf ein Webserver auf Dateien in den Home-Verzeichnissen der Benutzer zugreifen?.


The standard access policy based on the user, group, and other permissions, known as Discretionary Access Control (DAC), does not enable system administrators to create comprehensive and fine-grained security policies, such as restricting specific applications to only viewing log files, while allowing other applications to append new data to the log files
Die standardmäßige Zugriffsrichtlinie, die auf Benutzer-, Gruppen- und anderen Berechtigungen basiert und als Discretionary Access Control (DAC) bekannt ist, ermöglicht es Systemadministratoren nicht, umfassende und fein abgestufte Sicherheitsrichtlinien zu erstellen, wie beispielsweise bestimmte Anwendungen darauf zu beschränken, Log-Dateien nur anzuzeigen, während anderen Anwendungen erlaubt wird, neue Daten an die Log-Dateien anzuhängen


SELinux implements Mandatory Access Control (MAC). Every process and system resource has a special security label called a ''SELinux context''. A SELinux context, sometimes referred to as a ''SELinux label'', is an identifier which abstracts away the system-level details and focuses on the security properties of the entity. Not only does this provide a consistent way of referencing objects in the SELinux policy, but it also removes any ambiguity that can be found in other identification methods; for example, a file can have multiple valid path names on a system that makes use of bind mounts.
SELinux implementiert Mandatory Access Control (MAC). Jeder Prozess und jede Systemressource verfügt über eine spezielle Sicherheitskennzeichnung, die als „SELinux-Kontext“ bezeichnet wird. Ein SELinux-Kontext, manchmal auch als „SELinux-Label“ bezeichnet, ist ein Identifikator, der die Details auf Systemebene abstrahiert und sich auf die Sicherheitseigenschaften der Entität konzentriert. Dies bietet nicht nur eine konsistente Methode zur Referenzierung von Objekten in der SELinux-Richtlinie, sondern beseitigt auch jegliche Mehrdeutigkeit, die bei anderen Identifizierungsmethoden auftreten kann; beispielsweise kann eine Datei auf einem System, das Bind-Mounts verwendet, mehrere gültige Pfadnamen haben.


The SELinux policy uses these contexts in a series of rules which define how processes can interact with each other and the various system resources. By default, the policy does not allow any interaction unless a rule explicitly grants access.
Die SELinux-Richtlinie verwendet diese Kontexte in einer Reihe von Regeln, die definieren, wie Prozesse miteinander und mit den verschiedenen Systemressourcen interagieren können. Standardmäßig erlaubt die Richtlinie keine Interaktion, es sei denn, eine Regel gewährt ausdrücklich Zugriff.


'''Note'''
‚‘'Hinweis'‚‘


It is important to remember that SELinux policy rules are checked after DAC rules. SELinux policy rules are not used if DAC rules deny access first, which means that no SELinux denial is logged if the traditional DAC rules prevent the access.
Es ist wichtig zu beachten, dass SELinux-Richtlinienregeln nach den DAC-Regeln überprüft werden. SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuerst verweigern, was bedeutet, dass keine SELinux-Verweigerung protokolliert wird, wenn die herkömmlichen DAC-Regeln den Zugriff verhindern.


SELinux contexts have several fields: user, role, type, and security level. The SELinux type information is perhaps the most important when it comes to the SELinux policy, as the most common policy rule which defines the allowed interactions between processes and system resources uses SELinux types and not the full SELinux context. SELinux types usually end with <code>_t</code>. For example, the type name for the web server is <code>httpd_t</code>. The type context for files and directories normally found in <code>/var/www/html/</code> is <code>httpd_sys_content_t</code>. The type contexts for files and directories normally found in <code>/tmp</code> and <code>/var/tmp/</code> is <code>tmp_t</code>. The type context for web server ports is <code>http_port_t</code>.
SELinux-Kontexte bestehen aus mehreren Feldern: Benutzer, Rolle, Typ und Sicherheitsstufe. Die SELinux-Typinformationen sind für die SELinux-Richtlinie wohl am wichtigsten, da die gängigste Richtliniendevise, die die zulässigen Interaktionen zwischen Prozessen und Systemressourcen definiert, SELinux-Typen und nicht den vollständigen SELinux-Kontext verwendet. SELinux-Typen enden in der Regel mit _t. Der Typname für den Webserver lautet beispielsweise httpd_t. Der Typkontext für Dateien und Verzeichnisse, die normalerweise unter /var/www/html/ zu finden sind, ist httpd_sys_content_t. Der Typkontext für Dateien und Verzeichnisse, die sich normalerweise in /tmp und /var/tmp/ befinden, lautet tmp_t. Der Typkontext für Webserver-Ports lautet http_port_t.


For example, there is a policy rule that permits Apache (the web server process running as <code>httpd_t</code>) to access files and directories with a context normally found in <code>/var/www/html/</code> and other web server directories (<code>httpd_sys_content_t</code>). There is no allow rule in the policy for files normally found in <code>/tmp</code> and <code>/var/tmp/</code>, so access is not permitted. With SELinux, even if Apache is compromised, and a malicious script gains access, it is still not able to access the <code>/tmp</code> directory.
Beispielsweise gibt es eine Richtlinienregel, die Apache (dem als httpd_t ausgeführten Webserver-Prozess) den Zugriff auf Dateien und Verzeichnisse mit einem Kontext erlaubt, der normalerweise in /var/www/html/ und anderen Webserver-Verzeichnissen (httpd_sys_content_t) zu finden ist. Da die Richtlinie keine Zulassungsregel für Dateien enthält, die sich normalerweise in /tmp und /var/tmp/ befinden, ist der Zugriff nicht erlaubt. Mit SELinux kann ein bösartiges Skript selbst dann nicht auf das Verzeichnis /tmp zugreifen, wenn Apache kompromittiert wurde und es Zugriff erlangt hat.


'''Figure 1.1. SELinux allows the Apache process running as httpd_t to access the /var/www/html/ directory and it denies the same process to access the /data/mysql/ directory because there is no allow rule for the httpd_t and mysqld_db_t type contexts). On the other hand, the MariaDB process running as mysqld_t is able to access the /data/mysql/ directory and SELinux also correctly denies the process with the mysqld_t type to access the /var/www/html/ directory labeled as httpd_sys_content_t.'''
‚‘'Abbildung 1.1. SELinux erlaubt dem als httpd_t laufenden Apache-Prozess den Zugriff auf das Verzeichnis /var/www/html/ und verweigert demselben Prozess den Zugriff auf das Verzeichnis /data/mysql/, da es keine Zulassungsregel für die Kontexte vom Typ httpd_t und mysqld_db_t gibt. Andererseits kann der als mysqld_t ausgeführte MariaDB-Prozess auf das Verzeichnis /data/mysql/ zugreifen, und SELinux verweigert dem Prozess vom Typ mysqld_t korrekt den Zugriff auf das als httpd_sys_content_t gekennzeichnete Verzeichnis /var/www/html/.‚‘'


=== 1.1. Benefits of running SELinux ===
=== 1.1. Vorteile des Einsatzes von SELinux ===
SELinux provides the following benefits:
SELinux bietet die folgenden Vorteile:


* All processes and files are labeled. SELinux policy rules define how processes interact with files, as well as how processes interact with each other. Access is only allowed if an SELinux policy rule exists that specifically allows it.
* Alle Prozesse und Dateien sind mit Labels versehen. SELinux-Richtlinienregeln definieren, wie Prozesse mit Dateien interagieren sowie wie Prozesse miteinander interagieren. Zugriff ist nur dann erlaubt, wenn eine SELinux-Richtlinienregel existiert, die dies ausdrücklich erlaubt.
* Fine-grained access control. Stepping beyond traditional UNIX permissions that are controlled at user discretion and based on Linux user and group IDs, SELinux access decisions are based on all available information, such as an SELinux user, role, type, and, optionally, a security level.
* Fein abgestimmte Zugriffskontrolle. Über die traditionellen UNIX-Berechtigungen hinaus, die nach dem Ermessen des Benutzers gesteuert werden und auf Linux-Benutzer- und Gruppen-IDs basieren, basieren SELinux-Zugriffsentscheidungen auf allen verfügbaren Informationen, wie z. B. einem SELinux-Benutzer, einer Rolle, einem Typ und optional einer Sicherheitsstufe.
* SELinux policy is administratively-defined and enforced system-wide.
* Die SELinux-Richtlinie wird administrativ definiert und systemweit durchgesetzt.
* Improved mitigation for privilege escalation attacks. Processes run in domains, and are therefore separated from each other. SELinux policy rules define how processes access files and other processes. If a process is compromised, the attacker only has access to the normal functions of that process, and to files the process has been configured to have access to. For example, if the Apache HTTP Server is compromised, an attacker cannot use that process to read files in user home directories, unless a specific SELinux policy rule was added or configured to allow such access.
* Verbesserte Abwehr von Angriffen zur Privilegieneskalation. Prozesse laufen in Domänen und sind daher voneinander getrennt. SELinux-Richtlinienregeln legen fest, wie Prozesse auf Dateien und andere Prozesse zugreifen. Wenn ein Prozess kompromittiert wird, hat der Angreifer nur Zugriff auf die normalen Funktionen dieses Prozesses und auf Dateien, für die der Prozess konfiguriert wurde, darauf zuzugreifen. Wenn beispielsweise der Apache-HTTP-Server kompromittiert wird, kann ein Angreifer diesen Prozess nicht nutzen, um Dateien in Benutzer-Home-Verzeichnissen zu lesen, es sei denn, eine spezifische SELinux-Richtlinienregel wurde hinzugefügt oder so konfiguriert, dass sie einen solchen Zugriff erlaubt.
* SELinux can be used to enforce data confidentiality and integrity, as well as protecting processes from untrusted inputs.
* SELinux kann eingesetzt werden, um die Vertraulichkeit und Integrität von Daten zu gewährleisten sowie Prozesse vor nicht vertrauenswürdigen Eingaben zu schützen.


However, SELinux is not:
SELinux ist jedoch nicht:


* antivirus software,
* Antivirensoftware,
* replacement for passwords, firewalls, and other security systems,
* ein Ersatz für Passwörter, Firewalls und andere Sicherheitssysteme,
* all-in-one security solution.
* eine All-in-One-Sicherheitslösung.


SELinux is designed to enhance existing security solutions, not replace them. Even when running SELinux, it is important to continue to follow good security practices, such as keeping software up-to-date, using hard-to-guess passwords, or firewalls.
SELinux wurde entwickelt, um bestehende Sicherheitslösungen zu ergänzen, nicht um sie zu ersetzen. Auch bei der Verwendung von SELinux ist es wichtig, weiterhin bewährte Sicherheitspraktiken zu befolgen, wie z. B. die Aktualisierung von Software, die Verwendung schwer zu erratender Passwörter oder den Einsatz von Firewalls.


=== 1.2. Examples ===
=== 1.2. Beispiele ===
The following examples demonstrate how SELinux increases security:
Die folgenden Beispiele veranschaulichen, wie SELinux die Sicherheit erhöht:


* The default action is deny. If an SELinux policy rule does not exist to allow access, such as for a process opening a file, access is denied.
* Die Standardaktion ist „verweigern“. Wenn keine SELinux-Richtlinienregel existiert, die den Zugriff erlaubt, beispielsweise für einen Prozess, der eine Datei öffnet, wird der Zugriff verweigert.
* SELinux can confine Linux users. A number of confined SELinux users exist in the SELinux policy. Linux users can be mapped to confined SELinux users to take advantage of the security rules and mechanisms applied to them. For example, mapping a Linux user to the SELinux <code>user_u</code> user, results in a Linux user that is not able to run (unless configured otherwise) set user ID (setuid) applications, such as <code>sudo</code> and <code>su</code>. See Section 3.3, “Confined and Unconfined Users” for more information.
* SELinux kann Linux-Benutzer einschränken. In der SELinux-Richtlinie gibt es eine Reihe von eingeschränkten SELinux-Benutzern. Linux-Benutzer können eingeschränkten SELinux-Benutzern zugeordnet werden, um die für diese geltenden Sicherheitsregeln und -mechanismen zu nutzen. Wenn beispielsweise ein Linux-Benutzer dem SELinux-Benutzer ```user_u``` zugeordnet wird, führt dies dazu, dass dieser Linux-Benutzer (sofern nicht anders konfiguriert) keine Set-User-ID-Anwendungen (setuid) wie ```sudo``` und ```su``` ausführen kann. Weitere Informationen finden Sie in Abschnitt 3.3, „Eingeschränkte und uneingeschränkte Benutzer“.
* Increased process and data separation. Processes run in their own domains, preventing processes from accessing files used by other processes, as well as preventing processes from accessing other processes. For example, when running SELinux, unless otherwise configured, an attacker cannot compromise a Samba server, and then use that Samba server as an attack vector to read and write to files used by other processes, such as MariaDB databases.
* Verbesserte Prozess- und Datentrennung. Prozesse laufen in ihren eigenen Domänen, wodurch verhindert wird, dass Prozesse auf Dateien zugreifen, die von anderen Prozessen verwendet werden, und dass Prozesse auf andere Prozesse zugreifen. Wenn beispielsweise SELinux ausgeführt wird, kann ein Angreifer – sofern nicht anders konfiguriert – keinen Samba-Server kompromittieren und diesen Samba-Server dann als Angriffsvektor nutzen, um auf Dateien zu lesen und zu schreiben, die von anderen Prozessen verwendet werden, wie z. B. MariaDB-Datenbanken.
* SELinux helps mitigate the damage made by configuration mistakes. Domain Name System (DNS) servers often replicate information between each other in what is known as a zone transfer. Attackers can use zone transfers to update DNS servers with false information. When running the Berkeley Internet Name Domain (BIND) as a DNS server in Red Hat Enterprise Linux, even if an administrator forgets to limit which servers can perform a zone transfer, the default SELinux policy prevents zone files <sup>[1]</sup> from being updated using zone transfers, by the BIND <code>named</code> daemon itself, and by other processes.
* SELinux hilft dabei, den durch Konfigurationsfehler verursachten Schaden zu mindern. Domain Name System (DNS)-Server replizieren häufig Informationen untereinander in einem sogenannten Zonentransfer. Angreifer können Zonentransfers nutzen, um DNS-Server mit falschen Informationen zu aktualisieren. Wenn Berkeley Internet Name Domain (BIND) als DNS-Server unter Red Hat Enterprise Linux ausgeführt wird, verhindert die Standard-SELinux-Richtlinie – selbst wenn ein Administrator vergisst, einzuschränken, welche Server einen Zonentransfer durchführen dürfen –, dass Zonendateien [1] durch Zonentransfers, durch den BIND-Daemon named selbst oder durch andere Prozesse aktualisiert werden.
* See the NetworkWorld.com article, A seatbelt for server software: SELinux blocks real-world exploits<sup>[2]</sup>, for background information about SELinux, and information about various exploits that SELinux has prevented.
* Hintergrundinformationen zu SELinux sowie Informationen zu verschiedenen Exploits, die SELinux verhindert hat, finden Sie im Artikel auf NetworkWorld.com: „A seatbelt for server software: SELinux blocks real-world exploits“[2].


=== 1.3. SELinux Architecture ===
=== 1.3. SELinux-Architektur ===
SELinux is a Linux Security Module (LSM) that is built into the Linux kernel. The SELinux subsystem in the kernel is driven by a security policy which is controlled by the administrator and loaded at boot. All security-relevant, kernel-level access operations on the system are intercepted by SELinux and examined in the context of the loaded security policy. If the loaded policy allows the operation, it continues. Otherwise, the operation is blocked and the process receives an error.
SELinux ist ein Linux Security Module (LSM), das in den Linux-Kernel integriert ist. Das SELinux-Subsystem im Kernel wird von einer Sicherheitsrichtlinie gesteuert, die vom Administrator kontrolliert und beim Systemstart geladen wird. Alle sicherheitsrelevanten Zugriffsvorgänge auf Kernel-Ebene im System werden von SELinux abgefangen und im Kontext der geladenen Sicherheitsrichtlinie geprüft. Wenn die geladene Richtlinie den Vorgang zulässt, wird er fortgesetzt. Andernfalls wird der Vorgang blockiert und der Prozess erhält eine Fehlermeldung.


SELinux decisions, such as allowing or disallowing access, are cached. This cache is known as the Access Vector Cache (AVC). When using these cached decisions, SELinux policy rules need to be checked less, which increases performance. Remember that SELinux policy rules have no effect if DAC rules deny access first.
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert. Dieser Cache wird als Access Vector Cache (AVC) bezeichnet. Durch die Verwendung dieser zwischengespeicherten Entscheidungen müssen die SELinux-Richtlinienregeln weniger häufig überprüft werden, was die Leistung erhöht. Beachten Sie, dass SELinux-Richtlinienregeln keine Wirkung haben, wenn DAC-Regeln den Zugriff zuvor verweigern.


=== 1.4. SELinux States and Modes ===
=== 1.4. SELinux-Zustände und -Modi ===
SELinux can run in one of three modes: disabled, permissive, or enforcing.
SELinux kann in einem von drei Modi ausgeführt werden: deaktiviert, permissiv oder durchgesetzt.


Disabled mode is strongly discouraged; not only does the system avoid enforcing the SELinux policy, it also avoids labeling any persistent objects such as files, making it difficult to enable SELinux in the future.
Vom deaktivierten Modus wird dringend abgeraten; das System verzichtet nicht nur auf die Durchsetzung der SELinux-Richtlinie, sondern auch auf die Kennzeichnung persistenter Objekte wie Dateien, was eine spätere Aktivierung von SELinux erschwert.


In permissive mode, the system acts as if SELinux is enforcing the loaded security policy, including labeling objects and emitting access denial entries in the logs, but it does not actually deny any operations. While not recommended for production systems, permissive mode can be helpful for SELinux policy development.
Im permissiven Modus verhält sich das System so, als würde SELinux die geladene Sicherheitsrichtlinie durchsetzen, einschließlich der Kennzeichnung von Objekten und der Ausgabe von Zugriffsverweigerungseinträgen in den Protokollen, doch werden tatsächlich keine Operationen verweigert. Der permissive Modus wird zwar nicht für Produktionssysteme empfohlen, kann jedoch bei der Entwicklung von SELinux-Richtlinien hilfreich sein.


Enforcing mode is the default, and recommended, mode of operation; in enforcing mode SELinux operates normally, enforcing the loaded security policy on the entire system.
Der Durchsetzungsmodus ist der standardmäßige und empfohlene Betriebsmodus; im Durchsetzungsmodus arbeitet SELinux normal und setzt die geladene Sicherheitsrichtlinie im gesamten System durch.


Use the <code>setenforce</code> utility to change between enforcing and permissive mode. Changes made with <code>setenforce</code> do not persist across reboots. To change to enforcing mode, enter the <code>setenforce 1</code> command as the Linux root user. To change to permissive mode, enter the <code>setenforce 0</code> command. Use the <code>getenforce</code> utility to view the current SELinux mode:
Verwenden Sie das Dienstprogramm setenforce, um zwischen dem Durchsetzungs- und dem permissiven Modus zu wechseln. Mit setenforce vorgenommene Änderungen bleiben nach einem Neustart nicht erhalten. Um in den Durchsetzungsmodus zu wechseln, geben Sie als Linux-Root-Benutzer den Befehl setenforce 1 ein. Um in den permissiven Modus zu wechseln, geben Sie den Befehl setenforce 0 ein. Verwenden Sie das Dienstprogramm getenforce, um den aktuellen SELinux-Modus anzuzeigen:
  <code>~]# getenforce
  ~]# getenforce
  Enforcing</code>
  Durchsetzungsmodus


  <code>~]# setenforce 0
  ~]# setenforce 0
  ~]# getenforce
  ~]# getenforce
  Permissive</code>
  Erlaubter Modus


  <code>~]# setenforce 1
  ~]# setenforce 1
  ~]# getenforce
  ~]# getenforce
  Enforcing</code>
  Durchsetzungsmodus
In Red Hat Enterprise Linux, you can set individual domains to permissive mode while the system runs in enforcing mode. For example, to make the <code>httpd_t</code> domain permissive:
In Red Hat Enterprise Linux können Sie einzelne Domänen in den permissiven Modus versetzen, während das System im Enforcing-Modus läuft. Um beispielsweise die Domäne httpd_t in den permissiven Modus zu versetzen:
  <code>~]# semanage permissive -a httpd_t</code>
  ~]# semanage permissive -a httpd_t
See Section 11.3.4, “Permissive Domains” for more information.
Weitere Informationen finden Sie in Abschnitt 11.3.4, „Permissive Domänen“.


'''Note'''
‚‘'Hinweis'‚‘


Persistent states and modes changes are covered in Section 4.4, “Permanent Changes in SELinux States and Modes”.
Dauerhafte Änderungen an Zuständen und Modi werden in Abschnitt 4.4, „Dauerhafte Änderungen an SELinux-Zuständen und -Modi“, behandelt.


=== 1.5. Additional Resources ===
=== 1.5. Weitere Ressourcen ===
Red Hat Identity Management (IdM) provides a centralized solution to define SELinux user maps. For details, see Defining SELinux User Maps in the Linux Domain Identity, Authentication, and Policy Guide.
Red Hat Identity Management (IdM) bietet eine zentralisierte Lösung zur Definition von SELinux-Benutzerzuordnungen. Weitere Informationen finden Sie unter „Defining SELinux User Maps“ im „Linux Domain Identity, Authentication, and Policy Guide“.
----<sup>[1]</sup> Text files that include information, such as host name to IP address mappings, that are used by DNS servers.
----[1]                         Textdateien, die Informationen enthalten, wie z. B. Zuordnungen von Hostnamen zu IP-Adressen, die von DNS-Servern verwendet werden.


<sup>[2]</sup> Marti, Don. "A seatbelt for server software: SELinux blocks real-world exploits". Published 24 February 2008. Accessed 27 August 2009: <nowiki>http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html</nowiki>.
[2]                         Marti, Don. „Ein Sicherheitsgurt für Server-Software: SELinux blockiert reale Exploits“. Veröffentlicht am 24. Februar 2008. Abgerufen am 27. August 2009: <nowiki>http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html</nowiki>.


=== Additional Resources ===
=== Weitere Ressourcen ===
For more information, see the following documentation:
Weitere Informationen finden Sie in der folgenden Dokumentation:


* The <code>selinux(8)</code> man page and man pages listed by the <code>apropos selinux</code> command.
* Die Manpage selinux(8) und die Manpages, die mit dem Befehl apropos selinux aufgelistet werden.
* Man pages listed by the <code>man -k _selinux</code> command when the selinux-policy-doc package is installed. See Section 11.3.3, “Manual Pages for Services” for more information.
* Man-Seiten, die mit dem Befehl man -k _selinux aufgelistet werden, wenn das Paket selinux-policy-doc installiert ist. Weitere Informationen finden Sie in Abschnitt 11.3.3, „Man-Seiten für Dienste“.
* The SELinux Coloring Book
* Das SELinux-Farbbuch
* SELinux Wiki FAQ
* SELinux-Wiki-FAQ




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

Version vom 21. März 2026, 10:32 Uhr

Einleitung

Security Enhanced Linux (SELinux) bietet eine zusätzliche Ebene der Systemsicherheit. SELinux beantwortet im Wesentlichen die Frage: „Darf <Subjekt> die <Aktion> an <Objekt> ausführen?“, zum Beispiel: „Darf ein Webserver auf Dateien in den Home-Verzeichnissen der Benutzer zugreifen?“.

Die standardmäßige Zugriffsrichtlinie, die auf Benutzer-, Gruppen- und anderen Berechtigungen basiert und als Discretionary Access Control (DAC) bekannt ist, ermöglicht es Systemadministratoren nicht, umfassende und fein abgestufte Sicherheitsrichtlinien zu erstellen, wie beispielsweise bestimmte Anwendungen darauf zu beschränken, Log-Dateien nur anzuzeigen, während anderen Anwendungen erlaubt wird, neue Daten an die Log-Dateien anzuhängen

SELinux implementiert Mandatory Access Control (MAC). Jeder Prozess und jede Systemressource verfügt über eine spezielle Sicherheitskennzeichnung, die als „SELinux-Kontext“ bezeichnet wird. Ein SELinux-Kontext, manchmal auch als „SELinux-Label“ bezeichnet, ist ein Identifikator, der die Details auf Systemebene abstrahiert und sich auf die Sicherheitseigenschaften der Entität konzentriert. Dies bietet nicht nur eine konsistente Methode zur Referenzierung von Objekten in der SELinux-Richtlinie, sondern beseitigt auch jegliche Mehrdeutigkeit, die bei anderen Identifizierungsmethoden auftreten kann; beispielsweise kann eine Datei auf einem System, das Bind-Mounts verwendet, mehrere gültige Pfadnamen haben.

Die SELinux-Richtlinie verwendet diese Kontexte in einer Reihe von Regeln, die definieren, wie Prozesse miteinander und mit den verschiedenen Systemressourcen interagieren können. Standardmäßig erlaubt die Richtlinie keine Interaktion, es sei denn, eine Regel gewährt ausdrücklich Zugriff.

‚‘'Hinweis'‚‘

Es ist wichtig zu beachten, dass SELinux-Richtlinienregeln nach den DAC-Regeln überprüft werden. SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuerst verweigern, was bedeutet, dass keine SELinux-Verweigerung protokolliert wird, wenn die herkömmlichen DAC-Regeln den Zugriff verhindern.

SELinux-Kontexte bestehen aus mehreren Feldern: Benutzer, Rolle, Typ und Sicherheitsstufe. Die SELinux-Typinformationen sind für die SELinux-Richtlinie wohl am wichtigsten, da die gängigste Richtliniendevise, die die zulässigen Interaktionen zwischen Prozessen und Systemressourcen definiert, SELinux-Typen und nicht den vollständigen SELinux-Kontext verwendet. SELinux-Typen enden in der Regel mit _t. Der Typname für den Webserver lautet beispielsweise httpd_t. Der Typkontext für Dateien und Verzeichnisse, die normalerweise unter /var/www/html/ zu finden sind, ist httpd_sys_content_t. Der Typkontext für Dateien und Verzeichnisse, die sich normalerweise in /tmp und /var/tmp/ befinden, lautet tmp_t. Der Typkontext für Webserver-Ports lautet http_port_t.

Beispielsweise gibt es eine Richtlinienregel, die Apache (dem als httpd_t ausgeführten Webserver-Prozess) den Zugriff auf Dateien und Verzeichnisse mit einem Kontext erlaubt, der normalerweise in /var/www/html/ und anderen Webserver-Verzeichnissen (httpd_sys_content_t) zu finden ist. Da die Richtlinie keine Zulassungsregel für Dateien enthält, die sich normalerweise in /tmp und /var/tmp/ befinden, ist der Zugriff nicht erlaubt. Mit SELinux kann ein bösartiges Skript selbst dann nicht auf das Verzeichnis /tmp zugreifen, wenn Apache kompromittiert wurde und es Zugriff erlangt hat.

‚‘'Abbildung 1.1. SELinux erlaubt dem als httpd_t laufenden Apache-Prozess den Zugriff auf das Verzeichnis /var/www/html/ und verweigert demselben Prozess den Zugriff auf das Verzeichnis /data/mysql/, da es keine Zulassungsregel für die Kontexte vom Typ httpd_t und mysqld_db_t gibt. Andererseits kann der als mysqld_t ausgeführte MariaDB-Prozess auf das Verzeichnis /data/mysql/ zugreifen, und SELinux verweigert dem Prozess vom Typ mysqld_t korrekt den Zugriff auf das als httpd_sys_content_t gekennzeichnete Verzeichnis /var/www/html/.‚‘'

1.1. Vorteile des Einsatzes von SELinux

SELinux bietet die folgenden Vorteile:

  • Alle Prozesse und Dateien sind mit Labels versehen. SELinux-Richtlinienregeln definieren, wie Prozesse mit Dateien interagieren sowie wie Prozesse miteinander interagieren. Zugriff ist nur dann erlaubt, wenn eine SELinux-Richtlinienregel existiert, die dies ausdrücklich erlaubt.
  • Fein abgestimmte Zugriffskontrolle. Über die traditionellen UNIX-Berechtigungen hinaus, die nach dem Ermessen des Benutzers gesteuert werden und auf Linux-Benutzer- und Gruppen-IDs basieren, basieren SELinux-Zugriffsentscheidungen auf allen verfügbaren Informationen, wie z. B. einem SELinux-Benutzer, einer Rolle, einem Typ und optional einer Sicherheitsstufe.
  • Die SELinux-Richtlinie wird administrativ definiert und systemweit durchgesetzt.
  • Verbesserte Abwehr von Angriffen zur Privilegieneskalation. Prozesse laufen in Domänen und sind daher voneinander getrennt. SELinux-Richtlinienregeln legen fest, wie Prozesse auf Dateien und andere Prozesse zugreifen. Wenn ein Prozess kompromittiert wird, hat der Angreifer nur Zugriff auf die normalen Funktionen dieses Prozesses und auf Dateien, für die der Prozess konfiguriert wurde, darauf zuzugreifen. Wenn beispielsweise der Apache-HTTP-Server kompromittiert wird, kann ein Angreifer diesen Prozess nicht nutzen, um Dateien in Benutzer-Home-Verzeichnissen zu lesen, es sei denn, eine spezifische SELinux-Richtlinienregel wurde hinzugefügt oder so konfiguriert, dass sie einen solchen Zugriff erlaubt.
  • SELinux kann eingesetzt werden, um die Vertraulichkeit und Integrität von Daten zu gewährleisten sowie Prozesse vor nicht vertrauenswürdigen Eingaben zu schützen.

SELinux ist jedoch nicht:

  • Antivirensoftware,
  • ein Ersatz für Passwörter, Firewalls und andere Sicherheitssysteme,
  • eine All-in-One-Sicherheitslösung.

SELinux wurde entwickelt, um bestehende Sicherheitslösungen zu ergänzen, nicht um sie zu ersetzen. Auch bei der Verwendung von SELinux ist es wichtig, weiterhin bewährte Sicherheitspraktiken zu befolgen, wie z. B. die Aktualisierung von Software, die Verwendung schwer zu erratender Passwörter oder den Einsatz von Firewalls.

1.2. Beispiele

Die folgenden Beispiele veranschaulichen, wie SELinux die Sicherheit erhöht:

  • Die Standardaktion ist „verweigern“. Wenn keine SELinux-Richtlinienregel existiert, die den Zugriff erlaubt, beispielsweise für einen Prozess, der eine Datei öffnet, wird der Zugriff verweigert.
  • SELinux kann Linux-Benutzer einschränken. In der SELinux-Richtlinie gibt es eine Reihe von eingeschränkten SELinux-Benutzern. Linux-Benutzer können eingeschränkten SELinux-Benutzern zugeordnet werden, um die für diese geltenden Sicherheitsregeln und -mechanismen zu nutzen. Wenn beispielsweise ein Linux-Benutzer dem SELinux-Benutzer ```user_u``` zugeordnet wird, führt dies dazu, dass dieser Linux-Benutzer (sofern nicht anders konfiguriert) keine Set-User-ID-Anwendungen (setuid) wie ```sudo``` und ```su``` ausführen kann. Weitere Informationen finden Sie in Abschnitt 3.3, „Eingeschränkte und uneingeschränkte Benutzer“.
  • Verbesserte Prozess- und Datentrennung. Prozesse laufen in ihren eigenen Domänen, wodurch verhindert wird, dass Prozesse auf Dateien zugreifen, die von anderen Prozessen verwendet werden, und dass Prozesse auf andere Prozesse zugreifen. Wenn beispielsweise SELinux ausgeführt wird, kann ein Angreifer – sofern nicht anders konfiguriert – keinen Samba-Server kompromittieren und diesen Samba-Server dann als Angriffsvektor nutzen, um auf Dateien zu lesen und zu schreiben, die von anderen Prozessen verwendet werden, wie z. B. MariaDB-Datenbanken.
  • SELinux hilft dabei, den durch Konfigurationsfehler verursachten Schaden zu mindern. Domain Name System (DNS)-Server replizieren häufig Informationen untereinander in einem sogenannten Zonentransfer. Angreifer können Zonentransfers nutzen, um DNS-Server mit falschen Informationen zu aktualisieren. Wenn Berkeley Internet Name Domain (BIND) als DNS-Server unter Red Hat Enterprise Linux ausgeführt wird, verhindert die Standard-SELinux-Richtlinie – selbst wenn ein Administrator vergisst, einzuschränken, welche Server einen Zonentransfer durchführen dürfen –, dass Zonendateien [1] durch Zonentransfers, durch den BIND-Daemon named selbst oder durch andere Prozesse aktualisiert werden.
  • Hintergrundinformationen zu SELinux sowie Informationen zu verschiedenen Exploits, die SELinux verhindert hat, finden Sie im Artikel auf NetworkWorld.com: „A seatbelt for server software: SELinux blocks real-world exploits“[2].

1.3. SELinux-Architektur

SELinux ist ein Linux Security Module (LSM), das in den Linux-Kernel integriert ist. Das SELinux-Subsystem im Kernel wird von einer Sicherheitsrichtlinie gesteuert, die vom Administrator kontrolliert und beim Systemstart geladen wird. Alle sicherheitsrelevanten Zugriffsvorgänge auf Kernel-Ebene im System werden von SELinux abgefangen und im Kontext der geladenen Sicherheitsrichtlinie geprüft. Wenn die geladene Richtlinie den Vorgang zulässt, wird er fortgesetzt. Andernfalls wird der Vorgang blockiert und der Prozess erhält eine Fehlermeldung.

SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert. Dieser Cache wird als Access Vector Cache (AVC) bezeichnet. Durch die Verwendung dieser zwischengespeicherten Entscheidungen müssen die SELinux-Richtlinienregeln weniger häufig überprüft werden, was die Leistung erhöht. Beachten Sie, dass SELinux-Richtlinienregeln keine Wirkung haben, wenn DAC-Regeln den Zugriff zuvor verweigern.

1.4. SELinux-Zustände und -Modi

SELinux kann in einem von drei Modi ausgeführt werden: deaktiviert, permissiv oder durchgesetzt.

Vom deaktivierten Modus wird dringend abgeraten; das System verzichtet nicht nur auf die Durchsetzung der SELinux-Richtlinie, sondern auch auf die Kennzeichnung persistenter Objekte wie Dateien, was eine spätere Aktivierung von SELinux erschwert.

Im permissiven Modus verhält sich das System so, als würde SELinux die geladene Sicherheitsrichtlinie durchsetzen, einschließlich der Kennzeichnung von Objekten und der Ausgabe von Zugriffsverweigerungseinträgen in den Protokollen, doch werden tatsächlich keine Operationen verweigert. Der permissive Modus wird zwar nicht für Produktionssysteme empfohlen, kann jedoch bei der Entwicklung von SELinux-Richtlinien hilfreich sein.

Der Durchsetzungsmodus ist der standardmäßige und empfohlene Betriebsmodus; im Durchsetzungsmodus arbeitet SELinux normal und setzt die geladene Sicherheitsrichtlinie im gesamten System durch.

Verwenden Sie das Dienstprogramm setenforce, um zwischen dem Durchsetzungs- und dem permissiven Modus zu wechseln. Mit setenforce vorgenommene Änderungen bleiben nach einem Neustart nicht erhalten. Um in den Durchsetzungsmodus zu wechseln, geben Sie als Linux-Root-Benutzer den Befehl setenforce 1 ein. Um in den permissiven Modus zu wechseln, geben Sie den Befehl setenforce 0 ein. Verwenden Sie das Dienstprogramm getenforce, um den aktuellen SELinux-Modus anzuzeigen:

~]# getenforce
Durchsetzungsmodus
~]# setenforce 0
~]# getenforce
Erlaubter Modus
~]# setenforce 1
~]# getenforce
Durchsetzungsmodus

In Red Hat Enterprise Linux können Sie einzelne Domänen in den permissiven Modus versetzen, während das System im Enforcing-Modus läuft. Um beispielsweise die Domäne httpd_t in den permissiven Modus zu versetzen:

~]# semanage permissive -a httpd_t

Weitere Informationen finden Sie in Abschnitt 11.3.4, „Permissive Domänen“.

‚‘'Hinweis'‚‘

Dauerhafte Änderungen an Zuständen und Modi werden in Abschnitt 4.4, „Dauerhafte Änderungen an SELinux-Zuständen und -Modi“, behandelt.

1.5. Weitere Ressourcen

Red Hat Identity Management (IdM) bietet eine zentralisierte Lösung zur Definition von SELinux-Benutzerzuordnungen. Weitere Informationen finden Sie unter „Defining SELinux User Maps“ im „Linux Domain Identity, Authentication, and Policy Guide“.


[1] Textdateien, die Informationen enthalten, wie z. B. Zuordnungen von Hostnamen zu IP-Adressen, die von DNS-Servern verwendet werden.

[2] Marti, Don. „Ein Sicherheitsgurt für Server-Software: SELinux blockiert reale Exploits“. Veröffentlicht am 24. Februar 2008. Abgerufen am 27. August 2009: http://www.networkworld.com/article/2283723/lan-wan/a-seatbelt-for-server-software--selinux-blocks-real-world-exploits.html.

Weitere Ressourcen

Weitere Informationen finden Sie in der folgenden Dokumentation:

  • Die Manpage selinux(8) und die Manpages, die mit dem Befehl apropos selinux aufgelistet werden.
  • Man-Seiten, die mit dem Befehl man -k _selinux aufgelistet werden, wenn das Paket selinux-policy-doc installiert ist. Weitere Informationen finden Sie in Abschnitt 11.3.3, „Man-Seiten für Dienste“.
  • Das SELinux-Farbbuch
  • SELinux-Wiki-FAQ