Zum Inhalt springen

Linux/SELinux/04 Arbeiten mit SELinux: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
=== Working with SELinux ===
=== Arbeiten mit SELinux ===
The following sections give a brief overview of the main SELinux packages in Red Hat Enterprise Linux; installing and updating packages; which log files are used; the main SELinux configuration file; enabling and disabling SELinux; SELinux modes; configuring Booleans; temporarily and persistently changing file and directory labels; overriding file system labels with the [[mount]] command; mounting NFS volumes; and how to preserve SELinux contexts when copying and archiving files and directories
Die folgenden Abschnitte bieten einen kurzen Überblick über die wichtigsten SELinux-Pakete in Red Hat Enterprise Linux; die Installation und Aktualisierung von Paketen; die verwendeten Protokolldateien; die wichtigste SELinux-Konfigurationsdatei; das Aktivieren und Deaktivieren von SELinux; SELinux-Modi; das Konfigurieren von Booleschen Werten; das vorübergehende und dauerhafte Ändern von Datei- und Verzeichnis-Labels; das Überschreiben von Dateisystem-Labels mit dem Befehl [[mount]]; das Einbinden von NFS-Volumes; sowie das Beibehalten von SELinux-Kontexten beim Kopieren und Archivieren von Dateien und Verzeichnissen


=== SELinux Packages ===
=== SELinux-Pakete ===
In Red Hat Enterprise Linux full installation, the SELinux packages are installed by default unless they are manually excluded during installation
Bei einer vollständigen Installation von Red Hat Enterprise Linux werden die SELinux-Pakete standardmäßig installiert, sofern sie nicht während der Installation manuell ausgeschlossen werden
* If performing a minimal installation in text mode, the policycoreutils-python and the policycoreutils-gui package are not installed by default
* Bei einer Minimalinstallation im Textmodus werden die Pakete policycoreutils-python und policycoreutils-gui standardmäßig nicht installiert
* Also, by default, SELinux runs in enforcing mode and the SELinux targeted policy is used
* Außerdem läuft SELinux standardmäßig SELinux im Enforcing-Modus und die SELinux-Targeted-Policy wird verwendet
* The following SELinux packages are installed on your system by default
* Die folgenden SELinux-Pakete sind standardmäßig auf Ihrem System installiert
* policycoreutils provides utilities such as [[restorecon]], [[secon]], [[setfiles]], [[semodule]], [[load_policy]], and [[setsebool]], for operating and managing SELinux
* policycoreutils stellt Dienstprogramme wie [[restorecon]], [[secon]], [[setfiles]], [[semodule]], [[load_policy]] und [[setsebool]] für den Betrieb und die Verwaltung von SELinux bereit
* selinux-policy provides a basic directory structure, the [[selinux-policy.conf]] file, and RPM macros
* selinux-policy stellt eine grundlegende Verzeichnisstruktur, die Datei [[selinux-policy.conf]] und RPM-Makros bereit
* selinux-policy-targeted provides the SELinux targeted policy
* selinux-policy -targeted stellt die SELinux-Targeted-Richtlinie bereit
* libselinux – provides an API for SELinux applications
* libselinux – stellt eine API für SELinux-Anwendungen bereit
* libselinux-utils provides the [[avcstat]], [[getenforce]], [[getsebool]], [[matchpathcon]], [[selinuxconlist]], [[selinuxdefcon]], [[selinuxenabled]], and [[setenforce]] utilities
* libselinux-utils stellt die Dienstprogramme [[avcstat]], [[getenforce]], [[getsebool]], [[matchpathcon]], [[selinuxconlist]], [[selinuxdefcon]], [[selinuxenabled]] und [[setenforce]] bereit
* libselinux-python provides Python bindings for developing SELinux applications
* libselinux-python stellt Python-Bindungen für die Entwicklung von SELinux-Anwendungen bereit


The following packages are not installed by default but can be optionally installed by running the [[yum&nbsp;install&nbsp;''<package-name>'']] command
Die folgenden Pakete sind standardmäßig nicht installiert, können aber optional durch Ausführen des Befehls [[yum&nbsp;install&nbsp;‚‘<package-name>‚‘]] installiert werden
* selinux-policy-devel provides utilities for creating a custom SELinux policy and policy modules
* selinux-policy-devel stellt Dienstprogramme zum Erstellen einer benutzerdefinierten SELinux-Richtlinie und von Richtlinienmodulen bereit
* selinux-policy-doc provides manual pages that describe how to configure SELinux altogether with various services
* selinux-policy-doc enthält Handbuchseiten, die beschreiben, wie SELinux zusammen mit verschiedenen Diensten konfiguriert wird
* selinux-policy-mls provides the MLS (Multi-Level Security) SELinux policy
* selinux-policy-mls enthält die MLS-SELinux-Richtlinie (Multi-Level Security)
* setroubleshoot-server translates denial messages, produced when access is denied by SELinux, into detailed descriptions that can be viewed with the [[sealert]] utility, also provided in this package
* setroubleshoot-server übersetzt Ablehnungsmeldungen, die bei einer Zugriffsverweigerung durch SELinux ausgegeben werden, in detaillierte Beschreibungen, die mit dem ebenfalls in diesem Paket enthaltenen Dienstprogramm [[sealert]] angezeigt werden können
* setools-console provides the Tresys Technology SETools distribution, a number of utilities and libraries for analyzing and querying policy, audit log monitoring and reporting, and file context management
* setools-console stellt die Tresys Technology SETools-Distribution bereit, eine Reihe von Dienstprogrammen und Bibliotheken zur Analyse und Abfrage von Richtlinien, zur Überwachung und Berichterstellung von Audit-Protokollen sowie zur Verwaltung von Dateikontexten
* The setools package is a meta-package for SETools
* Das Paket setools ist ein Metapaket für SETools
* The setools-gui package provides the [[apol]] and [[seaudit]] utilities
* Das Paket setools-gui stellt die Dienstprogramme [[apol]] und [[seaudit]] bereit
* The setools-console package provides the [[sechecker]], [[sediff]], [[seinfo]], [[sesearch]], and [[findcon]] command-line utilities
* Das Paket setools-console stellt die Befehlszeilen-Dienstprogramme [[sechecker]], [[sediff]], [[seinfo]], [[sesearch]] und [[findcon]] bereit
* Note that setools and setools-gui packages are available only when the Red&nbsp;Hat Network Optional channel is enabled
* Beachten Sie, dass die Pakete setools und setools-gui nur verfügbar sind, wenn der Red Hat Network Optional-Kanal aktiviert ist
* For further information, see Scope of Coverage Details
* Weitere Informationen finden Sie unter Details zum Abdeckungsumfang
* mcstrans translates levels, such as [[s0-s0:c0.c1023]], to a form that is easier to read, such as [[SystemLow-SystemHigh]]
* mcstrans übersetzt Stufen wie [[s0-s0:c0.c1023]] in eine besser lesbare Form wie [[SystemLow-SystemHigh]]
* policycoreutils-python provides utilities such as [[semanage]], [[audit2allow]], [[audit2why]], and [[chcat]], for operating and managing SELinux
* policycoreutils-python bietet Dienstprogramme wie [[semanage]], [[audit2allow]], [[audit2why]] und [[chcat]] zum Bedienen und Verwalten von SELinux
* policycoreutils-gui provides [[system-config-selinux]], a graphical utility for managing SELinux
* policycoreutils-gui stellt [[system-config-selinux]] bereit, ein grafisches Dienstprogramm zur Verwaltung von SELinux


=== Which Log File is Used ===
=== Welche Protokolldatei wird verwendet ===
In Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, the dbus and audit packages are installed by default, unless they are removed from the default package selection
Unter Red Hat Enterprise Linux sind die Pakete dbus und audit standardmäßig installiert, sofern sie nicht aus der Standard-Paketauswahl entfernt wurden
* The setroubleshoot-server must be installed using Yum (use the [[yum&nbsp;install&nbsp;setroubleshoot-server]] command)
* Der Setroubleshoot-Server muss über Yum installiert werden (verwenden Sie den Befehl [[yum&nbsp;install&nbsp;setroubleshoot-server]])


If the [[auditd]] daemon is running, an SELinux denial message, such as the following, is written to [[/var/log/audit/audit.log]] by default
Wenn der [[auditd]]-Daemon läuft, wird standardmäßig eine SELinux-Ablehnungsmeldung wie die folgende in [[/var/log/audit/audit.log]] geschrieben
  type=AVC msg=audit(1223024155.684:49)
  type=AVC msg=audit (1223024155.684:49)
  avc
   
avc
  denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
  denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file


In addition, a message similar to the one below is written to the [[/var/log/message]] file
Außerdem wird eine Meldung ähnlich der folgenden in die Datei [[/var/log/message]] geschrieben
  May 7 18:55:56 localhost setroubleshoot
  7. Mai 18:55:56 localhost setroubleshoot
SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t)
SELinux verhindert, dass httpd (httpd_t) „getattr“ auf /var/www/html/file1 (samba_share_t) ausführt
* For complete SELinux messages
* Für vollständige SELinux-Meldungen
run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
führen Sie sealert -l de7e30d6-5488-466d-a606-92c9f40d316d aus


In Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux 7, [[setroubleshootd]] no longer constantly runs as a service
In Red Hat Enterprise Linux 7 läuft [[setroubleshootd]] nicht mehr ständig als Dienst
* However, it is still used to analyze the AVC messages
* Es wird jedoch weiterhin zur Analyse der AVC-Meldungen verwendet
* Two new programs act as a method to start [[setroubleshoot]] when needed
* Zwei neue Programme dienen dazu, [[setroubleshoot]] bei Bedarf zu starten
* The [[sedispatch]] utility runs as a part of the [[audit]] subsystem
* Das Dienstprogramm [[sedispatch]] läuft als Teil des [[audit]]-Subsystems
* When an AVC denial message is returned, [[sedispatch]] sends a message using [[dbus]]
* Wenn eine AVC-Ablehnungsmeldung zurückgegeben wird, sendet [[sedispatch]] eine Nachricht über [[dbus]]
* These messages go straight to [[setroubleshootd]] if it is already running
* Diese Nachrichten gehen direkt an [[setroubleshootd]], sofern dieses bereits läuft
* If it is not running, [[sedispatch]] starts it automatically
* Läuft es nicht, startet [[sedispatch]] es automatisch
* The [[seapplet]] utility runs in the system toolbar, waiting for dbus messages in [[setroubleshootd]]
* Das Dienstprogramm [[seapplet]] läuft in der System-Symbolleiste und wartet auf DBus-Meldungen von [[setroubleshootd]]
* It launches the notification bubble, allowing the user to review AVC messages
* Es öffnet die Benachrichtigungsblase, in der der Benutzer die AVC-Meldungen einsehen kann


; Starting Daemons Automatically
; Daemons automatisch starten
# To configure the [[auditd]] and [[rsyslog]] daemons to automatically start at boot, enter the following commands as the root user
# Um die Daemons [[auditd]] und [ [rsyslog]]-Daemons so zu konfigurieren, dass sie beim Booten automatisch starten, geben Sie als Root-Benutzer die folgenden Befehle ein
  sudo systemctl enable auditd.service
  sudo systemctl enable auditd.service
  sudo systemctl enable rsyslog.service
  sudo systemctl enable rsyslog.service
# To ensure that the daemons are enabled, type the following commands at the shell prompt
# Um sicherzustellen, dass die Daemons aktiviert sind, geben Sie an der Shell-Eingabeaufforderung die folgenden Befehle ein
  systemctl is-enabled auditd
  systemctl is-enabled auditd
  enabled
  enabled
  systemctl is-enabled rsyslog
   
systemctl is-enabled rsyslog
  enabled
  enabled
Alternatively, use the [[systemctl status ''service-name''.service]] command and search for the keyword [[enabled]] in the command output, for example
Alternativ können Sie den Befehl [[systemctl status 'service-name‘'.service]] verwenden und in der Befehlsausgabe nach dem Schlüsselwort [[enabled]] suchen, zum Beispiel
  systemctl status auditd.service | grep enabled
  systemctl status auditd.service | grep enabled
  auditd.service - Security Auditing Service
  auditd.service – Sicherheitsüberwachungsdienst
  Loaded
  Geladen
  loaded (/usr/lib/systemd/system/auditd.service; ''enabled'')
  geladen (/usr/lib/systemd/system/auditd.service; 'enabled‘')


To learn more on how the [[systemd]] daemon manages system services, see the Managing System Services chapter in the System Administrator's Guide
Weitere Informationen darüber, wie der [[systemd]]-Daemon Systemdienste verwaltet, finden Sie im Kapitel „Verwaltung von Systemdiensten“ im Systemadministratorhandbuch


=== Main Configuration File ===
=== Hauptkonfigurationsdatei ===
The [[/etc/selinux/config]] file is the main SELinux configuration file
Die Datei [[/etc/selinux/config]] ist die Hauptkonfigurationsdatei von SELinux
* It controls whether SELinux is enabled or disabled and which SELinux mode and SELinux policy is used
* Sie steuert, ob SELinux aktiviert oder deaktiviert ist und welcher SELinux-Modus sowie welche SELinux-Richtlinie verwendet wird
  # This file controls the state of SELinux on the system
  # Diese Datei steuert den Status von SELinux auf dem System
  # SELINUX= can take one of these three values
  # SELINUX= kann einen dieser drei Werte annehmen
  # enforcing - SELinux security policy is enforced
  # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
  # permissive - SELinux prints warnings instead of enforcing
  # permissive SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
  # disabled - No SELinux policy is loaded
  # disabled – Es wird keine SELinux-Richtlinie geladen
  SELINUX=enforcing
  SELINUX=enforcing
  # SELINUXTYPE= can take one of these two values
  # SELINUXTYPE= kann einen dieser beiden Werte annehmen
  # targeted - Targeted processes are protected,
   
  # mls - Multi Level Security protection
# targeted – Zielgerichtete Prozesse werden geschützt,
  # mls – Multi-Level-Security-Schutz
  SELINUXTYPE=targeted
  SELINUXTYPE=targeted


; <nowiki>[[SELINUX=]]</nowiki>
; <nowiki>[[SELINUX=]]</nowiki>


The <nowiki>[[SELINUX]]</nowiki> option sets whether SELinux is disabled or enabled and in which mode - enforcing or permissive - it is running
Die Option <nowiki>[[SELINUX]]</nowiki> legt fest, ob SELinux deaktiviert oder aktiviert ist und in welchem Modus – enforcing oder permissive – es läuft
* When using [[SELINUX=enforcing]], SELinux policy is enforced, and SELinux denies access based on SELinux policy rules
* Bei Verwendung von [[SELINUX=enforcing]] wird die SELinux-Richtlinie durchgesetzt, und SELinux verweigert den Zugriff auf Grundlage der SELinux-Richtlinienregeln
* Denial messages are logged
* Verweigerungsmeldungen werden protokolliert
* When using [[SELINUX=permissive]], SELinux policy is not enforced
* Bei Verwendung von [[SELINUX=permissive]] wird die SELinux-Richtlinie nicht durchgesetzt
* SELinux does not deny access, but denials are logged for actions that would have been denied if running SELinux in enforcing mode
* SELinux verweigert keinen Zugriff, aber Verweigerungen werden für Aktionen protokolliert, die verweigert worden wären, wenn SELinux im Durchsetzungsmodus laufen würde
* When using [[SELINUX=disabled]], SELinux is disabled, the SELinux module is not registered with the Linux kernel, and only DAC rules are used
* Bei Verwendung von [[SELINUX=disabled]] ist SELinux deaktiviert, das SELinux-Modul ist nicht beim Linux-Kernel registriert und es werden nur DAC-Regeln verwendet


; <nowiki>[[SELINUXTYPE=]]</nowiki>
; <nowiki>[[SELINUXTYPE=]]</nowiki>
The [[SELINUXTYPE]] option sets the SELinux policy to use
Die Option [[SELINUXTYPE]] legt die zu verwendende SELinux-Richtlinie fest
* Targeted policy is the default policy
* Die Targeted-Richtlinie ist die Standardrichtlinie
* Only change this option if you want to use the MLS policy
* Ändern Sie diese Option nur, wenn Sie die MLS-Richtlinie verwenden möchten
* For information on how to enable the MLS policy, see Section&nbsp;“[[Enabling MLS in SELinux]]
* Informationen zum Aktivieren der MLS-Richtlinie finden Sie im Abschnitt „[[Aktivieren von MLS in SELinux]]


=== Permanent Changes in SELinux States and Modes ===
=== Dauerhafte Änderungen an SELinux-Zuständen und -Modi ===
SELinux can be enabled or disabled
SELinux kann aktiviert oder deaktiviert werden
* When enabled, SELinux has two modes: enforcing and permissive
* Wenn aktiviert, hat SEL
inux zwei Modi: „enforcing“ und „permissive“


Use the [[getenforce]] or [[sestatus]] commands to check in which mode SELinux is running
Verwenden Sie die Befehle [[getenforce]] oder [[sestatus]], um zu überprüfen, in welchem Modus SELinux läuft
* The [[getenforce]] command returns [[Enforcing]], [[Permissive]], or [[Disabled]]
* Der Befehl [[getenforce]] gibt [[Enforcing]], [[Permissive]] oder [ [Disabled]]


The [[sestatus]] command returns the SELinux status and the SELinux policy being used
Der Befehl [[sestatus]] gibt den SELinux-Status und die verwendete SELinux-Richtlinie zurück
sestatus
sestatus
SELinux status
SELinux-Status
   enabled
   enabled
SELinuxfs mount
SELinuxfs-Mount
   /sys/fs/selinux
   /sys/fs/selinux
SELinux root directory
SELinux-Stammverzeichnis
   /etc/selinux
   /etc/selinux
  Loaded policy name
   
Name der geladenen Richtlinie
   targeted
   targeted
  Current mode
  Aktueller Modus
   enforcing
   enforcing
  Mode from config file
  Modus aus Konfigurationsdatei
   enforcing
   enforcing
  Policy MLS status
  MLS-Status der Richtlinie
   enabled
   enabled
  Policy deny_unknown status
  Status von deny_unknown in der Richtlinie
   allowed
   allowed
  Max kernel policy version
  Maximale Kernel-Richtlinienversion
   30
   30


; Note
; Hinweis
: When systems run SELinux in permissive mode, users are able to label files incorrectly
: Wenn Systeme SELinux im permissiven Modus ausführen, können Benutzer Dateien falsch kennzeichnen
* Files created while SELinux is disabled are not labeled at all
* Dateien, die erstellt wurden, während SELinux deaktiviert war, werden überhaupt nicht gekennzeichnet
* This behavior causes problems when changing to enforcing mode because files are labeled incorrectly or are not labeled at all
* Dieses Verhalten verursacht Probleme beim Wechsel in den enforcing-Modus, da Dateien falsch oder gar nicht gekennzeichnet sind
* To prevent incorrectly labeled and unlabeled files from causing problems, file systems are automatically relabeled when changing from the disabled state to permissive or enforcing mode
* Um zu verhindern, dass falsch gekennzeichnete und nicht gekennzeichnete Dateien Probleme verursachen, werden Dateisysteme automatisch neu gekennzeichnet, wenn vom deaktivierten Zustand in den permissiven oder den enforcing-Modus gewechselt wird


==== Enabling SELinux ====
==== SELinux aktivieren ====
When enabled, SELinux can run in one of two modes: enforcing or permissive
Wenn SELinux aktiviert ist, kann es in einem von zwei Modi ausgeführt werden: enforcing oder permissive
* The following sections show how to permanently change into these modes
* Die folgenden Abschnitte zeigen, wie Sie dauerhaft in diese Modi wechseln


While enabling SELinux on systems that previously had it disabled, to avoid problems, such as systems unable to boot or process failures, Red Hat recommends to follow this procedure
Beim Aktivieren von SELinux auf Systemen, auf denen es zuvor deaktiviert war, empfiehlt Red Hat, um Probleme wie das Nicht-Booten des Systems oder Prozessfehler zu vermeiden, dieses Verfahren zu befolgen
# Enable SELinux in permissive mode
# Aktivieren Sie SELinux im permissiven Modus
* For more information, see Section&nbsp;“Permissive Mode”
* Weitere Informationen finden Sie im Abschnitt „Permissiver Modus“
# Reboot your system
# Starten Sie Ihr System neu
# Check for SELinux denial messages
# Überprüfen Sie, ob SELinux-Ablehnungsmeldungen vorliegen
* For more information, see Section&nbsp;“Searching For and Viewing Denials”
* Weitere Informationen finden Sie im Abschnitt „Suchen und Anzeigen von Ablehnungen“
# If there are no denials, switch to enforcing mode
# Wenn keine Ablehnungen vorliegen, wechseln Sie in den Durchsetzungsmodus
* For more information, see Section&nbsp;“Enforcing Mode”
* Weitere Informationen finden Sie im Abschnitt „Enforcing-Modus“


To run custom applications with SELinux in enforcing mode, choose one of the following scenarios
Um benutzerdefinierte Anwendungen mit SELinux im Enforcing-Modus auszuführen, wählen Sie eines der folgenden Szenarien
* Run your application in the [[unconfined_service_t]] domain
* Führen Sie Ihre Anwendung in der Domäne [[unconfined_service_t]] aus
* See Section&nbsp;“[[Unconfined Processes]]” for more information
* Weitere Informationen finden Sie im Abschnitt „[[Unconfined-Prozesse]]
* Write a new policy for your application
* Schreiben Sie eine neue Richtlinie für Ihre Anwendung
* See the Writing Custom SELinux Policy Knowledgebase article for more information
* Weitere Informationen finden Sie im Knowledge-Base-Artikel „Writing Custom SELinux Policy“


===== Permissive Mode =====
===== Permissive-Modus =====
When SELinux is running in permissive mode, SELinux policy is not enforced
Wenn SELinux im Permissive-Modus läuft, wird die SELinux-Richtlinie nicht durchgesetzt
* The system remains operational and SELinux does not deny any operations but only logs AVC messages, which can be then used for troubleshooting, debugging, and SELinux policy improvements
* Das System bleibt betriebsbereit und SELinux verweigert keine Vorgänge, sondern protokolliert lediglich AVC-Meldungen, die dann zur Fehlerbehebung, zum Debugging und zur Verbesserung der SELinux-Richtlinie verwendet werden können
* Each AVC is logged only once in this case
* In diesem Fall wird jede AVC-Meldung nur einmal protokolliert


To permanently change mode to permissive, follow the procedure below
Um den Modus dauerhaft auf „permissive“ umzustellen, befolgen Sie die folgenden Schritte
; Changing to Permissive Mode
; Umstellung auf den permissiven Modus
# Edit the [[/etc/selinux/config]] file as follows
# Bearbeiten Sie die Datei [[/etc/selinux/config]] wie folgt
  # This file controls the state of SELinux on the system
  # Diese Datei steuert den Status von SELinux auf dem System
  # SELINUX= can take one of these three values
  # SELINUX= kann einen dieser drei Werte annehmen
  # enforcing - SELinux security policy is enforced
  # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
  # permissive - SELinux prints warnings instead of enforcing
  # permissive SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
  # disabled - No SELinux policy is loaded
  # disabled – Es wird keine SELinux-Richtlinie geladen
  SELINUX='''permissive
  SELINUX=‚‘'permissive
  # SELINUXTYPE= can take one of these two values
  # SELINUXTYPE= kann einen dieser beiden Werte annehmen
  # targeted - Targeted processes are protected,
  # targeted – Zielprozesse werden geschützt,
  # mls - Multi Level Security protection
   
# mls – Multi-Level-Security-Schutz
  SELINUXTYPE=targeted
  SELINUXTYPE=targeted
# Reboot the system
# Starten Sie das System neu
  sudo reboot
  sudo reboot


===== Enforcing Mode =====
===== Durchsetzungsmodus =====
When SELinux is running in enforcing mode, it enforces the SELinux policy and denies access based on SELinux policy rules
Wenn SELinux im Durchsetzungsmodus läuft, setzt es die SELinux-Richtlinie durch und verweigert den Zugriff auf der Grundlage der SELinux-Richtlinienregeln
* In Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, enforcing mode is enabled by default when the system was initially installed with SELinux
* Unter Red Hat Enterprise Linux ist der Durchsetzungsmodus standardmäßig aktiviert, wenn das System ursprünglich mit SELinux


If SELinux was disabled, follow the procedure below to change mode to enforcing again
Wenn SELinux deaktiviert wurde, befolgen Sie die nachstehende Vorgehensweise, um den Modus wieder auf „Enforcing“ umzustellen
; Changing to Enforcing Mode
; Umstellung auf den Enforcing-Modus
This procedure assumes that the selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, and policycoreutils-python packages are installed
Diese Vorgehensweise setzt voraus, dass die Pakete selinux-policy -targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils und policycoreutils-python installiert sind
* To verify that the packages are installed, use the following command
* Um zu überprüfen, ob die Pakete installiert sind, verwenden Sie den folgenden Befehl
  rpm -q ''package_name''
  rpm -q 'Paketname‘'


# Edit the [[/etc/selinux/config]] file as follows
# Bearbeiten Sie die Datei [[/etc/selinux/config]] wie folgt
  # This file controls the state of SELinux on the system
  # Diese Datei steuert den Status von SELinux auf dem System
  # SELINUX= can take one of these three values
  # SELINUX= kann einen dieser drei Werte annehmen
  # enforcing - SELinux security policy is enforced
  # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
  # permissive - SELinux prints warnings instead of enforcing
  # permissive SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
  # disabled - No SELinux policy is loaded
  # disabled – Es wird keine SELinux-Richtlinie geladen
  SELINUX='''enforcing
  SELINUX=‚‘'enforcing
  # SELINUXTYPE= can take one of these two values
   
  # targeted - Targeted processes are protected,
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
  # mls - Multi Level Security protection
  # targeted – Zielgerichtete Prozesse werden geschützt,
  # mls – Multi-Level-Security-Schutz
  SELINUXTYPE=targeted
  SELINUXTYPE=targeted
# Reboot the system
# Starten Sie das System neu
  sudo reboot
  sudo reboot


On the next boot, SELinux relabels all the files and directories within the system and adds SELinux context for files and directories that were created when SELinux was disabled
Beim nächsten Systemstart kennzeichnet SELinux alle Dateien und Verzeichnisse im System neu und fügt einen SELinux-Kontext für Dateien und Verzeichnisse hinzu, die erstellt wurden, als SELinux deaktiviert war


; Note
; Hinweis
: After changing to enforcing mode, SELinux may deny some actions because of incorrect or missing SELinux policy rules
: Nach dem Wechsel in den Enforcing-Modus kann SELinux einige Aktionen aufgrund falscher oder fehlender SELinux-Richtlinien verweigern


To view what actions SELinux denies, enter the following command as root
Um anzuzeigen, welche Aktionen SELinux verweigert, geben Sie als Root den folgenden Befehl ein
  sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
  sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today


Alternatively, with the setroubleshoot-server package installed, enter the following command as root
Alternativ können Sie, sofern das Paket setroubleshoot-server installiert ist, als root den folgenden Befehl eingeben
  sudo grep "SELinux is preventing" /var/log/messages
  sudo grep „SELinux is preventing“ /var/log/messages


If SELinux denies some actions, see Chapter&nbsp;11, ''Troubleshooting'' for information about troubleshooting
Falls SELinux bestimmte Aktionen verweigert, finden Sie Informationen zur Fehlerbehebung in Kapitel 11, „Fehlerbehebung“


Temporary changes in modes are covered in Section&nbsp;“[[SELinux States and Modes]]
Vorübergehende Änderungen der Modi werden in Abschnitt „[[SELinux-Zustände und -Modi]]“ behandelt


==== Disabling SELinux ====
==== Deaktivieren von SELinux ====
When SELinux is disabled, SELinux policy is not loaded at all; it is not enforced and AVC messages are not logged
Wenn SELinux deaktiviert ist, wird die SELinux-Richtlinie überhaupt nicht geladen; sie wird nicht durchgesetzt und AVC-Meldungen werden nicht protokolliert
* Therefore, all benefits of running SELinux listed in Section&nbsp;1.1, “Benefits of running SELinux” are lost
* Daher gehen alle in Abschnitt 1.1, „Vorteile des Betriebs von SELinux“, aufgeführten Vorteile des Betriebs von SELinux verloren


; Important
; Wichtig
: Red&nbsp;Hat strongly recommends to use permissive mode instead of permanently disabling SELinux
: Red Hat empfiehlt dringend, den permissiven Modus zu verwenden, anstatt SELinux dauerhaft zu deaktivieren
* See Section&nbsp;“[[Permissive Mode]]” for more information about permissive mode
* Weitere Informationen zum permissiven Modus finden Sie im Abschnitt „[[Permissive Mode]]


To permanently disable SELinux, follow the procedure below
Um SELinux dauerhaft zu deaktivieren, gehen Sie wie folgt vor
; Disabling SELinux
; SELinux deaktivieren
# Configure [[SELINUX=disabled]] in the [[/etc/selinux/config]] file
# Konfigurieren Sie [[SELINUX=disabled]] in der Datei [[/etc/selinux/config]]
  # This file controls the state of SELinux on the system
  # Diese Datei steuert den Status von SELinux auf dem System
  # SELINUX= can take one of these three values
  # SELINUX= kann einen dieser drei Werte annehmen
  # enforcing - SELinux security policy is enforced
  # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
  # permissive - SELinux prints warnings instead of enforcing
  # permissive SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
  # disabled - No SELinux policy is loaded
  # disabled – Es wird keine SELinux-Richtlinie geladen
  SELINUX='''disabled
  SELINUX=‚‘'disabled
  # SELINUXTYPE= can take one of these two values
  # SELINUXTYPE= kann einen dieser beiden Werte annehmen
  # targeted - Targeted processes are protected,
  # targeted – Zielgerichtete Prozesse werden geschützt,
  # mls - Multi Level Security protection
  # mls – Multi-Level-Security-Schutz
  SELINUXTYPE=targeted
  SELINUXTYPE=targeted
# Reboot your system
# Starten Sie Ihr System neu


After reboot, confirm that the [[getenforce]] command returns [[Disabled]]
Vergewissern Sie sich nach dem Neustart, dass der Befehl [[getenforce]] den Wert [[Disabled]] zurückgibt
  getenforce
  getenforce
  Disabled
  Disabled


=== Changing SELinux Modes at Boot Time ===
=== Ändern der SELinux-Modi beim Systemstart ===
On boot, you can set several kernel parameters to change the way SELinux runs
Beim Systemstart können Sie mehrere Kernel-Parameter setzen, um die Funktionsweise von SELinux zu ändern
  enforcing=0
  enforcing=0


Setting this parameter causes the system to start in permissive mode, which is useful when troubleshooting issues
Durch das Setzen dieses Parameters startet das System im permissiven Modus, was bei der Fehlerbehebung nützlich ist
* Using permissive mode might be the only option to detect a problem if your file system is too corrupted
* Die Verwendung des permissiven Modus ist möglicherweise die einzige Möglichkeit, ein Problem zu erkennen, wenn Ihr Dateisystem zu stark beschädigt ist
* Moreover, in permissive mode, the system continues to create the labels correctly
* Außerdem erstellt das System im permissiven Modus weiterhin die Labels korrekt
* The AVC messages that are created in this mode can be different than in enforcing mode
* Die in diesem Modus erzeugten AVC-Meldungen können sich von denen im Enforcing-Modus unterscheiden


In permissive mode, only the first denial from a series of the same denials is reported
Im Permissive-Modus wird nur die erste Verweigerung aus einer Reihe gleicher Verweigerungen gemeldet
* However, in enforcing mode, you might get a denial related to reading a directory, and an application stops
* Im Enforcing-Modus hingegen erhalten Sie möglicherweise eine Verweigerung beim Lesen eines Verzeichnisses, woraufhin eine Anwendung stoppt
* In permissive mode, you get the same AVC message, but the application continues reading files in the directory and you get an AVC for each denial in addition
* Im permissiven Modus erhalten Sie dieselbe AVC-Meldung, aber die Anwendung liest weiterhin Dateien in dem Verzeichnis, und Sie erhalten zusätzlich für jede Verweigerung eine AVC
selinux=0
selinux=0


This parameter causes the kernel to not load any part of the SELinux infrastructure
Dieser Parameter bewirkt, dass der Kernel keinen Teil der SELinux-Infrastruktur lädt
* The init scripts notice that the system booted with the [[selinux=0]] parameter and touch the [[/.autorelabel]] file
* Die Init-Skripte erkennen, dass das System mit dem Parameter [[selinux=0]] gebootet wurde, und schreiben in die Datei [[/.autorelabel]]
* This causes the system to automatically relabel the next time you boot with SELinux enabled
* Dies bewirkt, dass das System beim nächsten Start mit aktiviertem SELinux automatisch eine Neukennzeichnung durchführt


; Important
; Wichtig
: Red Hat does not recommend using the [[selinux=0]] parameter
: Red Hat empfiehlt die Verwendung des Parameters [[selinux=0]] nicht
* To debug your system, prefer using permissive mode
* Verwenden Sie zum Debuggen Ihres Systems vorzugsweise den permissiven Modus
  autorelabel=1
  autorelabel=1


This parameter forces the system to relabel similarly to the following commands
Dieser Parameter zwingt das System zu einer Neukennzeichnung, ähnlich wie die folgenden Befehle
  sudo touch /.autorelabel
  sudo touch /.autorelabel
  sudo reboot
  sudo reboot


If the system labeling contains a large amount of errors, you might need to boot in permissive mode in order that the autorelabel succeeds
Wenn die Systemkennzeichnung eine große Anzahl von Fehlern enthält, müssen Sie möglicherweise im permissiven Modus booten, damit die automatische Neukennzeichnung erfolgreich ist


For additional SELinux-related kernel boot parameters, such as [[checkreqprot]], see the [[/usr/share/doc/kernel-doc-''<KERNEL_VER>''/Documentation/kernel-parameters.txt]] file
Weitere SELinux-bezogene Kernel-Boot-Parameter, wie beispielsweise [[checkreqprot]], finden Sie in der Datei [[/ usr/share/doc/kernel-doc-‚‘<KERNEL_VER>‚‘/Documentation/kernel-parameters.txt]]-Datei
* This documentation is installed with the kernel-doc package
* Diese Dokumentation wird mit dem Paket kernel-doc installiert
* Replace the ''<KERNEL_VER>'' string with the version number of the installed kernel, for example
* Ersetzen Sie die Zeichenfolge ‚‘<KERNEL_VER>‚‘ durch die Versionsnummer des installierten Kernels, zum Beispiel
  sudo yum install kernel-doc
  sudo yum install kernel-doc
  less /usr/share/doc/kernel-doc-''3.10.0''/Documentation/kernel-parameters.txt
  less /usr/share/doc/kernel-doc-'3.10.0‘' /Documentation/kernel-parameters.txt


=== Booleans ===
=== Booleane ===
Booleans allow parts of SELinux policy to be changed at runtime, without any knowledge of SELinux policy writing
Booleane ermöglichen es, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen
* This allows changes, such as allowing services access to NFS volumes, without reloading or recompiling SELinux policy
* Dies ermöglicht Änderungen, wie z. B. das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu zu laden oder neu zu kompilieren


==== Listing Booleans ====
==== Auflisten von Booleanen ====
For a list of Booleans, an explanation of what each one is, and whether they are on or off, run the [[semanage boolean -l]] command as the Linux root user
Um eine Liste der Booleans, eine Erklärung zu deren Bedeutung sowie Angaben dazu, ob sie aktiviert oder deaktiviert sind, zu erhalten, führen Sie den Befehl [[semanage boolean -l]] als Linux-Root-Benutzer aus
* The following example does not list all Booleans and the output is shortened for brevity
* Das folgende Beispiel listet nicht alle Booleans auf, und die Ausgabe wurde der Kürze halber gekürzt
  sudo semanage boolean -l
   
SELinux boolean State Default Description
sudo semanage boolean -l
SELinux-Boolean Status Standard Beschreibung


smartmon_3ware (off , off) Determine whether smartmon can..
smartmon_3ware (aus , aus) Legt fest, ob smartmon...
mpd_enable_homedirs (off , off) Determine whether mpd can traverse..
mpd_enable_homedirs (aus, aus) Legt fest, ob mpd...


; Note
; Hinweis
: To have more detailed descriptions, install the selinux-policy-devel package
: Um detailliertere Beschreibungen zu erhalten, installieren Sie das Paket selinux-policy-devel


The [[SELinux boolean]] column lists Boolean names
Die Spalte [[SELinux-Boolean]] listet die Namen der Booleans auf
* The [[Description]] column lists whether the Booleans are on or off, and what they do
* Die Spalte [[Beschreibung]] gibt an, ob die Booleans aktiviert oder deaktiviert sind und welche Funktion sie haben


The [[getsebool -a]] command lists Booleans, whether they are on or off, but does not give a description of each one
Der Befehl [[getsebool -a]] listet Boolesche Werte auf, unabhängig davon, ob sie aktiviert oder deaktiviert sind, gibt jedoch keine Beschreibung zu jedem einzelnen
* The following example does not list all Booleans
* Das folgende Beispiel listet nicht alle Booleschen Werte auf
  getsebool -a
  getsebool -a
  cvs_read_shadow --> off
  cvs_read_shadow --> off
  daemons_dump_core --> on
  daemons_dump_core --> on


Run the [[getsebool ''boolean-name'']] command to only list the status of the ''boolean-name'' Boolean
Führen Sie den Befehl [[getsebool ‚‘ boolean-name']] aus, um nur den Status des Booleschen Werts ‘'boolean-name'' aufzulisten
  getsebool cvs_read_shadow
  getsebool cvs_read_shadow
  cvs_read_shadow --> off
  cvs_read_shadow --> off


Use a space-separated list to list multiple Booleans
Verwenden Sie eine durch Leerzeichen getrennte Liste, um mehrere Boolesche Werte aufzulisten
  getsebool cvs_read_shadow daemons_dump_core
  getsebool cvs_read_shadow daemons_dump_core
  cvs_read_shadow --> off
  cvs_read_shadow --> off
  daemons_dump_core --> on
  daemons _dump_core --> on


==== Configuring Booleans ====
==== Konfigurieren von Booleschen Werten ====
Run the [[setsebool]] utility in the [[setsebool ''boolean_name'' on/off]] form to enable or disable Booleans
Führen Sie das Dienstprogramm [[setsebool]] im Format [[setsebool 'boolean_name‘' on/off]] aus, um Boolesche Werte zu aktivieren oder zu deaktivieren


The following example demonstrates configuring the [[httpd_can_network_connect_db]] Boolean
Das folgende Beispiel zeigt die Konfiguration des Booleschen Werts [[httpd_can_network_connect_db]]


; Configuring Booleans
; Konfigurieren von Booleschen Werten
# By default, the [[httpd_can_network_connect_db]] Boolean is off, preventing Apache HTTP Server scripts and modules from connecting to database servers
# Standardmäßig ist der Boolesche Wert [[httpd_can_network_connect_db]] deaktiviert, wodurch Skripte und Module des Apache-HTTP-Servers daran gehindert werden, eine Verbindung zu Datenbankservern herzustellen
  getsebool httpd_can_network_connect_db
  getsebool httpd_can_network_connect_db
  httpd_can_network_connect_db --> off
  httpd_can_network_connect_db --> off
# To temporarily enable Apache HTTP Server scripts and modules to connect to database servers, enter the following command as root
# Um Skripte und Module des Apache-HTTP-Servers vorübergehend die Verbindung zu Datenbankservern zu ermöglichen, geben Sie als Root den folgenden Befehl ein
  sudo setsebool httpd_can_network_connect_db on
  sudo setsebool httpd_can_network_connect_db on
# Use the [[getsebool]] utility to verify the Boolean has been enabled
# Verwenden Sie das Dienstprogramm [[getsebool]], um zu überprüfen, ob der Boolean-Wert aktiviert wurde
  getsebool httpd_can_network_connect_db
  getsebool httpd_can_network_connect_db
  httpd_can_network_connect_db --> on
  httpd_can_network_connect_db --> on


This allows Apache HTTP Server scripts and modules to connect to database servers
Dadurch können Skripte und Module des Apache-HTTP-Servers eine Verbindung zu Datenbankservern herstellen
# This change is not persistent across reboots
# Diese Änderung bleibt nach einem Neustart nicht erhalten
#*To make changes persistent across reboots, run the [[setsebool -P ''boolean-name'' on]] command as root:[3]
#*Um Änderungen auch nach einem Neustart beizubehalten, führen Sie den Befehl [[setsebool -P ‚‘ boolean-name'' on]] als Root aus:[3]
  sudo setsebool -P httpd_can_network_connect_db on
  sudo setsebool -P httpd_can_network_connect_db on


==== Shell Auto-Completion ====
==== Shell-Autovervollständigung ====
It is possible to use shell auto-completion with the [[getsebool]], [[setsebool]], and [[semanage]] utilities
Es ist möglich, die Shell-Autovervollständigung mit den Dienstprogrammen [[getsebool]], [[setsebool]] und [[semanage]] zu verwenden
* Use the auto-completion with [[getsebool]] and [[setsebool]] to complete both command-line parameters and Booleans
* Verwenden Sie die Autovervollständigung mit [[getsebool]] und [ [setsebool]], um sowohl Befehlszeilenparameter als auch Boolesche Werte zu vervollständigen
* To list only the command-line parameters, add the hyphen character ("-") after the command name and hit the [[Tab]] key
* Um nur die Befehlszeilenparameter aufzulisten, fügen Sie das Bindestrichzeichen (-) hinter dem Befehlsnamen ein und drücken Sie die [[Tab]]-Taste
  sudo setsebool -[Tab]
  sudo setsebool -[Tab]
  -P
  -P


To complete a Boolean, start writing the Boolean name and then hit [[Tab]]
Um einen Booleschen Wert zu vervollständigen, beginnen Sie mit der Eingabe des Booleschen Werts und drücken Sie dann die [[Tab]]-Taste
  getsebool samba_[Tab]
  getsebool samba_[Tab]
  samba_create_home_dirs samba_export_all_ro samba_run_unconfined
  samba_create_home_dirs samba_export_all_ro samba_run_unconfined
  samba_domain_controller samba_export_all_rw samba_share_fusefs
  samba_domain_controller samba_export_all_rw samba_share_fusefs
  samba_enable_home_dirs samba_portmapper samba_share_nfs
  samba_enable_home_dirs samba_portmapper samba_share_nfs
 
sudo setsebool -P virt_use_[Tab]
sudo setsebool -P virt_use_[Tab]
  virt_use_comm virt_use_nfs virt_use_sanlock
  virt_use_comm virt_use_nfs virt_use_sanlock
  virt_use_execmem virt_use_rawip virt_use_usb
  virt_use_execmem virt_use_rawip virt_use_usb
  virt_use_fusefs virt_use_samba virt_use_xserver
  virt_use_fusefs virt_use_samba virt_use_xserver


The [[semanage]] utility is used with several command-line arguments that are completed one by one
Das Dienstprogramm [[semanage]] wird mit mehreren Befehlszeilenargumenten verwendet, die nacheinander vervollständigt werden
* The first argument of a [[semanage]] command is an option, which specifies what part of SELinux policy is managed
* Das erste Argument eines [[semanage]]-Befehls ist eine Option, die angibt, welcher Teil der SELinux-Richtlinie verwaltet wird
  sudo semanage [Tab]
  sudo semanage [Tab]
  boolean export import login node port
  boolean export import login node port
  dontaudit fcontext interface module permissive user
  dontaudit fcontext interface module permissive user


Then, one or more command-line parameters follow
Anschließend folgen ein oder mehrere Befehlszeilenparameter
  sudo semanage fcontext -[Tab]
  sudo semanage fcontext -[Tab]
  -a -D --equal --help -m -o
  -a -D --equal --help -m -o
Zeile 360: Zeile 369:
  -d -e -h --locallist --noheading --type
  -d -e -h --locallist --noheading --type


Finally, complete the name of a particular SELinux entry, such as a Boolean, SELinux user, domain, or another
Geben Sie schließlich den Namen eines bestimmten SELinux-Eintrags ein, z. B. einen Booleschen Wert, einen SELinux-Benutzer, eine Domäne oder einen anderen
* Start typing the entry and hit [[Tab]]
* Beginnen Sie mit der Eingabe des Eintrags und drücken Sie [[Tab]]
  sudo semanage fcontext -a -t samba<tab>
  sudo semanage fcontext -a -t samba<tab>
  samba_etc_t samba_secrets_t
   
samba_etc_t samba_secrets_t
  sambagui_exec_t samba_share_t
  sambagui_exec_t samba_share_t
  samba_initrc_exec_t samba_unconfined_script_exec_t
  samba_initrc_exec_t samba_unconfined_script_exec_t
Zeile 369: Zeile 379:
  samba_net_exec_t
  samba_net_exec_t


Command-line parameters can be chained in a command
Befehls- -Parameter können in einem Befehl verkettet werden
  sudo semanage port -a -t http_port_t -p tcp 81
  sudo semanage port -a -t http_port_t -p tcp 81


=== SELinux Contexts Labeling Files ===
=== SELinux-Kontexte Dateien kennzeichnen ===
On systems running SELinux, all processes and files are labeled in a way that represents security-relevant information
Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien so gekennzeichnet, dass sie sicherheitsrelevante Informationen darstellen
* This information is called the SELinux context
* Diese Informationen werden als SELinux-Kontext bezeichnet
* For files, this is viewed using the [[ls -Z]] command
* Bei Dateien kann dies mit dem Befehl [[ls -Z]] angezeigt werden
  ls -Z file1
   
ls -Z file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1


In this example, SELinux provides a user ([[unconfined_u]]), a role ([[object_r]]), a type ([[user_home_t]]), and a level ([[s0]])
In diesem Beispiel stellt SELinux einen Benutzer ([[unconfined_u]]), eine Rolle ([[object_r]]), einen Typ ([[user_home_t]]) und eine Stufe ([[s0]]) bereit
* This information is used to make access control decisions
* Diese Informationen werden verwendet, um Entscheidungen zur Zugriffskontrolle zu treffen
* On DAC systems, access is controlled based on Linux user and group IDs
* Auf DAC-Systemen wird der Zugriff auf Basis der Linux-Benutzer- und Gruppen-IDs kontrolliert
* SELinux policy rules are checked after DAC rules
* SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft
* SELinux policy rules are not used if DAC rules deny access first
* SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuvor verweigern


; Note
; Hinweis
: By default, newly-created files and directories inherit the SELinux type of their parent directories
: Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse
* For example, when creating a new file in the [[/etc]] directory that is labeled with the [[etc_t]] type, the new file inherits the same type
* Wenn Sie beispielsweise eine neue Datei im Verzeichnis [[/etc]] erstellen, das mit dem Typ [[etc_t]] gekennzeichnet ist, erbt die neue Datei denselben Typ
  ls -dZ - /etc
  ls -dZ - /etc
  drwxr-xr-x root root system_u:object_r:''etc_t'':s0 /etc
   
drwxr-xr-x root root system_u:object_r:'etc_t‘':s0 /etc


  sudo touch /etc/file1
  sudo touch /etc/file1


  sudo ls -lZ /etc/file1
  sudo ls -lZ /etc/file1
  -rw-r--r-- root root unconfined_u:object_r:''etc_t'':s0 /etc/file1
  -rw-r--r-- root root unconfined_u:object_r:'etc_t‘':s0 /etc/file1


SELinux provides multiple commands for managing the file system labeling, such as [[chcon]], [[semanage fcontext]], [[restorecon]], and [[matchpathcon]]
SELinux bietet mehrere Befehle zur Verwaltung der Dateisystem-Kennzeichnung, wie beispielsweise [[chcon]], [[semanage fcontext]], [[restorecon]] und [[matchpathcon]]


==== Temporary Changes: chcon ====
==== Temporäre Änderungen: chcon ====
The [[chcon]] command changes the SELinux context for files
Der Befehl [[chcon]] ändert den SELinux-Kontext für Dateien
* However, changes made with the [[chcon]] command are not persistent across file-system relabels, or the execution of the [[restorecon]] command
* Änderungen, die mit dem Befehl [[chcon]] vorgenommen werden, bleiben jedoch nicht bestehen, wenn das Dateisystem neu gekennzeichnet wird oder der Befehl [[restorecon]]  
* SELinux policy controls whether users are able to modify the SELinux context for any given file
* Die SELinux-Richtlinie legt fest, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern dürfen
* When using [[chcon]], users provide all or part of the SELinux context to change
* Bei der Verwendung von [[chcon]] geben Benutzer den gesamten oder einen Teil des SELinux-Kontexts an, der geändert werden soll
* An incorrect file type is a common cause of SELinux denying access
* Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert


==== Quick Reference ====
==== Kurzreferenz ====
* Run the [[chcon -t ''type'' ''file-name'']] command to change the file type, where ''type'' is an SELinux type, such as [[httpd_sys_content_t]], and ''file-name'' is a file or directory name
* Führen Sie den Befehl [[chcon -t 'type‘' 'file-name‘' ]], um den Dateityp zu ändern, wobei ‚'type‘' ein SELinux-Typ ist, wie z. B. [ [httpd_sys_content_t]], und ‚'file-name‘' ein Datei- oder Verzeichnisname ist
  chcon -t httpd_sys_content_t ''file-name''
  chcon -t httpd_sys_content_t 'file-name‘'


* Run the [[chcon -R -t ''type'' ''directory-name'']] command to change the type of the directory and its contents, where ''type'' is an SELinux type, such as [[httpd_sys_content_t]], and ''directory-name'' is a directory name
* Führen Sie den Befehl [[chcon -R -t 'type‘' 'directory-name‘']] aus, um den Typ des Verzeichnisses und dessen Inhalt zu ändern, wobei ‚'type‘' ein SELinux-Typ ist, wie beispielsweise [[httpd_sys_content_t]], und ‚'Verzeichnisname‘' ein Verzeichnisname ist
  chcon -R -t httpd_sys_content_t ''directory-name''
  chcon -R -t httpd_sys_content_t 'Verzeichnisname‘'


; Changing a File's or Directory's Type
; Ändern des Typs einer Datei oder eines Verzeichnisses
The following procedure demonstrates changing the type, and no other attributes of the SELinux context
Das folgende Verfahren zeigt, wie der Typ und keine anderen Attribute des SELinux-Kontexts geändert werden
* The example in this section works the same for directories, for example, if [[file1]] was a directory. # Change into your home directory
* Das Beispiel in diesem Abschnitt funktioniert genauso für Verzeichnisse, beispielsweise wenn [[file1]] ein Verzeichnis wäre. # Wechseln Sie in Ihr Home-Verzeichnis
# Create a new file and view its SELinux context
# Erstellen Sie eine neue Datei und zeigen Sie deren SELinux-Kontext an
  touch file1
  touch file1


  ls -Z file1
  ls -Z file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  -rw -rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1


In this example, the SELinux context for [[file1]] includes the SELinux [[unconfined_u]] user, [[object_r]] role, [[user_home_t]] type, and the [[s0]] level
In diesem Beispiel umfasst der SELinux-Kontext für [[file1]] den SELinux-Benutzer [[unconfined_u]], die Rolle [[object_r]], den Typ [[user_home_t]] und die [[s0]] Ebene
* For a description of each part of the SELinux context, see Chapter&nbsp;2, ''SELinux Contexts''
* Eine Beschreibung der einzelnen Bestandteile des SELinux-Kontexts finden Sie in Kapitel&nbsp;2, 'SELinux-Kontexte‘'
# Enter the following command to change the type to [[samba_share_t]]
# Geben Sie den folgenden Befehl ein, um den Typ in [[samba_share_t]] zu ändern
* The [[-t]] option only changes the type
* Die Option [[-t]] ändert nur den Typ
* Then view the change
* Zeigen Sie anschließend die Änderung an
  chcon -t samba_share_t file1
  chcon -t samba_share_t file1


Zeile 431: Zeile 443:
  -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1


# Use the following command to restore the SELinux context for the [[file1]] file
# Verwenden Sie den folgenden Befehl, um den SELinux-Kontext für die Datei [[file1]] wiederherzustellen
* Use the [[-v]] option to view what changes
* Verwenden Sie die Option [[-v]], um die Änderungen anzuzeigen
  restorecon -v file1
  restorecon -v file1
  restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
  restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0


In this example, the previous type, [[samba_share_t]], is restored to the correct, [[user_home_t]] type
In diesem Beispiel wird der vorherige Typ, [[samba_share_t]], auf den korrekten Typ, [[user_home_t]], zurückgesetzt
* When using targeted policy (the default SELinux policy in Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux), the [[restorecon]] command reads the files in the [[/etc/selinux/targeted/contexts/files/]] directory, to see which SELinux context files should have
* Bei Verwendung der Targeted-Richtlinie (der Standard-SELinux-Richtlinie in Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux) liest der Befehl [[restorecon]] die Dateien im Verzeichnis [[/etc/selinux/targeted/contexts/files/]] aus, um festzustellen, welchen SELinux-Kontext die Dateien haben sollten


; Changing a Directory and its Contents Types
; Ändern der Typen eines Verzeichnisses und seines Inhalts
The following example demonstrates creating a new directory, and changing the directory's file type along with its contents to a type used by the Apache HTTP Server
Das folgende Beispiel zeigt, wie ein neues Verzeichnis erstellt und der Dateityp des Verzeichnisses sowie dessen Inhalt auf einen vom Apache-HTTP-Server verwendeten Typ geändert wird
* The configuration in this example is used if you want Apache HTTP Server to use a different document root (instead of [[/var/www/html/]])
* Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server ein anderes Dokumentstammverzeichnis (anstelle von [[/var/www/html/]]) verwendet
# As the root user, create a new [[web/]] directory and then 3 empty files ([[file1]], [[file2]], and [[file3]]) within this directory
# Erstellen Sie als Root-Benutzer ein neues [ [web/]]-Verzeichnis und anschließend 3 leere Dateien ([[file1]], [[file2]] und [[file3]]) in diesem Verzeichnis
* The [[web/]] directory and files in it are labeled with the [[default_t]] type
* Das [[web/]]-Verzeichnis und die darin enthaltenen Dateien sind mit dem Typ [[default_t]] gekennzeichnet
  sudo mkdir /web
  sudo mkdir /web
  sudo touch /web/file{1,2,3}
   
sudo touch /web/file{1,2,3}
  sudo ls -dZ /web
  sudo ls -dZ /web
  drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
  drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web


  sudo ls -lZ /web
  sudo ls -lZ /web
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
   
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
   
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3


# As root, enter the following command to change the type of the [[web/]] directory (and its contents) to [[httpd_sys_content_t]]
# Geben Sie als root den folgenden Befehl ein, um den Typ des Verzeichnisses [[web/]] (und dessen Inhalt) in [[httpd_sys_content_t]] zu ändern
  sudo chcon -R -t httpd_sys_content_t /web/
  sudo chcon -R -t httpd_sys_content_t /web/


  sudo ls -dZ /web/
  sudo ls -dZ /web/
  drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
  drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
 
sudo ls -lZ /web/
sudo ls -lZ /web/
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
  -rw-r--r-- root root unconfined_u:object_r: httpd_sys_content_t:s0 file3


# To restore the default SELinux contexts, use the [[restorecon]] utility as root
# Um die Standard-SELinux-Kontexte wiederherzustellen, verwenden Sie das Dienstprogramm [[restorecon]] als root
  sudo restorecon -R -v /web/
  sudo restorecon -R -v /web/
  restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
  restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
  restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
   
  restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
  restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t: s0
  restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
  restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0


See the chcon(1) manual page for further information about [[chcon]]
Weitere Informationen zu [[chcon]] finden Sie auf der chcon(1)-Manpage


; Note
; Hinweis
: Type Enforcement is the main permission control used in SELinux targeted policy
: Typen-Enforcement ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird
* For the most part, SELinux users and roles can be ignored
* In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden


==== Persistent Changes: semanage fcontext ====
==== Dauerhafte Änderungen: semanage fcontext ====
The [[semanage fcontext]] command is used to change the SELinux context of files
Der Befehl [[semanage fcontext]] wird verwendet, um den SELinux-Kontext von Dateien zu ändern
* To show contexts to newly created files and directories, enter the following command as root
* Um die Kontexte neu erstellter Dateien und Verzeichnisse anzuzeigen, geben Sie als root den folgenden Befehl ein
  sudo semanage fcontext -C -l
  sudo semanage fcontext -C -l


Changes made by [[semanage fcontext]] are used by the following utilities
Änderungen, die mit [[semanage fcontext]] vorgenommen wurden, werden von den folgenden Dienstprogrammen verwendet
* The [[setfiles]] utility is used when a file system is relabeled and the [[restorecon]] utility restores the default SELinux contexts
* Das Dienstprogramm [[setfiles]] wird verwendet, wenn ein Dateisystem neu gekennzeichnet wird, und das Dienstprogramm [[restorecon]] stellt die Standard-SELinux-Kontexte wieder her
* This means that changes made by [[semanage fcontext]] are persistent, even if the file system is relabeled
* Das bedeutet, dass durch [[semanage fcontext]] vorgenommene Änderungen dauerhaft sind, selbst wenn das Dateisystem neu gekennzeichnet wird
* SELinux policy controls whether users are able to modify the SELinux context for any given file
* Die SELinux-Richtlinie steuert, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern können


==== Quick Reference ====
==== Kurzübersicht ====
To make SELinux context changes that survive a file system relabel
Um SELinux-Kontextänderungen vorzunehmen, die eine Neukennzeichnung des Dateisystems überdauern
# Enter the following command, remembering to use the full path to the file or directory
# Geben Sie den folgenden Befehl ein und achten Sie darauf, den vollständigen Pfad zur Datei oder zum Verzeichnis zu verwenden
  sudo semanage fcontext -a ''options'' ''file-name''|''directory-name''
  sudo semanage fcontext -a 'Optionen‘' 'Dateiname‘ ‚|'Verzeichnisname'


# Use the [[restorecon]] utility to apply the context changes
# Verwenden Sie das Dienstprogramm [[restorecon]], um die Kontextänderungen anzuwenden
  sudo restorecon -v ''file-name''|''directory-name''
  sudo restorecon -v 'Dateiname'|'Verzeichnisname'


===== Use of regular expressions with semanage fcontext =====
===== Verwendung regulärer Ausdrücke mit semanage fcontext =====
For the [[semanage fcontext]] command to work correctly, you can use either a fully qualified path or '''Perl-compatible regular expressions ()'''
Damit der Befehl [[semanage fcontext]] korrekt funktioniert, können Sie entweder einen vollqualifizierten Pfad oder ‘'' Perl-kompatible reguläre Ausdrücke ()‚‘'
* The only ''PCRE'' flag in use is [[PCRE2_DOTALL]], which causes the [[.]] wildcard to match anything, including a new line
* Das einzige verwendete ‚'PCRE‘'-Flag ist [[PCRE2_DOTALL]], wodurch der Platzhalter [[.]] mit allem übereinstimmt, einschließlich einer neuen Zeile
* Strings representing paths are processed as bytes, meaning that non-ASCII characters are not matched by a single wildcard
* Zeichenfolgen, die Pfade darstellen, werden als Bytes verarbeitet, was bedeutet, dass Nicht-ASCII-Zeichen nicht durch einen einzelnen Platzhalter abgeglichen werden


Note that file-context definitions specified using [[semanage fcontext]] are evaluated in reverse order to how they were defined
Beachten Sie, dass mit [[semanage fcontext]] angegebene Dateikontextdefinitionen in umgekehrter Reihenfolge zu ihrer Definition ausgewertet werden
the latest entry is evaluated first regardless of the stem length
der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet
* Local file context modifications stored in [[file_contexts.local]] have a higher priority than those specified in policy modules
* Lokale Dateikontextänderungen, die in [[file_contexts.local]] gespeichert sind, haben eine höhere Priorität als die in Policy-Modulen angegebenen
* This means that whenever a match for a given file path is found in [[file_contexts.local]], no other file-context definitions are considered
* Das bedeutet, dass immer dann, wenn in [[file_contexts.local]] gefunden wird, werden keine anderen Dateikontextdefinitionen berücksichtigt


; Important
; Wichtig
: File-context definitions specified using the [[semanage fcontext]] command effectively override all other file-context definitions
: Mit dem Befehl [[semanage fcontext]] festgelegte Dateikontextdefinitionen überschreiben effektiv alle anderen Dateikontextdefinitionen
* All regular expressions should therefore be as specific as possible to avoid unintentionally impacting other parts of the file system
* Alle regulären Ausdrücke sollten daher so spezifisch wie möglich sein, um unbeabsichtigte Auswirkungen auf andere Teile des Dateisystems zu vermeiden


For more information on a type of regular expression used in file-context definitions and flags in effect, see the [[semanage-fcontext(8)]] man page
Weitere Informationen zu den in Dateikontextdefinitionen verwendeten regulären Ausdrücken und den geltenden Flags finden Sie in der [[semanage-fcontext(8) ]] Man-Seite


; Changing a File's or Directory 's Type
; Ändern des Typs einer Datei oder eines Verzeichnisses
The following example demonstrates changing a file's type, and no other attributes of the SELinux context
Das folgende Beispiel zeigt, wie der Typ einer Datei geändert wird, ohne andere Attribute des SELinux-Kontexts zu beeinflussen
* This example works the same for directories, for instance if [[file1]] was a directory. # As the root user, create a new file in the [[/etc]] directory
* Dieses Beispiel funktioniert genauso für Verzeichnisse, beispielsweise wenn [[file1]] ein Verzeichnis wäre. # Erstellen Sie als Root-Benutzer eine neue Datei im Verzeichnis [[/etc]]
* By default, newly-created files in [[/etc]] are labeled with the [[etc_t]] type
* Standardmäßig werden neu erstellte Dateien in [[/etc]] mit dem Typ [[etc_t]] gekennzeichnet
  sudo touch /etc/file1
  sudo touch /etc/file1
 
ls -Z /etc/file1
ls -Z /etc/file1
  -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
  -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1


To list information about a directory, use the following command
Um Informationen zu einem Verzeichnis aufzulisten, verwenden Sie den folgenden Befehl
  ls -dZ ''directory_name''
  ls -dZ 'Verzeichnisname‘'


# As root, enter the following command to change the [[file1]] type to [[samba_share_t]]
# Geben Sie als root den folgenden Befehl ein, um den Typ von [[file1]] in [[samba_share_t]] zu ändern
* The [[-a]] option adds a new record, and the [[-t]] option defines a type ([[samba_share_t]])
* Die Option [[-a]] fügt einen neuen Eintrag hinzu, und die Option [[-t]] definiert einen Typ ([[samba_share_t]])
* Note that running this command does not directly change the type; [[file1]] is still labeled with the [[etc_t]] type
* Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; [[file1]] ist weiterhin mit dem Typ [[etc_t]] gekennzeichnet
  sudo semanage fcontext -a -t samba_share_t /etc/file1
  sudo semanage fcontext -a -t samba_share_t /etc/file1


Zeile 533: Zeile 549:


  semanage fcontext -C -l
  semanage fcontext -C -l
  /etc/file1 unconfined_u:object_r:samba_share_t:s0
   
/etc/file1 unconfined_u:object_r:samba_share_t:s0


# As root, use the [[restorecon]] utility to change the type
# Verwenden Sie als root das Dienstprogramm [[restorecon]], um den Typ zu ändern
* Because [[semanage]] added an entry to [[file_contexts.local]] for [[/etc/file1]], [[restorecon]] changes the type to [[samba_share_t]]
* Da [[semanage]] einen Eintrag für [[/etc/file1]] in [[file_contexts.local]] hinzugefügt hat, ändert [[restorecon]] den Typ in [[samba_share_t]]
  sudo restorecon -v /etc/file1
  sudo restorecon -v /etc/file1
  restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
  restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0


; Changing a Directory and its Contents Types
; Ändern der Typen eines Verzeichnisses und seines Inhalts
The following example demonstrates creating a new directory, and changing the directory's file type along with its contents to a type used by Apache HTTP Server
Das folgende Beispiel zeigt, wie ein neues Verzeichnis erstellt und der Dateityp des Verzeichnisses sowie dessen Inhalt auf einen vom Apache-HTTP-Server verwendeten Typ geändert wird
* The configuration in this example is used if you want Apache HTTP Server to use a different document root instead of [[/var/www/html/]]
* Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server anstelle von [[/var/www/html/] einen anderen Dokumentenstamm verwendet ]
# As the root user, create a new [[web/]] directory and then 3 empty files ([[file1]], [[file2]], and [[file3]]) within this directory
# Erstellen Sie als Root-Benutzer ein neues Verzeichnis [[web/]] und anschließend 3 leere Dateien ([[file1]], [[file2]] und [[file3]]) in diesem Verzeichnis
* The [[web/]] directory and files in it are labeled with the [[default_t]] type
* Das Verzeichnis [[web/ ]] und die darin enthaltenen Dateien sind mit dem Typ [[default_t]] gekennzeichnet
  sudo mkdir /web
  sudo mkdir /web
  sudo touch /web/file{1,2,3}
  sudo touch /web/file{1,2,3}
Zeile 550: Zeile 567:
  drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
  drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
  sudo ls -lZ /web
  sudo ls -lZ /web
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
  -rw-r--r-- root root unconfined_ u:object_r:default_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3


# As root, enter the following command to change the type of the [[web/]] directory and the files in it, to [[httpd_sys_content_t]]
# Geben Sie als root den folgenden Befehl ein, um den Typ des [[web/]]-Verzeichnisses und der darin enthaltenen Dateien in [[httpd_sys_content_t]] zu ändern
* The [[-a]] option adds a new record, and the [[-t]] option defines a type ([[httpd_sys_content_t]])
* Die Option [[-a]] fügt einen neuen Eintrag hinzu, und die Option [[-t]] definiert einen Typ ([[httpd_sys_content_t]])
* The [["/web(/.*)?"]] regular expression causes [[semanage]] to apply changes to [[web/]], as well as the files in it
* Der reguläre Ausdruck [[/web(/.*)?] ] bewirkt, dass [[semanage]] die Änderungen auf [[web/]] sowie die darin enthaltenen Dateien anwendet
* Note that running this command does not directly change the type; [[web/]] and files in it are still labeled with the [[default_t]] type
* Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; [[web/]] und die darin enthaltenen Dateien sind weiterhin mit dem Typ [[default_t]] gekennzeichnet
  sudo semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
  sudo semanage fcontext -a -t httpd_sys_content_t /web(/.*)?
  ls -dZ /web
  ls -dZ /web
  drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
   
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
  ls -lZ /web
  ls -lZ /web
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
   
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3


The [[semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"]] command adds the following entry to [[/etc/selinux/targeted/contexts/files/file_contexts.local]]
Der Befehl [[semanage fcontext -a -t httpd_sys_content_t /web(/.*)?]] fügt den folgenden Eintrag zu [[/etc/selinux/targeted/contexts/files/file_contexts.local]] hinzu
  /web(/.*)? system_u:object_r:httpd_sys_content_t:s0
  /web(/.*)? system_u:object_r:httpd_sys_content_t:s0


# As root, use the [[restorecon]] utility to change the type of [[web/]], as well as all files in it
# Verwenden Sie als root das Dienstprogramm [[restorecon]], um den Typ von [[web/]] sowie aller darin enthaltenen Dateien
* The [[-R]] is for recursive, which means all files and directories under [[web/]] are labeled with the [[httpd_sys_content_t]] type
* Der Parameter [[-R]] steht für rekursiv, was bedeutet, dass alle Dateien und Verzeichnisse unter [[web/]] mit dem Typ [[httpd_sys_content_t]] gekennzeichnet werden
* Since [[semanage]] added an entry to [[file.contexts.local]] for [[/web(/.*)?]], [[restorecon]] changes the types to [[httpd_sys_content_t]]
* Da [[semanage]] einen Eintrag für [[/web(/.*)?]] in [[file.contexts.local]] hinzugefügt hat, ändert [[restorecon]] die Typen in [
[httpd_sys_content_t]]
  sudo restorecon -R -v /web
  sudo restorecon -R -v /web
  restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r: httpd_sys_content_t:s0
  restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
   
restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0


Note that by default, newly-created files and directories inherit the SELinux type of their parent directories
Beachten Sie, dass neu erstellte Dateien und Verzeichnisse standardmäßig den SELinux-Typ ihrer übergeordneten Verzeichnisse erben


; Deleting an added Context
; Einen hinzugefügten Kontext löschen
The following example demonstrates adding and removing an SELinux context
Das folgende Beispiel zeigt das Hinzufügen und Entfernen eines SELinux-Kontexts
* If the context is part of a regular expression, for example, [[/web(/.*)?]], use quotation marks around the regular expression
* Wenn der Kontext Teil eines regulären Ausdrucks ist, zum Beispiel [[/web(/.*)?]], setzen Sie den regulären Ausdruck in Anführungszeichen
  sudo semanage fcontext -d "/web(/.*)?"
  sudo semanage fcontext -d /web(/.*)?


# To remove the context, as root, enter the following command, where ''file-name''|''directory-name'' is the first part in [[file_contexts.local]]
# Um den Kontext zu entfernen, geben Sie als Root den folgenden Befehl ein, wobei ‚'Dateiname‘'|'Verzeichnisname‘' der erste Teil in [[file_contexts.local]] ist
  sudo semanage fcontext -d ''file-name''|''directory-name''
  sudo semanage fcontext -d 'Dateiname‘'|'Verzeichnisname‘'


The following is an example of a context in [[file_contexts.local]]
Das Folgende ist ein Beispiel für einen Kontext in [[file_contexts. local]]
  /test system_u:object_r:httpd_sys_content_t:s0
  /test system_u:object_r:httpd_sys_content_t:s0


With the first part being [[test]]
wobei der erste Teil [[test]] ist
* To prevent the [[test/]] directory from being labeled with the [[httpd_sys_content_t]] after running [[restorecon]], or after a file system relabel, enter the following command as root to delete the context from [[file_contexts.local]]
* Um zu verhindern, dass das Verzeichnis [[test/]] nach dem Ausführen von [[restorecon]] oder nach einer Neulabelung des Dateisystems mit dem [[httpd_sys_content_t]]-Label versehen wird, geben Sie als Root den folgenden Befehl ein, um den Kontext aus [[file_contexts.local]] zu löschen
  sudo semanage fcontext -d /test
  sudo semanage fcontext -d /test


# As root, use the [[restorecon]] utility to restore the default SELinux context
# Verwenden Sie als root das Dienstprogramm [[restorecon]], um den Standard-SELinux-Kontext wiederherzustellen


For further information about [[semanage]], see the semanage(8) and semanage-fcontext(8) manual pages
Weitere Informationen zu [[semanage]] finden Sie in den Handbuchseiten semanage(8) und semanage-fcontext(8)


; Important
; Wichtig
: When changing the SELinux context with [[semanage fcontext -a]], use the full path to the file or directory to avoid files being mislabeled after a file system relabel, or after the [[restorecon]] command is run
: Wenn Sie den SELinux-Kontext mit [[semanage fcontext -a]] ändern, verwenden Sie den vollständigen Pfad zur Datei oder zum Verzeichnis, um zu vermeiden, dass Dateien nach einer Neukennzeichnung des Dateisystems oder nach dem Ausführen des Befehls [
[restorecon]]-Befehls


==== How File Context is Determined ====
==== Wie der Dateikontext bestimmt wird ====
Determining file context is based on file-context definitions, which are specified in the system security policy (the [[.fc]] files)
Die Bestimmung des Dateikontexts basiert auf Dateikontextdefinitionen, die in der Systemsicherheitsrichtlinie (den [[.fc]]-Dateien) festgelegt sind
* Based on the system policy, [[semanage]] generates [[file_contexts.homedirs]] and [[file_contexts]] files
* Basierend auf der Systemrichtlinie generiert [[semanage]] die Dateien [[file_contexts.homedirs]] und [ [file_contexts]]-Dateien


System administrators can customize file-context definitions using the [[semanage fcontext]] command
Systemadministratoren können Dateikontextdefinitionen mit dem Befehl [[semanage fcontext]] anpassen
* Such customizations are stored in the [[file_contexts.local]] file
* Solche Anpassungen werden in der Datei [[file_contexts.local]] gespeichert


When a labeling utility, such as [[matchpathcon]] or [[restorecon]], is determining the proper label for a given path, it searches for local changes first ([[file_contexts.local]])
Wenn ein Kennzeichnungsprogramm wie [[matchpathcon]] oder [[restorecon]] die richtige Kennzeichnung für einen bestimmten Pfad ermittelt, sucht es zunächst nach lokalen Änderungen ([[file_contexts.local]])
* If the utility does not find a matching pattern, it searches the [[file_contexts.homedirs]] file and finally the [[file_contexts]] file
* Findet das Dienstprogramm kein passendes Muster, durchsucht es die Datei [[file_contexts.homedirs]] und schließlich die Datei [[file_contexts]]
* However, whenever a match for a given file path is found, the search ends, the utility does look for any additional file-context definitions
* Sobald jedoch eine Übereinstimmung für einen bestimmten Dateipfad gefunden wird, endet die Suche, sucht das Dienstprogramm nicht nach weiteren Dateikontext-Definitionen
* This means that home directory-related file contexts have higher priority than the rest, and local customizations override the system policy
* Das bedeutet, dass Dateikontexte, die sich auf das Home-Verzeichnis beziehen, eine höhere Priorität haben als die übrigen, und lokale Anpassungen überschreiben die Systemrichtlinie


File-context definitions specified by [[system policy]] (contents of [[file_contexts.homedirs]] and [[file_contexts]] files) are sorted by the length of the stem (prefix of the path before any wildcard) before evaluation
Dateikontext-Definitionen, die durch die [[Systemrichtlinie]] festgelegt sind (Inhalt der Dateien [[file_contexts.homedirs]] und [[file_contexts]]), werden vor der Auswertung nach der Länge des Stamms (Präfix des Pfads vor etwaigen Platzhaltern) sortiert
* This means that the most specific path is chosen
* Das bedeutet, dass der spezifischste Pfad ausgewählt wird
* However, file-context definitions specified using [[semanage fcontext]] are evaluated in reverse order to how they were defined
* Mit [[semanage fcontext]] festgelegte Dateikontextdefinitionen werden jedoch in umgekehrter Reihenfolge zu ihrer Definition ausgewertet
the latest entry is evaluated first regardless of the stem length
der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet


For more information on
Weitere Informationen zu
* changing the context of a file by using [[chcon]], see Section&nbsp;“Temporary Changes
* der Änderung des Dateikontexts mit [[chcon]] finden Sie im Abschnitt „Temporäre Änderungen
chcon”
chcon“
* changing and adding a file-context definition by using [[semanage fcontext]], see Section&nbsp;“Persistent Changes
* das Ändern und Hinzufügen einer Dateikontextdefinition mit [[semanage fcontext]] finden Sie im Abschnitt „ Dauerhafte Änderungen
semanage fcontext”
semanage fcontext“
* changing and adding a file-context definition through a system-policy operation, see Section&nbsp;“[[Maintaining SELinux Labels]]” or Section&nbsp;“[[Prioritizing and Disabling SELinux Policy Modules]]
* das Ändern und Hinzufügen einer Dateikontextdefinition durch eine Systemrichtlinienoperation, siehe Abschnitt „[[Pflege von SELinux-Labels]]“ oder Abschnitt „[[Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen]]


=== The file_t and default_t Types ===
=== Die Typen file_t und default_t ===
When using a file system that supports extended attributes (EA), the [[file_t]] type is the default type of a file that has not yet been assigned EA value
Bei Verwendung eines Dateisystems, das erweiterte Attribute (EA) ist der Typ [[file_t]] der Standardtyp einer Datei, der noch kein EA-Wert zugewiesen wurde
* This type is only used for this purpose and does not exist on correctly-labeled file systems, because all files on a system running SELinux should have a proper SELinux context, and the [[file_t]] type is never used in file-context configuration[4]
* Dieser Typ wird nur für diesen Zweck verwendet und existiert auf korrekt gelabelten Dateisystemen nicht, da alle Dateien auf einem System, auf dem SELinux läuft, einen korrekten SELinux-Kontext haben sollten und der Typ [[file_t]] niemals in der Dateikontext-Konfiguration verwendet wird[4]


The [[default_t]] type is used on files that do not match any pattern in file-context configuration, so that such files can be distinguished from files that do not have a context on disk, and generally are kept inaccessible to confined domains
Der Typ [[default_t]] wird für Dateien verwendet, die keinem Muster in der file-context-Konfiguration entsprechen, damit solche Dateien von Dateien unterschieden werden können, die keinen Kontext auf der Festplatte haben, und im Allgemeinen für eingeschränkte Domänen unzugänglich bleiben
* For example, if you create a new top-level directory, such as [[mydirectory/]], this directory may be labeled with the default_t type
* Wenn Sie beispielsweise ein neues Verzeichnis der obersten Ebene erstellen, wie z. B. [[mydirectory/]], kann dieses Verzeichnis mit dem Typ default_t gekennzeichnet werden
* If services need access to this directory, you need to update the file-contexts configuration for this location
* Wenn Dienste Zugriff auf dieses Verzeichnis benötigen, müssen Sie die Dateikontext-Konfiguration für diesen Speicherort aktualisieren
* See Section&nbsp;“Persistent Changes
* Siehe Abschnitt „Persistente Änderungen
semanage fcontext” for details on adding a context to the file-context configuration
semanage fcontext“ für Details zum Hinzufügen eines Kontexts zur Dateikontext-Konfiguration


=== Mounting File Systems ===
=== Einbinden von Dateisystemen ===
By default, when a file system that supports extended attributes is mounted, the security context for each file is obtained from the ''security.selinux'' extended attribute of the file
Standardmäßig wird beim Einbinden eines Dateisystems, das erweiterte Attribute unterstützt, der Sicherheitskontext für jede Datei aus dem ‚'security.selinux‘'
* Files in file systems that do not support extended attributes are assigned a single, default security context from the policy configuration, based on file system type
erweiterten Attribut der Datei
* Dateien in Dateisystemen, die keine erweiterten Attribute unterstützen, wird ein einziger Standard-Sicherheitskontext aus der Richtlinienkonfiguration zugewiesen, basierend auf dem Dateisystemtyp


Use the [[mount -o context]] command to override existing extended attributes, or to specify a different, default context for file systems that do not support extended attributes
Verwenden Sie den Befehl [[mount -o context]], um vorhandene erweiterte Attribute zu überschreiben oder einen anderen Standardkontext für Dateisysteme festzulegen, die keine erweiterten Attribute unterstützen
* This is useful if you do not trust a file system to supply the correct attributes, for example, removable media used in multiple systems
* Dies ist nützlich, wenn Sie nicht darauf vertrauen, dass ein Dateisystem die richtigen Attribute bereitstellt, beispielsweise bei Wechselmedien, die in mehreren Systemen verwendet werden
* The [[mount -o context]] command can also be used to support labeling for file systems that do not support extended attributes, such as File Allocation Table (FAT) or NFS volumes
* Der Befehl [[mount -o context]] kann auch verwendet werden, um die Kennzeichnung für Dateisysteme zu unterstützen, die keine erweiterten Attribute unterstützen, wie z. B. File Allocation Table (FAT) oder NFS-Volumes
* The context specified with the [[context]] option is not written to disk
* Der mit der Option [[context]] angegebene Kontext wird nicht auf die Festplatte geschrieben
the original contexts are preserved, and are seen when mounting without [[context]] if the file system had extended attributes in the first place
die ursprünglichen Kontexte bleiben erhalten und sind beim Einbinden ohne [[context]] sichtbar, sofern das Dateisystem ursprünglich über erweiterte Attribute verfügte


For further information about file system labeling, see James Morris's "Filesystem Labeling in SELinux" article
Weitere Informationen zur Dateisystem-Kennzeichnung finden Sie in James Morris' Artikel „Filesystem Labeling in SELinux“
http://www.linuxjournal.com/article/7426
http://www.linuxjournal.com/article/7426


==== Context Mounts ====
==== Kontext-Mounts ====
To mount a file system with the specified context, overriding existing contexts if they exist, or to specify a different, default context for a file system that does not support extended attributes, as the root user, use the [[mount -o context=''SELinux_user:role:type:level'']] command when mounting the required file system
Um ein Dateisystem mit dem angegebenen Kontext zu mounten – wobei vorhandene Kontexte überschrieben werden, falls vorhanden – oder um einen anderen Standardkontext für ein Dateisystem festzulegen, das keine erweiterten Attribute unterstützt, verwenden Sie als Root-Benutzer den [[mount -o context='SELinux_user:role:type:level‘']] beim Einhängen des gewünschten Dateisystems
* Context changes are not written to disk
* Kontextänderungen werden nicht auf die Festplatte geschrieben
* By default, NFS mounts on the client side are labeled with a default context defined by policy for NFS volumes
* Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist
* In common policies, this default context uses the [[nfs_t]] type
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]
* Without additional mount options, this may prevent sharing NFS volumes using other services, such as the Apache HTTP Server
* Ohne zusätzliche Mount-Optionen kann dies die Freigabe von NFS-Volumes über andere Dienste, wie den Apache-HTTP-Server, verhindern
* The following example mounts an NFS volume so that it can be shared using the Apache HTTP Server
* Das folgende Beispiel mountet ein NFS-Volume so, dass es über den Apache-HTTP-Server freigegeben werden kann
  sudo mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"
  sudo mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"


Newly-created files and directories on this file system appear to have the SELinux context specified with [[-o context]]
Neu erstellte Dateien und Verzeichnisse auf diesem Dateisystem scheinen den mit [[-o context]] angegebenen SELinux-Kontext zu haben
* However, since these changes are not written to disk, the context specified with this option does not persist between mounts
* Da diese Änderungen jedoch nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Mountvorgängen nicht erhalten
* Therefore, this option must be used with the same context specified during every mount to retain the required context
* Daher muss diese Option bei jedem Mountvorgang mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten
* For information about making context mount persistent, see Section&nbsp;“Making Context Mounts Persistent”
* Informationen dazu, wie man Kontext-Mounts dauerhaft macht, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“


Type Enforcement is the main permission control used in SELinux targeted policy
Die Typen-Durchsetzung ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird
* For the most part, SELinux users and roles can be ignored, so, when overriding the SELinux context with [[-o context]], use the SELinux [[system_u]] user and [[object_r]] role, and concentrate on the type
* In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden. Verwenden Sie daher beim Überschreiben des SELinux-Kontexts mit [[-o context]] den SELinux-Benutzer [[system_u]] und die Rolle [[object_r]] und konzentrieren Sie sich auf den Typ
* If you are not using the MLS policy or multi-category security, use the [[s0]] level
* Wenn Sie nicht die MLS-Policy oder die Multi-Kategorie-Sicherheit verwenden, verwenden Sie die [[s0]]-Ebene


; Note
; Hinweis


When a file system is mounted with a [[context]] option, context changes by users and processes are prohibited
Wenn ein Dateisystem mit einer [[context]]-Option eingebunden wird, sind Kontextänderungen durch Benutzer und Prozesse untersagt
* For example, running the [[chcon]] command on a file system mounted with a [[context]] option results in a [[Operation not supported]] error
* Wenn Sie beispielsweise den Befehl [[chcon]] auf einem mit einer [[context]]-Option eingebundenen Dateisystem ausführen, führt dies zu einem Fehler [[Operation not supported]]


==== Changing the Default Context ====
==== Ändern des Standardkontexts ====
As mentioned in Section&nbsp;4.8, “The file_t and default_t Types”, on file systems that support extended attributes, when a file that lacks an SELinux context on disk is accessed, it is treated as if it had a default context as defined by SELinux policy
Wie in Abschnitt&nbsp;4.8, „Die Typen file_t und default_t“ , wird auf Dateisystemen, die erweiterte Attribute unterstützen, beim Zugriff auf eine Datei, der auf der Festplatte ein SELinux-Kontext fehlt, so behandelt, als hätte sie einen Standardkontext, wie er durch die SELinux-Richtlinie definiert ist
* In common policies, this default context uses the [[file_t]] type
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[file_t]]
* If it is desirable to use a different default context, mount the file system with the [[defcontext]] option
* Wenn ein anderer Standardkontext verwendet werden soll, mounten Sie das Dateisystem mit der Option [[defcontext]]


The following example mounts a newly-created file system on [[/dev/sda2]] to the newly-created [[test/]] directory
Das folgende Beispiel mountet ein neu erstelltes Dateisystem auf [[/  
* It assumes that there are no rules in [[/etc/selinux/targeted/contexts/files/]] that define a context for the [[test/]] directory
dev/sda2]] in das neu erstellte Verzeichnis [[test/]] ein
* Dabei wird davon ausgegangen, dass es in [[/etc/selinux/targeted/contexts/files/]] keine Regeln gibt, die einen Kontext für das Verzeichnis [[test/]] definieren
  sudo mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
  sudo mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"


In this example
In diesem Beispiel
* the [[defcontext]] option defines that [[system_u:object_r:samba_share_t:s0]] is "the default security context for unlabeled files"[5]
* definiert die Option [[defcontext]], dass [[system_u:object_r:samba_share_t:s0]] „der Standard-Sicherheitskontext für nicht gekennzeichnete Dateien“ ist[5]
* when mounted, the root directory ([[test/]]) of the file system is treated as if it is labeled with the context specified by [[defcontext]] (this label is not stored on disk)
* wird das Stammverzeichnis ([[test/]]) des Dateisystems nach dem Einbinden so behandelt, als wäre es mit dem durch [[defcontext]] angegebenen Kontext gekennzeichnet (diese Kennzeichnung wird nicht auf der Festplatte gespeichert)
* This affects the labeling for files created under [[test/]]
* Dies wirkt sich auf die Kennzeichnung von Dateien aus, die unter [[test/]] erstellt werden
new files inherit the [[samba_share_t]] type, and these labels are stored on disk
neue Dateien erben den Typ [[samba_share_t]], und diese Kennzeichnungen werden auf der Festplatte gespeichert
* files created under [[test/]] while the file system was mounted with a [[defcontext]] option retain their labels
* Dateien, die unter [[test/]] erstellt wurden, während das Dateisystem mit der Option [[defcontext]] eingebunden war, behalten ihre Kennzeichnungen


==== Mounting an NFS Volume ====
==== Einbinden eines NFS-Volumes ====
By default, NFS mounts on the client side are labeled with a default context defined by policy for NFS volumes
Standardmäßig werden NFS-Einbindungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist
* In common policies, this default context uses the [[nfs_t]] type
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]
* Depending on policy configuration, services, such as Apache HTTP Server and MariaDB, may not be able to read files labeled with the [[nfs_t]] type
* Je nach Richtlinienkonfiguration können Dienste wie der Apache-HTTP-Server und MariaDB möglicherweise keine Dateien lesen, die mit dem Typ [[nfs_t]] gekennzeichnet sind
* This may prevent file systems labeled with this type from being mounted and then read or exported by other services
* Dies kann verhindern, dass Dateisysteme, die mit diesem Typ gekennzeichnet sind, eingebunden und anschließend von anderen Diensten gelesen oder exportiert werden


If you would like to mount an NFS volume and read or export that file system with another service, use the [[context]] option when mounting to override the [[nfs_t]] type
Wenn Sie ein NFS-Volume mounten und dieses Dateisystem mit einem anderen Dienst lesen oder exportieren möchten, verwenden Sie beim Mounten die Option [[context]], um den Typ [[nfs_t]] zu überschreiben
* Use the following context option to mount NFS volumes so that they can be shared using the Apache HTTP Server
* Verwenden Sie die folgende context-Option, um NFS-Volumes so einzuhängen, dass sie über den Apache-HTTP-Server freigegeben werden können
  sudo mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"
  sudo mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"


Since these changes are not written to disk, the context specified with this option does not persist between mounts
Da diese Änderungen nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Einhängevorgängen nicht erhalten
* Therefore, this option must be used with the same context specified during every mount to retain the required context
* Daher muss diese Option bei jedem Einbinden mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten
* For information about making context mount persistent, see Section&nbsp;“Making Context Mounts Persistent”
* Informationen dazu, wie Kontext-Mounts dauerhaft gemacht werden können, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“


As an alternative to mounting file systems with [[context]] options, Booleans can be enabled to allow services access to file systems labeled with the [[nfs_t]] type
Als Alternative zum Einbinden von Dateisystemen mit [[context]]-Optionen können Boolesche Werte aktiviert werden, um Diensten den Zugriff auf Dateisysteme zu ermöglichen, die mit dem Typ [ [nfs_t]] gekennzeichnet sind
* See Part&nbsp;II, “Managing Confined Services” for instructions on configuring Booleans to allow services access to the [[nfs_t]] type
* Siehe Teil II, „Verwaltung eingeschränkter Dienste“ für Anweisungen zur Konfiguration von Booleans, um Diensten den Zugriff auf den Typ [[nfs_t]] zu ermöglichen


==== Multiple NFS Mounts ====
==== Mehrere NFS-Mounts ====
When mounting multiple mounts from the same NFS export, attempting to override the SELinux context of each mount with a different context, results in subsequent mount commands failing
Wenn mehrere Mounts aus demselben NFS-Export durchgeführt werden und versucht wird, den SELinux-Kontext jedes Mounts durch einen anderen Kontext zu überschreiben, führen nachfolgende Mount-Befehle zu Fehlern
* In the following example, the NFS server has a single export, [[export/]], which has two subdirectories, [[web/]] and [[database/]]
* Im folgenden Beispiel verfügt der NFS-Server über einen einzigen Export, [[export/]], der zwei Unterverzeichnisse enthält: [ [web/]] und [[database/]]
* The following commands attempt two mounts from a single NFS export, and try to override the context for each one
* Die folgenden Befehle versuchen zwei Mounts von einem einzigen NFS-Export und versuchen, den Kontext für jeden einzelnen zu überschreiben
  sudo mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
  sudo mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
  sudo mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"
  sudo mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"


The second mount command fails, and the following is logged to [[/var/log/messages]]
Der zweite Mount-Befehl schlägt fehl, und Folgendes wird in [[/var/log/messages]] protokolliert
kernel
kernel
SELinux
SELinux
mount invalid
mount invalid
* Same superblock, different security settings for (dev 0:15, type nfs)
* Gleicher Superblock, unterschiedliche Sicherheitseinstellungen für (dev 0:15, Typ nfs)


To mount multiple mounts from a single NFS export, with each mount having a different context, use the [[-o nosharecache,context]] options
Um mehrere Mounts aus einem einzigen NFS-Export durchzuführen, wobei jeder Mount einen anderen Kontext hat, verwenden Sie die [[-o nosharecache,context]]-Optionen
* The following example mounts multiple mounts from a single NFS export, with a different context for each mount (allowing a single service access to each one)
* Das folgende Beispiel mountet mehrere Mounts aus einem einzigen NFS-Export, wobei jeder Mount einen anderen Kontext hat (wodurch ein einzelner Dienst auf jeden einzelnen zugreifen kann)
  sudo mount server:/export/web /local/web -o nosharecache,context="system_u:object_r:httpd_sys_content_t:s0"
  sudo mount server:/export/web /local/web -o nosharecache,context=„system_u:object_r:httpd_sys_content_t:s0“
sudo mount server:/export/database /local/database -o \ nosharecache,context=„system_u:object_r:mysqld_db_t:s0“


sudo mount server:/export/database /local/database -o \ nosharecache,context="system_u:object_r:mysqld_db_t:s0"
In diesem Beispiel wird [[server:/export/web]] lokal im Verzeichnis [[/local/web/]] eingebunden, wobei alle Dateien mit dem Typ [[httpd_sys_content_t]] gekennzeichnet sind, was dem Apache-HTTP-Server Zugriff gewährt. [[server:/export/database]] wird lokal in [[/local/database/]] eingebunden, wobei alle Dateien mit dem Typ [ [mysqld_db_t]] gekennzeichnet, was MariaDB den Zugriff ermöglicht
* Diese Typänderungen werden nicht auf die Festplatte geschrieben


In this example, [[server:/export/web]] is mounted locally to the [[/local/web/]] directory, with all files being labeled with the [[httpd_sys_content_t]] type, allowing Apache HTTP Server access. [[server:/export/database]] is mounted locally to [[/local/database/]], with all files being labeled with the [[mysqld_db_t]] type, allowing MariaDB access
; Wichtig
* These type changes are not written to disk


; Important
Die Option [[nosharecache]] ermöglicht es Ihnen, dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, beispielsweise [[/export/web/]] mehrfach
* Hängen Sie dasselbe Unterverzeichnis eines Exports nicht mehrfach mit unterschiedlichen Kontexten ein, da dies zu einer überlappenden Einbindung führt, bei der Dateien unter zwei verschiedenen Kontexten zugänglich sind


The [[nosharecache]] options allows you to mount the same subdirectory of an export multiple times with different contexts, for example, mounting [[/export/web/]] multiple times
==== Kontext-Einbindungen dauerhaft machen ====
* Do not mount the same subdirectory from an export multiple times with different contexts, as this creates an overlapping mount, where files are accessible under two different contexts
Um Kontext-Mounts über erneutes Mounten und Neustarts hinweg persistent zu machen, fügen Sie Einträge für die Dateisysteme in die Datei [[/etc/fstab]] oder eine Automounter-Zuordnung ein und verwenden Sie den erforderlichen Kontext als Mount-Option


==== Making Context Mounts Persistent ====
Das folgende Beispiel fügt einen Eintrag in [[/etc/fstab]] für eine NFS-Kontext-Einbindung hinzu
To make context mounts persistent across remounting and reboots, add entries for the file systems in the [[/etc/fstab]] file or an automounter map, and use the required context as a mount option
 
The following example adds an entry to [[/etc/fstab]] for an NFS context mount
  server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
  server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0


=== Maintaining SELinux Labels ===
=== SELinux-Labels beibehalten ===
These sections describe what happens to SELinux contexts when copying, moving, and archiving files and directories
Diese Abschnitte beschreiben, was mit SELinux-Kontexten geschieht, wenn Dateien und Verzeichnisse kopiert, verschieben und archivieren von Dateien und Verzeichnissen
* Also, it explains how to preserve contexts when copying and archiving
* Außerdem wird erklärt, wie Kontexte beim Kopieren und Archivieren beibehalten werden können


==== Copying Files and Directories ====
==== Kopieren von Dateien und Verzeichnissen ====
When a file or directory is copied, a new file or directory is created if it does not exist
Wenn eine Datei oder ein Verzeichnis kopiert wird, wird eine neue Datei oder ein neues Verzeichnis erstellt, falls diese noch nicht existieren
* That new file or directory's context is based on default-labeling rules, not the original file or directory's context unless options were used to preserve the original context
* Der Kontext dieser neuen Datei oder dieses neuen Verzeichnisses basiert auf den Standard-Labeling-Regeln und nicht auf dem Kontext der ursprünglichen Datei oder des ursprünglichen Verzeichnisses, es sei denn, es wurden Optionen verwendet, um den ursprünglichen Kontext beizubehalten
* For example, files created in user home directories are labeled with the [[user_home_t]] type
*
Beispielsweise werden Dateien, die in Benutzer-Home-Verzeichnissen erstellt werden, mit dem Typ [[user_home_t]] gekennzeichnet
  touch file1
  touch file1


Zeile 752: Zeile 779:
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1


If such a file is copied to another directory, such as [[/etc]], the new file is created in accordance to default-labeling rules for [[/etc]]
Wenn eine solche Datei in ein anderes Verzeichnis kopiert wird, beispielsweise [[/etc]], wird die neue Datei gemäß den Standard-Kennzeichnungsregeln für [[/etc]] erstellt
* Copying a file without additional options may not preserve the original context
* Das Kopieren einer Datei ohne zusätzliche Optionen bewahrt möglicherweise den ursprünglichen Kontext nicht
  ls -Z file1
  ls -Z file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1


  sudo cp file1 /etc/
  sudo cp file1 /etc/
 
$ ls -Z /etc/file1
$ ls -Z /etc/file1
  -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
  -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1


When [[file1]] is copied to [[/etc]], if [[/etc/file1]] does not exist, [[/etc/file1]] is created as a new file
Wenn [[file1]] nach [[/etc]] kopiert wird und [[/etc/file1]] nicht existiert, wird [[/etc/file1]] als neue Datei erstellt
* As shown in the example above, [[/etc/file1]] is labeled with the [[etc_t]] type, in accordance to default-labeling rules
* Wie im obigen Beispiel gezeigt, wird [[/etc/file1]] gemäß den Standard-Labeling-Regeln mit dem Typ [[etc_t]] gekennzeichnet


When a file is copied over an existing file, the existing file's context is preserved, unless the user specified [[cp]] options to preserve the context of the original file, such as [[--preserve=context]]
Wenn eine Datei über eine bereits vorhandene Datei kopiert wird, bleibt der Kontext der vorhandenen Datei erhalten, es sei denn, der Benutzer hat [[cp]]-Optionen angegeben, um den Kontext der Originaldatei zu erhalten, wie z. B. [[--preserve=context]]
* SELinux policy may prevent contexts from being preserved during copies
* Die SELinux-Richtlinie kann verhindern, dass Kontexte beim Kopieren erhalten bleiben


; Copying Without Preserving SELinux Contexts
; Kopieren ohne Beibehaltung von SELinux-Kontexten
This procedure shows that when copying a file with the [[cp]] command, if no options are given, the type is inherited from the targeted, parent directory
Dieses Verfahren zeigt, dass beim Kopieren einer Datei mit dem Befehl [[cp]], und keine Optionen angegeben werden, der Typ vom Zielverzeichnis, dem übergeordneten Verzeichnis, übernommen wird
# Create a file in a user's home directory
# Erstellen einer Datei im Home-Verzeichnis eines Benutzers
* The file is labeled with the [[user_home_t]] type
* Die Datei wird mit dem Typ [[user_home_t]] gekennzeichnet
  touch file1
  touch file1
  ls -Z file1
  ls -Z file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
   
# The [[/var/www/html/]] directory is labeled with the [[httpd_sys_content_t]] type, as shown with the following command
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
# Das Verzeichnis [[/var/www/html/]] ist mit dem Typ [[httpd_sys_content_t]] gekennzeichnet, wie der folgende Befehl zeigt
  ls -dZ /var/www/html/drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
  ls -dZ /var/www/html/drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
# When [[file1]] is copied to [[/var/www/html/]], it inherits the [[httpd_sys_content_t]] type
# Wenn [[file1]] nach [[/var/www/html/]] kopiert wird, erbt sie den Typ [[httpd_sys_content_t]]
  sudo cp file1 /var/www/html/
  sudo cp file1 /var/www/html/
  ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
  ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1


; Preserving SELinux Contexts When Copying
; Beibehaltung von SELinux-Kontexten beim Kopieren
This procedure shows how to use the [[--preserve=context]] option to preserve contexts when copying. # Create a file in a user's home directory
Dieses Verfahren zeigt, wie man die Option [[--preserve=context]] verwendet, um Kontexte beim Kopieren beizubehalten. # Erstellen einer Datei im Home-Verzeichnis eines Benutzers
* The file is labeled with the [[user_home_t]] type
* Die Datei wird mit dem Typ [[user_home_t]] gekennzeichnet
touch file1
ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
# The [[/var/www/html/]] directory is labeled with the [[httpd_sys_content_t]] type, as shown with the following command
ls -dZ /var/www/html/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
 
# Using the [[--preserve=context]] option preserves SELinux contexts during copy operations
* As shown below, the [[user_home_t]] type of [[file1]] was preserved when the file was copied to [[/var/www/html/]]
sudo cp --preserve=context file1 /var/www/html/
ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
 
; Copying and Changing the Context
This procedure show how to use the [[--context]] option to change the destination copy's context
* The following example is performed in the user's home directory
# Create a file in a user's home directory
* The file is labeled with the [[user_home_t]] type
  touch file1
  touch file1
  ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Das Verzeichnis [[/var/www/html/]] ist mit dem Typ [[httpd_sys_content_t]] gekennzeichnet, wie der folgende Befehl zeigt ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/# Durch die Verwendung der Option [[--preserve=context]] bleiben die SELinux-Kontexte bei Kopiervorgängen erhalten* Wie unten gezeigt, wurde der Typ [[user_home_t]] von [[file1]] beibehalten, als die Datei nach [[/var/www/html/]] kopiert wurde sudo cp --preserve=context file1 /var/www/html/ ls -Z / var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1; Kopieren und Ändern des KontextsDieses Verfahren zeigt, wie man die Option [[--context]] verwendet, um den Kontext der Zielkopie zu ändern* Das folgende Beispiel wird im Home-Verzeichnis des Benutzers ausgeführt# Erstellen Sie eine Datei im Home-Verzeichnis eines Benutzers* Die Datei ist mit dem Typ [[user_home_t]] gekennzeichnet touch file1 ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Verwenden Sie die Option [[--context]], um den SELinux-Kontext zu definieren cp --context=system_u:object_r:samba_share_t:s0 file1 file2# Ohne [[--context]] würde [[file2]] mit dem [[unconfined_u:object_r:user_home_t]]-Kontext gekennzeichnet ls -Z file1 file2-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1-rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2; Kopieren einer Datei über eine vorhandene DateiDieses Verfahren zeigt, dass beim Kopieren einer Datei über eine vorhandene Datei der Kontext der vorhandenen Datei beibehalten wird, sofern keine Option zur Beibehaltung von Kontexten verwendet wird. # Erstellen Sie als root eine neue Datei, [[file1]], im Verzeichnis [[/etc]]* Wie unten gezeigt, wird die Datei mit dem Typ [[etc_t]] gekennzeichnet sudo touch /etc/file1 ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1# Erstellen Sie eine weitere Datei, [[file2]], im Verzeichnis [ [/tmp]]-Verzeichnis* Wie unten gezeigt, wird die Datei mit dem Typ [[user_tmp_t]] gekennzeichnet touch /tmp/file2 ls -Z /tmp/file2-rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2


# Use the [[--context]] option to define the SELinux context
# [[file1]] mit [[file2]] überschreiben
cp --context=system_u:object_r:samba_share_t:s0 file1 file2
 
# Without [[--context]], [[file2]] would be labeled with the [[unconfined_u:object_r:user_home_t]] context
ls -Z file1 file2-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1-rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2
 
; Copying a File Over an Existing File
This procedure shows that when a file is copied over an existing file, the existing file's context is preserved unless an option is used to preserve contexts. # As root, create a new file, [[file1]] in the [[/etc]] directory
* As shown below, the file is labeled with the [[etc_t]] type
sudo touch /etc/file1
ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
 
# Create another file, [[file2]], in the [[/tmp]] directory
* As shown below, the file is labeled with the [[user_tmp_t]] type
touch /tmp/file2
ls -Z /tmp/file2-rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
 
# Overwrite [[file1]] with [[file2]]
  sudo cp /tmp/file2 /etc/file1
  sudo cp /tmp/file2 /etc/file1


# After copying, the following command shows [[file1]] labeled with the [[etc_t]] type, not the [[user_tmp_t]] type from [[/tmp/file2]] that replaced [[/etc/file1]]
# Nach dem Kopieren zeigt der folgende Befehl, dass [[file1]] mit dem Typ [[etc_t]] gekennzeichnet ist, nicht mit dem Typ [[user_tmp_t]] aus [[/tmp/file2]], der [[/etc/file1]] ersetzt hat
  ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
  ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1


; Important
; Wichtig


Copy files and directories, rather than moving them
Kopieren Sie Dateien und Verzeichnisse, anstatt sie zu verschieben
* This helps ensure they are labeled with the correct SELinux contexts
* Dies trägt dazu bei, dass sie mit den richtigen SELinux-Kontexten gekennzeichnet werden
* Incorrect SELinux contexts can prevent processes from accessing such files and directories
* Falsche SELinux-Kontexte können verhindern, dass Prozesse auf solche Dateien und Verzeichnisse zugreifen


==== Moving Files and Directories ====
==== Verschieben von Dateien und Verzeichnissen ====
Files and directories keep their current SELinux context when they are moved
Dateien und Verzeichnisse behalten ihren aktuellen SELinux-Kontext bei, wenn sie verschoben werden
* In many cases, this is incorrect for the location they are being moved to
* In vielen Fällen ist dieser für den Zielort, an den sie verschoben werden, falsch
* The following example demonstrates moving a file from a user's home directory to the [[/var/www/html/]] directory, which is used by the Apache HTTP Server
* Das folgende Beispiel zeigt das Verschieben einer Datei aus dem Home-Verzeichnis eines Benutzers in das Verzeichnis [[/var/www/html/]], das vom Apache-HTTP-Server verwendet wird
* Since the file is moved, it does not inherit the correct SELinux context
* Da die Datei verschoben wird, erbt sie nicht den richtigen SELinux-Kontext


; Moving Files and Directories
; Verschieben von Dateien und Verzeichnissen
# Change into your home directory and create file in it
# Wechseln Sie in Ihr Home-Verzeichnis und erstellen Sie dort eine Datei
* The file is labeled with the [[user_home_t]] type
* Die Datei ist mit dem Typ [[user_home_t]] gekennzeichnet
  touch file1
  touch file1


Zeile 846: Zeile 841:
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1


# Enter the following command to view the SELinux context of the [[/var/www/html/]] directory
# Geben Sie den folgenden Befehl ein, um den SELinux-Kontext des Verzeichnisses [[/var/www/html/]] anzuzeigen
  ls -dZ /var/www/html/
  ls -dZ /var/www/html/
  drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
  drwxr-xr-x root root system_u:object_r:httpd _sys_content_t:s0 /var/www/html/


By default, [[/var/www/html/]] is labeled with the [[httpd_sys_content_t]] type
Standardmäßig ist [[/var/www/html/]] mit dem Typ [[httpd_sys_content_t]] gekennzeichnet
* Files and directories created under [[/var/www/html/]] inherit this type, and as such, they are labeled with this type
* Dateien und Verzeichnisse, die unter [[/var/www/html/]] erstellt werden, erben diesen Typ und sind somit mit diesem Typ gekennzeichnet
# As root, move [[file1]] to [[/var/www/html/]]
# Verschieben Sie als root [[file1]] nach [[/var/www/html/]]
* Since this file is moved, it keeps its current [[user_home_t]] type
* Da diese Datei verschoben wird, behält sie ihren aktuellen Typ [[user_home_t]]
  sudo mv file1 /var/www/html/
  sudo mv file1 /var/www/html/
 
sudo ls -Z /var/www/html/file1
sudo ls -Z /var/www/html/file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
  -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1


By default, the Apache HTTP Server cannot read files that are labeled with the [[user_home_t]] type
Standardmäßig kann der Apache-HTTP-Server keine Dateien lesen, die mit dem Typ [[user_home_t]] ] gekennzeichnet sind
* If all files comprising a web page are labeled with the [[user_home_t]] type, or another type that the Apache HTTP Server cannot read, permission is denied when attempting to access them using web browsers, such as '''Mozilla Firefox'''
* Wenn alle Dateien, aus denen eine Webseite besteht, mit dem Typ [[user_home_t]] gekennzeichnet sind oder einem anderen Typ, den der Apache-HTTP-Server nicht lesen kann, wird der Zugriff verweigert, wenn versucht wird, über Webbrowser wie ‚‘'Mozilla Firefox'‚‘


; Important
; Wichtig


Moving files and directories with the [[mv]] command may result in the incorrect SELinux context, preventing processes, such as the Apache HTTP Server and Samba, from accessing such files and directories
Das Verschieben von Dateien und Verzeichnissen mit dem Befehl [[mv]] kann zu einem falschen SELinux-Kontext führen, wodurch Prozesse wie der Apache-HTTP-Server und Samba daran gehindert werden, auf solche Dateien und Verzeichnisse zuzugreifen


==== Checking the Default SELinux Context ====
==== Überprüfen des Standard-SELinux-Kontexts ====
Use the [[matchpathcon]] utility to check if files and directories have the correct SELinux context
Verwenden Sie das Dienstprogramm [[matchpathcon]], um zu überprüfen, ob Dateien und Verzeichnisse den richtigen SELinux-Kontext haben
* This utility queries the [[system policy]] and then provides the default security context associated with the file path.[6] The following example demonstrates using [[matchpathcon]] to verify that files in [[/var/www/html/]] directory are labeled correctly
* Dieses Dienstprogramm fragt die [[Systemrichtlinie]] ab und gibt dann den mit dem Dateipfad verbundenen Standard-Sicherheitskontext aus.[6] Das folgende Beispiel zeigt, wie man mit [[matchpathcon]] überprüft, ob Dateien im Verzeichnis [[/var/www/html/]] korrekt gekennzeichnet sind
; Checking the Default SELinux Conxtext with [[matchpathcon''']]
; Überprüfen des Standard-SELinux-Kontexts mit [[matchpathcon'‚‘]]
# As the root user, create three files ([[file1]], [[file2]], and [[file3]]) in the [[/var/www/html/]] directory
# Erstellen Sie als Root-Benutzer drei Dateien ([[file1]], [[file2]] und [[file3]]) im Verzeichnis [[/var/www/html/]]
* These files inherit the [[httpd_sys_content_t]] type from [[/var/www/html/]]
* Diese Dateien erben den Typ [[httpd_sys_content_t]] von [[/var/www/html/]]
  sudo touch /var/www/html/file{1,2,3}
  sudo touch /var/www/html/file{1,2,3}
 
sudo ls -Z /var/www/html/
sudo ls -Z /var/www/html/
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
  -rw-r--r-- root root unconfined_u: object_r:httpd_sys_content_t:s0 file3


# As root, change the [[file1]] type to [[samba_share_t]]
# Ändern Sie als root den Typ von [[file1]] in [[samba_share_t]]
* Note that the Apache HTTP Server cannot read files or directories labeled with the [[samba_share_t]] type
* Beachten Sie, dass der Apache-HTTP-Server keine Dateien oder Verzeichnisse lesen kann, die mit dem Typ [[samba_share_t]] ] gekennzeichnet sind


  sudo chcon -t samba_share_t /var/www/html/file1
  sudo chcon -t samba_share_t /var/www/html/file1


# The [[matchpathcon]] [[-V]] option compares the current SELinux context to the correct, default context in SELinux policy
# Die Option [[-V]] von [[matchpathcon]] vergleicht den aktuellen SELinux-Kontext mit dem korrekten Standardkontext in der SELinux-Richtlinie
* Enter the following command to check all files in the [[/var/www/html/]] directory
* Geben Sie den folgenden Befehl ein, um alle Dateien im Verzeichnis [[/var/www/html/]] zu überprüfen
  matchpathcon -V /var/www/html/*
  matchpathcon -V /var/www/html/ *
  /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
  /var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
  /var/www/html/file2 verified
  /var/www/html/file2 verifiziert
  /var/www/html/file3 verified
  /var/www/html/file3 verifiziert


The following output from the [[matchpathcon]] command explains that [[file1]] is labeled with the [[samba_share_t]] type, but should be labeled with the [[httpd_sys_content_t]] type
Die folgende Ausgabe des Befehls [[matchpathcon]] erklärt, dass [[file1]] mit dem Typ [[samba_share_t]] gekennzeichnet ist, aber mit dem Typ [[httpd_sys_content_t]] gekennzeichnet sein sollte
  /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
   
/var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein


To resolve the label problem and allow the Apache HTTP Server access to [[file1]], as root, use the [[restorecon]] utility
Um das Label-Problem zu beheben und dem Apache-HTTP-Server als root Zugriff auf [[file1]] zu gewähren, verwenden Sie das Dienstprogramm [[restorecon]]
  sudo restorecon -v /var/www/html/file1
  sudo restorecon -v /var/www/ html/file1
  restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t: s0


==== Archiving Files with tar ====
==== Dateien mit tar archivieren ====
The [[tar]] utility does not retain extended attributes by default
Das Dienstprogramm [[tar]] behält standardmäßig keine erweiterten Attribute bei
* Since SELinux contexts are stored in extended attributes, contexts can be lost when archiving files
* Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
* Use the [[tar --selinux]] command to create archives that retain contexts and to restore files from the archives
* Verwenden Sie den Befehl [[tar --selinux]], um Archive zu erstellen, die Kontexte beibehalten, und um Dateien aus den Archiven wiederherzustellen
* If a [[tar]] archive contains files without extended attributes, or if you want the extended attributes to match the system defaults, use the [[restorecon]] utility
* Wenn ein [[tar]] Archiv Dateien ohne erweiterte Attribute enthält oder wenn Sie möchten, dass die erweiterten Attribute den Systemstandardwerten entsprechen, verwenden Sie das Dienstprogramm [[restorecon]]
  tar -xvf ''archive.tar'' | restorecon -f -
  tar -xvf 'archive.tar‘' | restorecon -f -


Note that depending on the directory, you may need to be the root user to run the [[restorecon]]
Beachten Sie, dass Sie je nach Verzeichnis möglicherweise Root-Rechte benötigen, um das [ [restorecon]]


The following example demonstrates creating a [[tar]] archive that retains SELinux contexts
Das folgende Beispiel zeigt, wie ein [[tar]]-Archiv erstellt wird, das SELinux-Kontexte beibehält
; Creating a tar Archive
; Erstellen eines tar-Archivs
# Change to the [[/var/www/html/]] directory and view its SELinux context
# Wechseln Sie in das Verzeichnis [[/var/www/html/]] und zeigen Sie dessen SELinux-Kontext an
  cd /var/www/html/
  cd /var/www/html/
 
ls -dZ /var/www/html/
ls -dZ /var/www/html/
  drwxr-xr-x
  drwxr-xr-x
* root root system_u:object_r:httpd_sys_content_t:s0  
* root root system_u:object_r:httpd_sys_content_t:s0  


# As root, create three files ([[file1]], [[file2]], and [[file3]]) in [[/var/www/html/]]
# Erstellen Sie als Root drei Dateien ([[file1]], [ [file2] und [[file3]]) im Verzeichnis [[/var/www/html/]]
* These files inherit the [[httpd_sys_content_t]] type from [[/var/www/html/]]
* Diese Dateien erben den Typ [[httpd_sys_content_t]] vom Verzeichnis [[/var/www/html/]]
html]# touch file{1,2,3}
html]# touch file{1,2,3}


  ls -Z /var/www/html/
  ls -Z /var/www/html/
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
   
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
  -rw -r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3


# As root, enter the following command to create a [[tar]] archive named [[test.tar]]
# Geben Sie als root den folgenden Befehl ein, um ein [[tar]]-Archiv mit dem Namen [[test.tar]] zu erstellen
* Use the [[--selinux]] to retain the SELinux context
* Verwenden Sie die Option [[--selinux]], um den SELinux-Kontext beizubehalten
  sudo tar --selinux -cf test.tar file{1,2,3}
  sudo tar --selinux -cf test.tar file{1,2,3}


# As root, create a new directory named [[test/]], and then allow all users full access to it
# Erstellen Sie als root ein neues Verzeichnis namens [[test/]] und gewähren Sie anschließend allen Benutzern vollen Zugriff darauf
  sudo mkdir /test
  sudo mkdir /test
  sudo chmod 777 /test/
  sudo chmod 777 /test/


# Copy the [[test.tar]] file into [[test/]]
# Kopieren Sie die Datei [[test.tar]] in [[test/]]
  cp /var/www/html/test.tar /test/
  cp /var/www/html/test.tar /test/


# Change into [[test/]] directory
# Wechseln Sie in das Verzeichnis [[test/]]
* Once in this directory, enter the following command to extract the [[tar]] archive
* Geben Sie in diesem Verzeichnis den folgenden Befehl ein, um das [[tar]]-Archiv zu entpacken
* Specify the [[--selinux]] option again otherwise the SELinux context will be changed to [[default_t]]
* Geben Sie die Option [[--selinux]] erneut an, da sonst der SELinux-Kontext auf [[default_t]] geändert wird
  cd /test/
  cd /test/


  tar --selinux -xvf test.tar
  tar --selinux -xvf test.tar


# View the SELinux contexts
# SELinux-Kontexte anzeigen
* The [[httpd_sys_content_t]] type has been retained, rather than being changed to [[default_t]], which would have happened had the [[--selinux]] not been used
* Der Typ [[httpd_sys_content_t]] wurde beibehalten und nicht in [[default_t]] geändert, was geschehen wäre, wenn [[--selinux]] nicht verwendet worden wäre
  test]$ ls -lZ /test/
  test]$ ls -lZ /test/
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw -r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t: s0 file3
  -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.tar
  -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.tar


# If the [[test/]] directory is no longer required, as root, enter the following command to remove it, as well as all files in it
# Wenn das Verzeichnis [[test/]] nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
  sudo rm -ri /test/
  sudo rm -ri /test/


See the tar(1) manual page for further information about [[tar]], such as the [[--xattrs]] option that retains all extended attributes
Weitere Informationen zu [[tar]], wie beispielsweise die Option [[- -xattrs]], die alle erweiterten Attribute beibehält


==== Archiving Files with star ====
==== Dateien mit star archivieren ====
The [[star]] utility does not retain extended attributes by default
Das Dienstprogramm [[star]] behält standardmäßig keine erweiterten Attribute bei
* Since SELinux contexts are stored in extended attributes, contexts can be lost when archiving files
* Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
* Use the [[star -xattr -H=exustar]] command to create archives that retain contexts
* Verwenden Sie den Befehl [[star -xattr -H=exustar]], um Archive zu erstellen, die Kontexte beibehalten
* The star package is not installed by default
* Das star-Paket ist standardmäßig nicht installiert
* To install [[star]], run the [[yum install star]] command as the root user
* Um [[star]] zu installieren, führen Sie als Root-Benutzer den Befehl [[yum install star]] aus


The following example demonstrates creating a [[star]] archive that retains SELinux contexts
Das folgende Beispiel zeigt die Erstellung eines [[star]]-Archivs, das SELinux-Kontexte beibehält
; Creating a [[star]] Archive
; Erstellen eines [ [star]]-Archiv
# As root, create three files ([[file1]], [[file2]], and [[file3]]) in the [[/var/www/html/]]
# Erstellen Sie als Root drei Dateien ([[file1]], [[file2]] und [[file3]]) im Verzeichnis [[/var/www/html/]]
* These files inherit the [[httpd_sys_content_t]] type from [[/var/www/html/]]
* Diese Dateien erben den Typ [[httpd_sys_content_t]] von [[/var/www/html/]]
  sudo touch /var/www/html/file{1,2,3}
  sudo touch /var/www/html/file{1,2,3}


  sudo ls -Z /var/www/html/
  sudo ls -Z / var/www/html/
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
   
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3


# Change into [[/var/www/html/]] directory
# Wechseln Sie in das Verzeichnis [[/var/www/html/]]
* Once in this directory, as root, enter the following command to create a [[star]] archive named [[test.star]]
* Geben Sie in diesem Verzeichnis als root den folgenden Befehl ein, um ein [[star]]-Archiv mit dem Namen [[test.star]] zu erstellen
  cd /var/www/html
  cd /var/www/html


  html]# star -xattr -H=exustar -c -f=test.star file{1,2,3}
  html]# star -xattr -H=exustar -c -f=test.star file{1,2,3}
  star
  star
1 blocks + 0 bytes (total of 10240 bytes = 10.00k)
1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 k)


# As root, create a new directory named [[test/]], and then allow all users full access to it
# Erstellen Sie als Root ein neues Verzeichnis namens [[test/]] und gewähren Sie allen Benutzern vollständigen Zugriff darauf
  sudo mkdir /test
  sudo mkdir /test


  sudo chmod 777 /test/
  sudo chmod 777 /test/


# Enter the following command to copy the [[test.star]] file into [[test/]]
# Geben Sie den folgenden Befehl ein, um die Datei [[test.star]] in [[test/]] zu kopieren
  cp /var/www/html/test.star /test/
  cp /var/www/html/test.star /test/


# Change into [[test/]]
# Wechseln Sie in das Verzeichnis [[test/]]
* Once in this directory, enter the following command to extract the [[star]] archive
* Sobald Sie sich in diesem Verzeichnis befinden, geben Sie den folgenden Befehl ein, um das [[star]]-Archiv zu extrahieren
  cd /test/
  cd /test/


  test]$ star -x -f=test.star
  test]$ star -x -f=test.star
  star
  star
1 blocks + 0 bytes (total of 10240 bytes = 10.00k)
1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 kB)


# View the SELinux contexts
# Zeigen Sie die SELinux-Kontexte an
* The [[httpd_sys_content_t]] type has been retained, rather than being changed to [[default_t]], which would have happened had the [[-xattr -H=exustar]] option not been used
* Der Typ [[httpd_sys_content_t]] wurde beibehalten und nicht in [ [default_t] geändert worden wäre, was geschehen wäre, wenn die Option [[-xattr -H=exustar]] nicht verwendet worden wäre
  ls -lZ /test/
  ls -lZ /test/
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r --r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3
  -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3
  -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.star
  -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.star


# If the [[test/]] directory is no longer required, as root, enter the following command to remove it, as well as all files in it
# Wenn das Verzeichnis [[test/]] Verzeichnis nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
  sudo rm -ri /test/
  sudo rm -ri /test/


# If [[star]] is no longer required, as root, remove the package
# Wenn [[star]] nicht mehr benötigt wird, entfernen Sie das Paket als root
  sudo yum remove star
  sudo yum remove star


See the star(1) manual page for further information about [[star]]
Weitere Informationen zu [[star]] finden Sie auf der Handbuchseite star(1)


=== Information Gathering Tools ===
=== Tools zur Informationsbeschaffung ===
The utilities listed below are command-line tools that provide well-formatted information, such as access vector cache statistics or the number of classes, types, or Booleans
Die unten aufgeführten Dienstprogramme sind Befehlszeilentools, die gut formatierte Informationen liefern, wie beispielsweise Statistiken zum Access Vector Cache oder die Anzahl der Klassen, Typen oder Booleschen Werte


==== avcstat ====
==== avcstat ====
This command provides a short output of the access vector cache statistics since boot
Dieser Befehl liefert eine kurze Ausgabe der Access Vector Cache-Statistiken seit dem Systemstart
* You can watch the statistics in real time by specifying a time interval in seconds
* Sie können die Statistiken in Echtzeit verfolgen, indem Sie ein Zeitintervall in Sekunden angeben
* This provides updated statistics since the initial output
* Dies liefert aktualisierte Statistiken seit der ersten Ausgabe
* The statistics file used is [[/sys/fs/selinux/avc/cache_stats]], and you can specify a different cache file with the [[-f /path/to/file]] option
* Die verwendete Statistikdatei ist [[/sys/fs/selinux/avc/cache_stats]], und Sie können mit der Option [ [-f /Pfad/zur/Datei]]


  sudo avcstat
  sudo avcstat
  lookups hits misses allocs reclaims frees
  Lookups Hits Misses Allocs Reclaims Frees
  47517410 47504630 12780 12780 12176 12275
  47517410 47504630 12780 12780 12176 12275


==== seinfo ====
==== seinfo ====
This utility is useful in describing the break-down of a policy, such as the number of classes, types, Booleans, allow rules, and others. [[seinfo]] is a command-line utility that uses a [[policy.conf]] file, a binary policy file, a modular list of policy packages, or a policy list file as input
Dieses Dienstprogramm ist nützlich, um die Aufschlüsselung einer Richtlinie zu beschreiben, wie z. B. die Anzahl der Klassen, Typen, Booleschen Werte, Zulassungsregeln und andere. [[seinfo]] ist ein Kommandozeilen-Dienstprogramm, das eine [[policy.conf]]-Datei, eine binäre Richtliniendatei, eine modulare Liste von Richtlinienpaketen oder eine Richtlinienlistendatei als Eingabe verwendet
* You must have the setools-console package installed to use the [[seinfo]] utility
* Sie müssen das Paket setools-console installiert haben, um das Dienstprogramm [[seinfo]] nutzen
 
The output of [[seinfo]] will vary between binary and source files
* For example, the policy source file uses the [[{ }]] brackets to group multiple rule elements onto a single line
* A similar effect happens with attributes, where a single attribute expands into one or many types
* Because these are expanded and no longer relevant in the binary policy file, they have a return value of zero in the search results
* However, the number of rules greatly increases as each formerly one line rule using brackets is now a number of individual lines


Some items are not present in the binary policy
Die Ausgabe von [[seinfo]] variiert zwischen Binär- und Quelldateien
* For example, neverallow rules are only checked during policy compile, not during runtime, and initial Security Identifiers (SIDs) are not part of the binary policy since they are required prior to the policy being loaded by the kernel during boot
* Beispielsweise verwendet die Richtlinienquelldatei die Klammern [[{ }]] , um mehrere Regelelemente in einer einzigen Zeile zu gruppieren
* Ein ähnlicher Effekt tritt bei Attributen auf, bei denen sich ein einzelnes Attribut in einen oder mehrere Typen auflöst
* Da diese aufgelöst werden und in der binären Richtlinien-Datei nicht mehr relevant sind, haben sie in den Suchergebnissen den Rückgabewert Null
* Die Anzahl der Regeln steigt jedoch erheblich an, da jede ehemals einzeilige Regel, die Klammern nun aus mehreren einzelnen Zeilen besteht


  sudo seinfo
Einige Elemente sind in der binären Richtlinie nicht vorhanden
* Beispielsweise werden neverallow-Regeln nur während der Kompilierung der Richtlinie überprüft, nicht zur Laufzeit, und anfängliche Sicherheitskennungen (SIDs) sind nicht Teil der binären Richtlinie, da sie erforderlich sind, bevor die Richtlinie beim Booten vom Kernel geladen wird
   
sudo seinfo


Statistics for policy file
Statistiken zur Richtliniendatei
/sys/fs/selinux/policy
/sys/fs/selinux/policy
Policy Version & Type
Richtlinienversion & Typ
v.28 (binary, mls)
v.28 (binär, mls)


Classes
Klassen
77 Permissions
77 Berechtigungen
229
229
Sensitivities
Sensitivitäten
1 Categories
1 Kategorien
1024
1024
Types
Typen
3001 Attributes
3001 Attribute
244
244
Users
Benutzer
9 Roles
9 Rollen
13
13
Booleans
Boolesche Werte
158 Cond
158 Cond
* Expr.
* Ausdrücke
193
193
  Allow
  Zulassen
262796 Neverallow
262796 Niemals zulassen
0
0
  Auditallow
  Audit zulassen
44 Dontaudit
44 Kein Audit
156710
156710
  Type_trans
  Typ_trans
10760 Type_change
10760 Typ_change
38
38
  Type_member
  Typ_member
44 Role allow
44 Rolle zulassen
20
20
  Role_trans
  Rolle_trans
237 Range_trans
237 Bereich_trans
2546
2546
  Constraints
   
Einschränkungen
62 Validatetrans
62 Validatetrans
0
0
Initial SIDs
Anfängliche SIDs
27 Fs_use
27 Fs_use
22
22
Genfscon
Genfscon
82 Portcon
82 Portcon
373
373
Netifcon
Netifcon
0 Nodecon
0 Nodecon
0
0
Permissives
Permissives
22 Polcap
22 Polcap
2
2


The [[seinfo]] utility can also list the number of types with the domain attribute, giving an estimate of the number of different confined processes
Das Dienstprogramm [[seinfo]] kann auch die Anzahl der Typen mit dem Attribut „domain“ auflisten und so eine Schätzung der Anzahl verschiedener eingeschränkter Prozesse liefern
  sudo seinfo -adomain -x | wc -l
   
sudo seinfo -adomain -x | wc -l
  550
  550


Not all domain types are confined
Nicht alle Domänentypen sind eingeschränkt
* To look at the number of unconfined domains, use the [[unconfined_domain]] attribute
* Um die Anzahl der nicht eingeschränkten Domänen anzuzeigen, verwenden Sie das Attribut [[unconfined_domain]]
  sudo seinfo -aunconfined_domain_type -x | wc -l
  sudo seinfo -aunconfined_domain_type -x | wc -l
  52
  52


Permissive domains can be counted with the [[--permissive]] option
Permissive Domänen können mit der Option [[--permissive]] gezählt werden
  sudo seinfo --permissive -x | wc -l
  sudo seinfo --permissive -x | wc -l
  31
  31


Remove the additional [[ wc -l]] command in the above commands to see the full lists
Entfernen Sie den zusätzlichen [ [ wc -l]] aus den obigen Befehlen, um die vollständigen Listen anzuzeigen


==== sesearch ====
==== sesearch ====
You can use the [[sesearch]] utility to search for a particular rule in the policy
Sie können das Dienstprogramm [[sesearch]] verwenden, um nach einer bestimmten Regel in der Richtlinie zu suchen
* It is possible to search either policy source files or the binary file
* Es ist möglich, entweder die Quelldateien der Richtlinie oder die Binärdatei zu durchsuchen
* For example
* Zum Beispiel
  sesearch --role_allow -t httpd_sys_content_t
  sesearch --role_allow -t httpd_sys_content_t
  Found 20 role allow rules
  20 Regeln für die Zulassung von Rollen gefunden
  allow system_r sysadm_r;
  allow system_r sysadm_r;
  allow sysadm_r system_r;
  allow sysadm_r system_r;
Zeile 1.121: Zeile 1.121:
  allow system_r git_shell_r;
  allow system_r git_shell_r;
  allow system_r guest_r;
  allow system_r guest_r;
  allow logadm_r system_r;
  allow logadm_r system _r;
  allow system_r logadm_r;
  allow system_r logadm_r;
  allow system_r nx_server_r;
  allow system_r nx_server_r;
Zeile 1.128: Zeile 1.128:
  allow staff_r sysadm_r;
  allow staff_r sysadm_r;
  allow staff_r unconfined_r;
  allow staff_r unconfined_r;
  allow staff_r webadm_r;
   
  allow unconfined_r system_r;
erlaube staff_r webadm_r;
  allow system_r unconfined_r;
  erlaube unconfined_r system_r;
  allow system_r user_r;
  erlaube system_r unconfined_r;
  allow webadm_r system_r;
  erlaube system_r user_r;
  allow system_r webadm_r;
  erlaube webadm_r system_r;
  allow system_r xguest_r;
  erlaube system_r webadm_r;
  erlaube system_r xguest_r;


The [[sesearch]] utility can provide the number of ''allow'' rules
Das Dienstprogramm [[sesearch]] kann die Anzahl der ‚'allow‘'-Regeln anzeigen
  sudo sesearch --allow | wc -l
  sudo sesearch --allow | wc -l
  262798
  262798


And the number of ''dontaudit'' rules
Und die Anzahl der ‚'dontaudit‘'-Regeln
  sudo sesearch --dontaudit | wc -l
  sudo sesearch --dontaudit | wc -l
  156712
  156712


=== Prioritizing and Disabling SELinux Policy Modules ===
=== Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen ===
The SELinux module storage in [[/etc/selinux/]] allows using a priority on SELinux modules
Der Speicher für SELinux-Module in [[/etc/selinux/]] ermöglicht die Verwendung einer Priorität für SELinux-Module
* Enter the following command as root to show two module directories with a different priority
* Geben Sie den folgenden Befehl als Root ein, um zwei Modulverzeichnisse mit unterschiedlicher Priorität anzuzeigen
  sudo ls /etc/selinux/targeted/active/modules
  sudo ls /etc/selinux/targeted/active/ module
  100 400 disabled
  100 400 disabled


While the default priority used by [[semodule]] utility is 400, the priority used in selinux-policy packages is 100, so you can find most of the SELinux modules installed with the priority 100
Während die Standardpriorität des Dienstprogramms [[semodule]] 400 beträgt, liegt die Priorität in selinux-policy-Paketen bei 100, sodass die meisten installierten SELinux-Module die Priorität 100 haben


You can override an existing module with a modified module with the same name using a higher priority
Sie können ein vorhandenes Modul durch ein modifiziertes Modul mit demselben Namen und einer höheren Priorität überschreiben
* When there are more modules with the same name and different priorities, only a module with the highest priority is used when the policy is built
* Wenn mehrere Module mit demselben Namen und unterschiedlichen Prioritäten vorhanden sind, wird beim Erstellen der Richtlinie nur das Modul mit der höchsten Priorität verwendet


; Using SELinux Policy Modules Priority
; Verwendung von SELinux-Richtlinienmodulen – Priorität


Prepare a new module with modified file context
Erstellen Sie ein neues Modul mit geändertem Dateikontext
* Install the module with the [[semodule -i]] command and set the priority of the module to 400
* Installieren Sie das Modul mit dem Befehl [[semodule -i]] und setzen Sie die Priorität des Moduls auf 400
* We use [[sandbox.pp]] in the following example
* Im folgenden Beispiel verwenden wir [[sandbox.pp]]


  sudo semodule -X 400 -i sandbox.pp
  sudo semodule -X 400 -i sandbox.pp
Zeile 1.166: Zeile 1.167:
  100 sandbox pp
  100 sandbox pp


To return back to the default module, enter the [[semodule -r]] command as root
Um zum Standardmodul zurückzukehren, geben Sie als Root den Befehl [[semodule -r]] ein
  sudo semodule -X 400 -r sandbox
  sudo semodule -X 400 -r sandbox
libsemanage.semanage_direct_remove_key
libsemanage.semanage_direct_remove_key
sandbox module at priority 100 is now active
Das Sandbox-Modul mit der Priorität 100 ist nun aktiv


==== Disabling a System Policy Module ====
==== Deaktivieren eines System-Policy-Moduls ====
To disable a [[system policy]] module, enter the following command as root
Um ein [[System-Policy]]-Modul zu deaktivieren, geben Sie als Root den folgenden Befehl ein
semodule -d ''MODULE_NAME''
semodule -d 'MODULE_NAME‘'


; Warning
; Warnung


If you remove a [[system policy]] module using the [[semodule -r]] command, it is deleted on your system's storage and you cannot load it again
Wenn Sie ein [[System-Policy]]-Modul mit dem Befehl [[semodule -r]] entfernen, wird es vom Speichersystem gelöscht und kann nicht erneut geladen werden
* To avoid unnecessary reinstallations of the selinux-policy-targeted package for restoring all [[system policy]] modules, use the [[semodule -d]] command instead
* Um unnötige Neuinstallationen des selinux -policy-targeted-Pakets zur Wiederherstellung aller [[Systemrichtlinien]]-Module, verwenden Sie stattdessen den Befehl [[semodule -d]]


=== Multi-Level Security (MLS) ===
=== Multi-Level Security (MLS) ===
The Multi-Level Security technology refers to a security scheme that enforces the Bell-La Padula Mandatory Access Model
Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt
* Under MLS, users and processes are called ''subjects'', and files, devices, and other passive components of the system are called ''objects''
* Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
* Both subjects and objects are labeled with a security level, which entails a subject's clearance or an object's classification
* Sowohl Subjekte als auch Objekte sind mit einer Sicherheitsstufe gekennzeichnet, die die Sicherheitsfreigabe eines Subjekts oder die Klassifizierung eines Objekts angibt
* Each security level is composed of a ''sensitivity'' and a ''category'', for example, an internal release schedule is filed under the internal documents category with a confidential sensitivity
* Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt


Figure&nbsp“Levels of clearance” shows levels of clearance as originally designed by the US defense community
Abbildung „Sicherheitsfreigabestufen“ zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen
* Relating to our internal schedule example above, only users that have gained the confidential clearance are allowed to view documents in the confidential category
* Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen
* However, users who only have the confidential clearance are not allowed to view documents that require higher levels or clearance; they are allowed read access only to documents with lower levels of clearance, and write access to documents with higher levels of clearance
* Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen


; Figure&nbsp;Levels of clearance
; Abbildung&nbsp;Sicherheitsfreigabestufen


Figure&nbsp;“Allowed data flows using MLS” shows all allowed data flows between a subject running under the "Secret" security level and various objects with different security levels
Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“ zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft, und verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen
* In simple terms, the Bell-LaPadula model enforces two properties
* Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften
''no read up'' and ''no write down''
„no read up“ und „no write down“


; Figure&nbsp;Allowed data flows using MLS
; Abbildung&nbsp;Zulässige Datenflüsse unter Verwendung von MLS


==== MLS and System Privileges ====
==== MLS und Systemberechtigungen ====
MLS access rules are always combined with conventional access permissions (file permissions)
MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert
* For example, if a user with a security level of "Secret" uses Discretionary Access Control (DAC) to block access to a file by other users, this also blocks access by users with a security level of "Top Secret"
* Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
* It is important to remember that SELinux MLS policy rules are checked ''after'' DAC rules
* Es ist wichtig zu beachten, dass die MLS-Richtlinien von SELinux „nach“ den DAC-Regeln überprüft werden
* A higher security clearance does not automatically give permission to arbitrarily browse a file system
* Eine höhere Sicherheitsfreigabe gewährt nicht automatisch die Berechtigung, willkürlich im Dateisystem zu stöbern


Users with top-level clearances do not automatically acquire administrative rights on multi-level systems
Benutzer mit Freigaben der höchsten Stufe erhalten in mehrstufigen Systemen nicht automatisch Administratorrechte
* While they may have access to all information on the computer, this is different from having administrative rights
* Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen


==== Enabling MLS in SELinux ====
==== Aktivieren von MLS in SELinux ====
; Note
; Hinweis


It is not recommended to use the MLS policy on a system that is running the X Window System
Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft


Follow these steps to enable the SELinux MLS policy on your system
Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren


; Enabling SELinux MLS Policy
; Aktivieren der SELinux-MLS-Richtlinie
# Install the selinux-policy-mls package
# Installieren Sie das Paket selinux-policy-mls
  sudo yum install selinux-policy-mls
  sudo yum install selinux-policy-mls
# Before the MLS policy is enabled, each file on the file system must be relabeled with an MLS label
# Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
* When the file system is relabeled, confined domains may be denied access, which may prevent your system from booting correctly
* Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
* To prevent this from happening, configure [[SELINUX=permissive]] in the [[/etc/selinux/config]] file
* Um dies zu verhindern, konfigurieren Sie [[SELINUX=permissive]] in der Datei [[/etc/selinux/config]]
* Also, enable the MLS policy by configuring [[SELINUXTYPE=mls]]
* Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie [[SELINUXTYPE=mls]] konfigurieren
* Your configuration file should look like this
* Ihre Konfigurationsdatei sollte wie folgt aussehen
  # This file controls the state of SELinux on the system
  # Diese Datei steuert den Status von SELinux auf dem System
  # SELINUX= can take one of these three values
  # SELINUX= kann einen dieser drei Werte annehmen
  # enforcing - SELinux security policy is enforced
  # enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
  # permissive - SELinux prints warnings instead of enforcing
  # permissive SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
  # disabled - No SELinux policy is loaded
  # disabled – Es wird keine SELinux-Richtlinie geladen
  SELINUX=permissive
   
  # SELINUXTYPE= can take one of these two values
SELINUX=permissive
  # targeted - Targeted processes are protected,
  # SELINUXTYPE= kann einen dieser beiden Werte annehmen
  # mls - Multi Level Security protection
  # targeted – Zielgerichtete Prozesse werden geschützt,
  # mls – Multi-Level-Security-Schutz
  SELINUXTYPE=mls
  SELINUXTYPE=mls


  # Make sure SELinux is running in permissive mode
  # Stellen Sie sicher, dass SELinux im permissiven Modus läuft
  sudo setenforce 0
  sudo setenforce 0


Zeile 1.239: Zeile 1.241:
  Permissive
  Permissive


# Use the [[fixfiles]] script to create the [[/.autorelabel]] file containing the [[-F]] option to ensure that files are relabeled upon next reboot
# Verwenden Sie das Skript [[fixfiles]], um die Datei [[/.autorelabel]] mit der Option [[-F]] zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
  sudo fixfiles -F onboot
  sudo fixfiles -F onboot


# Reboot your system
# Starten Sie Ihr System neu
* During the next boot, all file systems will be relabeled according to the MLS policy
* Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
* The label process labels all files with an appropriate SELinux context
* Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
  *** Warning -- SELinux mls policy relabel is required
   
  *** Relabeling could take a very long time, depending on file
*** Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
  *** system size and speed of hard drives
  *** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
  *** Größe des Dateisystems und der Geschwindigkeit der Festplatten
  ***********
  ***********


Each [[*]] (asterisk) character on the bottom line represents 1000 files that have been labeled
Jedes [[*]] (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden
* In the above example, eleven [[*]] characters represent 11000 files which have been labeled
* Im obigen Beispiel stehen elf [[*]]-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
* The time it takes to label all files depends upon the number of files on the system, and the speed of the hard disk drives
* Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
* On modern systems, this process can take as little as 10 minutes
* Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
* Once the labeling process finishes, the system will automatically reboot
* Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
# In permissive mode, SELinux policy is not enforced, but denials are still logged for actions that would have been denied if running in enforcing mode
# Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
* Before changing to enforcing mode, as root, enter the following command to confirm that SELinux did not deny actions during the last boot
* Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
* If SELinux did not deny actions during the last boot, this command does not return any output
* Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
* See Chapter&nbsp;[[Troubleshooting]] for troubleshooting information if SELinux denied access during boot
* Siehe Kapitel&nbsp;[[Fehlerbehebung]] für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat


  sudo grep "SELinux is preventing" /var/log/messages
  sudo grep „SELinux is preventing“ /var/log/messages


# If there were no denial messages in the [[/var/log/messages]] file, or you have resolved all existing denials, configure [[SELINUX=enforcing]] in the [[/etc/selinux/config]] file
# Wenn die Datei [[/var/log/messages]] keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie [[SELINUX=enforcing]] in der Datei [[/etc/selinux/config]]
  # This file controls the state of SELinux on the system
  # Diese Datei steuert den Status von SELinux auf dem System
  # SELINUX= can take one of these three values
  # SELINUX= kann einen dieser drei Werte annehmen
  # enforcing - SELinux security policy is enforced
  # enforcing - Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
  # permissive - SELinux prints warnings instead of enforcing
  # permissive - SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
  # disabled - No SELinux policy is loaded
  # disabled - Es wird keine SELinux-Richtlinie geladen
  SELINUX=enforcing
  SELINUX=enforcing
  # SELINUXTYPE= can take one of these two values
  # SELINUXTYPE= kann einen dieser beiden Werte annehmen
  # targeted - Targeted processes are protected,
  # targeted - Zielgerichtete Prozesse werden geschützt,
  # mls - Multi Level Security protection
  # mls - Multi-Level-Security-Schutz
  SELINUXTYPE=mls
  SELINUXTYPE=mls
# Reboot your system and make sure SELinux is running in enforcing mode
# Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
  getenforce
  getenforce
  Enforcing
  Durchsetzung


and the MLS policy is enabled
und die MLS-Richtlinie ist aktiviert
  sudo sestatus |grep mls
  sudo sestatus |grep mls
  Policy from config file
  Richtlinie aus der Konfigurationsdatei
mls
mls


==== Creating a User With a Specific MLS Range ====
==== Einen Benutzer mit einem bestimmten MLS-Bereich erstellen ====
Follow these steps to create a new Linux user with a specific MLS range
Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen
; Creating a User With a Specific MLS Range
; Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
# Add a new Linux user using the [[useradd]] command and map the new Linux user to an existing SELinux user (in this case, [[staff_u]])
# Fügen Sie einen neuen Linux-Benutzer mit dem [[useradd ]] und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall [[staff_u]])
  sudo useradd -Z staff_u john
  sudo useradd -Z staff_u john
# Assign the newly-created Linux user a password
# Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu
  prompt sudo passwd john
  Eingabeaufforderung sudo passwd john
# Enter the following command as root to view the mapping between SELinux and Linux users
# Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen
* The output should be as follows
* Die Ausgabe sollte wie folgt aussehen
  sudo semanage login -l
  sudo semanage login -l
  Login Name SELinux User MLS/MCS Range Service
  Anmeldename SELinux-Benutzer MLS/ MCS-Bereich Dienst


  __default__ user_u s0-s0 *
  __default__ user_u s0-s0 *
Zeile 1.298: Zeile 1.301:
  root root s0-s15:c0.c1023 *
  root root s0-s15:c0.c1023 *
  staff staff_u s0-s15:c0.c1023 *
  staff staff_u s0-s15:c0.c1023 *
  sysadm staff_u s0-s15:c0.c1023 *
   
sysadm staff_u s0-s15:c0.c1023 *
  system_u system_u s0-s15:c0.c1023 *
  system_u system_u s0-s15:c0.c1023 *
# Define a specific range for user [[john]]
# Definieren Sie einen spezifischen Bereich für den Benutzer [[john]]
  sudo semanage login --modify --range s2:c100 john
  sudo semanage login --modify --range s2:c100 john
# View the mapping between SELinux and Linux users again
# Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an
* Note that the user [[john]] now has a specific MLS range defined
* Beachten Sie, dass für den Benutzer [[john]] nun ein spezifischer MLS-Bereich definiert ist
  sudo semanage login -l
  sudo semanage login -l
  Login Name SELinux User MLS/MCS Range Service
  Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst


  __default__ user_u s0-s0 *
  __default__ user_u s0-s0 *
  john staff_u s2:c100 *
   
john staff_u s2:c100 *
  root root s0-s15:c0.c1023 *
  root root s0-s15:c0.c1023 *
  staff staff_u s0-s15:c0.c1023 *
  staff staff_u s0-s15:c0.c1023 *
Zeile 1.314: Zeile 1.319:
  system_u system_u s0-s15:c0.c1023 *
  system_u system_u s0-s15:c0.c1023 *


# To correct the label on john's home directory if needed, enter the following command
# Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein
  sudo chcon -R -l s2:c100 /home/john
  sudo chcon -R -l s2:c100 /home/john


==== Setting Up Polyinstantiated Directories ====
==== Einrichten von polyinstanziierten Verzeichnissen ====
The [[/tmp]] and [[/var/tmp/]] directories are normally used for temporary storage by all programs, services, and users
Die Verzeichnisse [[/tmp]] und [[/var/tmp/]] werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt
* Such setup, however, makes these directories vulnerable to race condition attacks, or an information leak based on file names
* Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
* SELinux offers a solution in the form of ''polyinstantiated'' directories
* SELinux bietet eine Lösung in Form von ‚‘ polyinstanziierten'' Verzeichnissen
* This effectively means that both [[/tmp]] and [[/var/tmp/]] are instantiated, making them appear private for each user
* Dies bedeutet im Effekt, dass sowohl [[/tmp]] als auch [[/var/tmp/]] instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
* When instantiation of directories is enabled, each user's [[/tmp]] and [[/var/tmp/]] directory is automatically mounted under [[/tmp-inst]] and [[/var/tmp/tmp-inst]]
* Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse [[/tmp]] und [[/var/tmp/]] jedes Benutzers automatisch unter [[/tmp-inst]] und [[/var/tmp/tmp-inst]] eingebunden


Follow these steps to enable polyinstantiation of directories
Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren
; Enabling Polyinstantiation Directories
; Aktivieren der Polyinstanziierung von Verzeichnissen
# Uncomment the last three lines in the [[/etc/security/namespace.conf]] file to enable instantiation of the [[/tmp]], [[/var/tmp/]], and users' home directories
# Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei [[/etc/security/namespace.conf]], um die Instanziierung von [[/tmp]], [[/var/tmp/]] und den Home-Verzeichnissen der Benutzer zu aktivieren
  tail -n 3 /etc/security/namespace.conf
  tail -n 3 /etc/security/namespace.conf
  /tmp /tmp-inst/ level root,adm
  /tmp /tmp-inst/ level root,adm
  /var/tmp /var/tmp/tmp-inst/ level root,adm
  /var/tmp /var/tmp/tmp-inst/ level root, adm
  $HOME $HOME/$USER.inst/ level
  $HOME $HOME/$USER.inst/ level
# Ensure that in the [[/etc/pam.d/login]] file, the [[pam_namespace.so]] module is configured for session
# Stellen Sie sicher, dass in der Datei [[/etc/pam.d/login]] das Modul [[pam_namespace.so]] für die Sitzung konfiguriert ist
  grep namespace /etc/pam.d/login
  grep namespace /etc/pam.d/login
  session required pam_namespace.so
  session required pam_namespace.so
# Reboot your system
# Starten Sie Ihr System neu


=== File Name Transition ===
=== Dateinamenübergang ===
The ''file name transition'' feature allows policy writers to specify the file name when writing policy transition rules
Die Funktion „Dateinamenübergang“ ermöglicht es Richtlinienautoren, den Dateinamen beim Schreiben von Richtlinienübergangsregeln anzugeben
* It is possible to write a rule that states
* Es ist möglich, eine Regel zu schreiben, die besagt
If a process labeled [[A_t]] creates a specified object class in a directory labeled [[B_t]] and the specified object class is named [[objectname]], it gets the label [[C_t]]
Wenn ein Prozess mit der Kennzeichnung [[A_t]] eine bestimmte Objektklasse in einem Verzeichnis mit der Kennzeichnung [[B_t]] erstellt und die bestimmte Objektklasse den Namen [[objectname]] trägt, erhält sie die Kennzeichnung [ [C_t]]
* This mechanism provides more fine-grained control over processes on the system
* Dieser Mechanismus ermöglicht eine feinere Steuerung der Prozesse auf dem System


Without file name transition, there are three possible ways how to label an object
Ohne Dateinamenübergang gibt es drei Möglichkeiten, ein Objekt zu kennzeichnen
* By default, objects inherit labels from parent directories
* Standardmäßig erben Objekte Labels von übergeordneten Verzeichnissen
* For example, if the user creates a file in a directory labeled [[etc_t]], then the file is labeled also [[etc_t]]
* Wenn der Benutzer beispielsweise eine Datei in einem Verzeichnis mit dem Label [[etc_t]] erstellt, erhält die Datei ebenfalls das Label [[etc_t]]
* However, this method is useless when it is desirable to have multiple files within a directory with different labels
* Diese Methode ist jedoch unbrauchbar, wenn mehrere Dateien innerhalb eines Verzeichnisses unterschiedliche Labels haben sollen
* Policy writers can write a rule in policy that states
* Richtlinienautoren können eine Regel in der Richtlinie schreiben, die besagt
If a process with type [[A_t]] creates a specified object class in a directory labeled [[B_t]], the object gets the new [[C_t]] label
Wenn ein Prozess vom Typ [[A_t]] eine bestimmte Objektklasse in einem Verzeichnis mit dem Label [[B_t]] erstellt, erhält das Objekt die neue Kennzeichnung [[C_t]]
* This practice is problematic if a single program creates multiple objects in the same directory where each object requires a separate label
* Diese Vorgehensweise ist problematisch, wenn ein einzelnes Programm mehrere Objekte im selben Verzeichnis erstellt, wobei jedes Objekt eine eigene Kennzeichnung benötigt
* Moreover, these rules provide only partial control, because names of the created objects are not specified
* Darüber hinaus bieten diese Regeln nur eine teilweise Kontrolle, da die Namen der erstellten Objekte nicht angegeben werden
* Certain applications have SELinux awareness that allow such an application to ask the system what the label of a certain path should be
* Bestimmte Anwendungen verfügen über SELinux-Unterstützung, die es einer solchen Anwendung ermöglicht, das System zu fragen, wie die Kennzeichnung eines bestimmten Pfads lauten soll
* These applications then request the kernel to create the object with the required label
* Diese Anwendungen fordern dann den Kernel auf, das Objekt mit der erforderlichen Kennzeichnung zu erstellen
* Examples of applications with SELinux awareness are the '''rpm''' package manager, the '''restorecon''' utility, or the '''udev''' device manager
* Beispiele für Anwendungen mit SELinux-Unterstützung sind der ‚‘'rpm'‚‘ Paketmanager, das ‚‘'restorecon'‚‘ Dienstprogramm oder der ‚‘'udev'‚‘ Gerätemanager
* However, it is not possible to instruct every application that creates files or directories with SELinux awareness
* Es ist jedoch nicht möglich, jede Anwendung, die Dateien oder Verzeichnisse erstellt, mit SELinux-Unterstützung auszustatten
* It is often necessary to relabel objects with the correct label after creating
* Oft ist es notwendig, Objekte nach der Erstellung mit dem korrekten Label neu zu kennzeichnen
* Otherwise, when a confined domain attempts to use the object, AVC messages are returned
* Andernfalls werden AVC-Meldungen zurückgegeben, wenn eine eingeschränkte Domäne versucht, das Objekt zu verwenden


The file name transition feature decreases problems related to incorrect labeling and improves the system to be more secure
Die Funktion zur Dateinamenumwandlung verringert Probleme im Zusammenhang mit falscher Kennzeichnung und verbessert die Sicherheit des Systems
* Policy writers are able to state properly that a certain application can only create a file with a specified name in a specified directory
* Richtlinienautoren können eindeutig festlegen, dass eine bestimmte Anwendung eine Datei mit einem bestimmten Namen nur in einem bestimmten Verzeichnis erstellen darf
* The rules take into account the file name, not the file path
* Die Regeln berücksichtigen den Dateinamen, nicht den Dateipfad
* This is the basename of the file path
* Dies ist der Basisname des Dateipfads
* Note that file name transition uses an exact match done by the [[strcmp()]] function
* Beachten Sie, dass die Dateinamenübergabe eine exakte Übereinstimmung verwendet, die durch die [[strcmp()]]-Funktion durchgeführt wird
* Use of regular expressions or wildcard characters is not considered
* Die Verwendung von regulären Ausdrücken oder Platzhaltern wird nicht berücksichtigt


; Note
; Hinweis
: File paths can vary in the kernel and file name transition does not use the paths to determine labels
: Dateipfade können im Kernel variieren, und die Dateinamenumwandlung verwendet die Pfade nicht zur Bestimmung von Labels
* Consequently, this feature only affects initial file creation and does not fix incorrect labels of already created objects
* Folglich wirkt sich diese Funktion nur auf die anfängliche Dateierstellung aus und behebt keine falschen Labels bereits erstellter Objekte


; Examples of Policy Rules Written with File Name Transition
; Beispiele für mit Dateinamenumwandlung geschriebene Richtlinienregeln
The example below shows a policy rule with file name transition
Das folgende Beispiel zeigt eine Policy-Regel mit Dateinamenumwandlung
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, ".ssh")
filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, .ssh“)


This rule states that if a process with the [[unconfined_t]] type creates the [[~/.ssh/]] directory in a directory labeled [[admin_home_t]], the [[~/.ssh/]] directory gets the label [[ssh_home_t]]
Diese Regel besagt, dass, wenn ein Prozess vom Typ [[unconfined_t]] das Verzeichnis [[~/.ssh/]] in einem Verzeichnis mit der Bezeichnung [[admin_home_t]] erstellt, das Verzeichnis [[~/.ssh/]] die Bezeichnung [[ssh _home_t]]


Similar examples of policy rules written with file name transition are presented below
Ähnliche Beispiele für mit Dateinamenübergängen geschriebene Richtlinienregeln sind unten aufgeführt
  filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, "public_html")
  filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, „public_html“)
  filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, "missfont.log")
  filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, „missfont.log“)
  filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, "nvidia0")
  filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, „nvidia0“)
  filetrans_pattern(puppet_t, etc_t, krb5_conf_t, file, "krb5.conf")
  filetrans_pattern (puppet_t, etc_t, krb5_conf_t, file, „krb5.conf“)


; Note
; Hinweis
:The file name transition feature affects mainly policy writers, but users can notice that instead of file objects almost always created with the default label of the containing directory, some file objects have a different label as specified in policy
:Die Funktion zur Änderung von Dateinamen betrifft hauptsächlich die Verfasser von Richtlinien, aber Benutzer können feststellen, dass einige Dateiobjekte ein anderes Label aufweisen, als in der Richtlinie festgelegt, anstatt wie fast immer mit dem Standard-Label des übergeordneten Verzeichnisses erstellt zu werden


=== Disabling ptrace() ===
=== Deaktivieren von ptrace() ===
The [[ptrace()]] system call allows one process to observe and control the execution of another process and change its memory and registers
Der Systemaufruf [[ptrace()]] ] ermöglicht es einem Prozess, die Ausführung eines anderen Prozesses zu beobachten und zu steuern sowie dessen Speicher und Register zu ändern
* This call is used primarily by developers during debugging, for example when using the [[strace]] utility
* Dieser Aufruf wird in erster Linie von Entwicklern während der Fehlersuche verwendet, beispielsweise bei der Verwendung des Dienstprogramms [[strace]]
* When [[ptrace()]] is not needed, it can be disabled to improve system security
* Wenn [[ptrace()]] nicht benötigt wird, kann es deaktiviert werden, um die Systemsicherheit zu verbessern
* This can be done by enabling the [[deny_ptrace]] Boolean, which denies all processes, even those that are running in [[unconfined_t]] domains, from being able to use [[ptrace()]] on other processes
* Dies kann durch Aktivieren des Booleschen Werts [[deny_ptrace]] erfolgen, der allen Prozessen – auch solchen, die in [[unconfined_t]]-Domänen laufen – die Verwendung von [[ptrace()]] auf andere Prozesse verweigert


The [[deny_ptrace]] Boolean is disabled by default
Der [ Boolesche Variable [[deny_ptrace]] ist standardmäßig deaktiviert
* To enable it, run the [[setsebool -P deny_ptrace on]] command as the root user
* Um sie zu aktivieren, führen Sie als Root-Benutzer den Befehl [[setsebool -P deny_ptrace on]] aus
  sudo setsebool -P deny_ptrace on
  sudo setsebool -P deny_ptrace on


To verify if this Boolean is enabled, use the following command
Um zu überprüfen, ob diese Boolesche Variable aktiviert ist, verwenden Sie den folgenden Befehl
  getsebool deny_ptrace
  getsebool deny_ptrace
  deny_ptrace --> on
   
deny_ptrace --> on


To disable this Boolean, run the [[setsebool -P deny_ptrace off]] command as root
Um diesen Boolean zu deaktivieren, führen Sie den Befehl [[setsebool -P deny_ptrace off]] als Root aus
  sudo setsebool -P deny_ptrace off
  sudo setsebool -P deny_ptrace off


; Note
; Hinweis
: The [[setsebool -P]] command makes persistent changes
: Der Befehl [[setsebool -P]] bewirkt dauerhafte Änderungen
* Do not use the [[-P]] option if you do not want changes to persist across reboots
* Verwenden Sie die Option [[-P]] nicht, wenn Sie nicht möchten, dass die Änderungen über Neustarts hinweg bestehen bleiben


This Boolean influences only packages that are part of Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux
Dieser Boolean-Wert wirkt sich nur auf Pakete aus, die Teil von Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux sind
* Consequently, third-party packages could still use the [[ptrace()]] system call
* Daher könnten Pakete von Drittanbietern weiterhin den Systemaufruf [[ptrace()]] verwenden
* To list all domains that are allowed to use [[ptrace()]], enter the following command
* Um alle Domänen aufzulisten, denen die Verwendung von [[ptrace()]] gestattet ist, geben Sie den folgenden Befehl ein
* Note that the setools-console package provides the [[sesearch]] utility and that the package is not installed by default
* Beachten Sie, dass das Paket setools-console das Dienstprogramm [[sesearch]] bereitstellt und dass das Paket standardmäßig nicht installiert ist


  sudo sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ' ' -f 5
  sudo sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ‚ ‘ -f 5


=== Thumbnail Protection ===
=== Schutz von Miniaturansichten ===
The thumbnail icons can potentially allow an attacker to break into a locked machine using removable media, such as USB devices or CDs
Die Miniaturansichtssymbole können es einem Angreifer potenziell ermöglichen, mithilfe von Wechselmedien wie USB-Geräten oder CDs in einen gesperrten Rechner einzudringen
* When the system detects a removable media, the Nautilus file manager executes the thumbnail driver code to display thumbnail icons in an appropriate file browser even if the machine is locked
* Wenn das System einen Wechseldatenträger erkennt, führt der Dateimanager Nautilus den Code des Miniaturansicht-Treibers aus, um Miniaturansichten in einem entsprechenden Dateibrowser anzuzeigen, selbst wenn der Rechner gesperrt ist
* This behavior is unsafe because if the thumbnail executables were vulnerable, the attacker could use the thumbnail driver code to bypass the lock screen without entering the password
* Dieses Verhalten ist unsicher, da ein Angreifer, falls die ausführbaren Miniaturansicht-Dateien anfällig wären, den Code des Miniaturansicht-Treibers nutzen könnte, um den Sperrbildschirm zu umgehen, ohne das Passwort einzugeben


Therefore, a new SELinux policy is used to prevent such attacks
Daher wird eine neue SELinux-Richtlinie verwendet, um solche Angriffe zu verhindern
* This policy ensures that all thumbnail drivers are locked when the screen is locked
* Diese Richtlinie stellt sicher, dass alle Miniaturansicht-Treiber gesperrt sind, wenn der Bildschirm gesperrt ist
* The thumbnail protection is enabled for both confined users and unconfined users
* Der Miniaturansicht-Schutz ist sowohl für eingeschränkte als auch für uneingeschränkte Benutzer aktiviert


This policy affects the following applications
Diese Richtlinie betrifft die folgenden Anwendungen
* /usr/bin/evince-thumbnailer
* /usr/bin/evince-thumbnailer
* /usr/bin/ffmpegthumbnailer
* /usr/bin/ffmpegthumbnailer
Zeile 1.435: Zeile 1.441:


== Links ==
== Links ==
* [3] To temporarily revert to the default behavior, as the Linux root user, run the [[setsebool httpd_can_network_connect_db off]] command
* [3] Um vorübergehend zum Standardverhalten zurückzukehren, führen Sie als Linux-Root-Benutzer den Befehl [[setsebool httpd_can_network_connect_db off]] aus
** For changes that persist across reboots, run the [[setsebool -P httpd_can_network_connect_db off]] command
** Für Änderungen, die über Neustarts hinweg bestehen bleiben, führen Sie den Befehl [[setsebool -P httpd_can_network_connect_db off]]  
* [4] Files in the [[/etc/selinux/targeted/contexts/files/]] directory define contexts for files and directories
* [4] Dateien im Verzeichnis [[/etc/selinux/targeted/contexts/files/]] definieren Kontexte für Dateien und Verzeichnisse
* Files in this directory are read by the [[restorecon]] and [[setfiles]] utilities to restore files and directories to their default contexts
* Dateien in diesem Verzeichnis werden von den Dienstprogrammen [[restorecon]] und [[setfiles]] gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen
* [5] Morris, James. "Filesystem Labeling in SELinux" http://www.linuxjournal.com/article/7426
* [5] Morris, James. „Filesystem Labeling in SELinux“ http://www.linuxjournal.com/article/7426
* [6] See the matchpathcon(8) manual page for further information about [[matchpathcon]]
* [6] Weitere Informationen zu [[matchpathcon]] finden Sie auf der Handbuchseite matchpathcon(8)


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

Version vom 23. März 2026, 22:59 Uhr

Arbeiten mit SELinux

Die folgenden Abschnitte bieten einen kurzen Überblick über die wichtigsten SELinux-Pakete in Red Hat Enterprise Linux; die Installation und Aktualisierung von Paketen; die verwendeten Protokolldateien; die wichtigste SELinux-Konfigurationsdatei; das Aktivieren und Deaktivieren von SELinux; SELinux-Modi; das Konfigurieren von Booleschen Werten; das vorübergehende und dauerhafte Ändern von Datei- und Verzeichnis-Labels; das Überschreiben von Dateisystem-Labels mit dem Befehl mount; das Einbinden von NFS-Volumes; sowie das Beibehalten von SELinux-Kontexten beim Kopieren und Archivieren von Dateien und Verzeichnissen

SELinux-Pakete

Bei einer vollständigen Installation von Red Hat Enterprise Linux werden die SELinux-Pakete standardmäßig installiert, sofern sie nicht während der Installation manuell ausgeschlossen werden

  • Bei einer Minimalinstallation im Textmodus werden die Pakete policycoreutils-python und policycoreutils-gui standardmäßig nicht installiert
  • Außerdem läuft SELinux standardmäßig SELinux im Enforcing-Modus und die SELinux-Targeted-Policy wird verwendet
  • Die folgenden SELinux-Pakete sind standardmäßig auf Ihrem System installiert
  • policycoreutils stellt Dienstprogramme wie restorecon, secon, setfiles, semodule, load_policy und setsebool für den Betrieb und die Verwaltung von SELinux bereit
  • selinux-policy stellt eine grundlegende Verzeichnisstruktur, die Datei selinux-policy.conf und RPM-Makros bereit
  • selinux-policy -targeted stellt die SELinux-Targeted-Richtlinie bereit
  • libselinux – stellt eine API für SELinux-Anwendungen bereit
  • libselinux-utils stellt die Dienstprogramme avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled und setenforce bereit
  • libselinux-python stellt Python-Bindungen für die Entwicklung von SELinux-Anwendungen bereit

Die folgenden Pakete sind standardmäßig nicht installiert, können aber optional durch Ausführen des Befehls [[yum install ‚‘<package-name>‚‘]] installiert werden

  • selinux-policy-devel stellt Dienstprogramme zum Erstellen einer benutzerdefinierten SELinux-Richtlinie und von Richtlinienmodulen bereit
  • selinux-policy-doc enthält Handbuchseiten, die beschreiben, wie SELinux zusammen mit verschiedenen Diensten konfiguriert wird
  • selinux-policy-mls enthält die MLS-SELinux-Richtlinie (Multi-Level Security)
  • setroubleshoot-server übersetzt Ablehnungsmeldungen, die bei einer Zugriffsverweigerung durch SELinux ausgegeben werden, in detaillierte Beschreibungen, die mit dem ebenfalls in diesem Paket enthaltenen Dienstprogramm sealert angezeigt werden können
  • setools-console stellt die Tresys Technology SETools-Distribution bereit, eine Reihe von Dienstprogrammen und Bibliotheken zur Analyse und Abfrage von Richtlinien, zur Überwachung und Berichterstellung von Audit-Protokollen sowie zur Verwaltung von Dateikontexten
  • Das Paket setools ist ein Metapaket für SETools
  • Das Paket setools-gui stellt die Dienstprogramme apol und seaudit bereit
  • Das Paket setools-console stellt die Befehlszeilen-Dienstprogramme sechecker, sediff, seinfo, sesearch und findcon bereit
  • Beachten Sie, dass die Pakete setools und setools-gui nur verfügbar sind, wenn der Red Hat Network Optional-Kanal aktiviert ist
  • Weitere Informationen finden Sie unter Details zum Abdeckungsumfang
  • mcstrans übersetzt Stufen wie s0-s0:c0.c1023 in eine besser lesbare Form wie SystemLow-SystemHigh
  • policycoreutils-python bietet Dienstprogramme wie semanage, audit2allow, audit2why und chcat zum Bedienen und Verwalten von SELinux
  • policycoreutils-gui stellt system-config-selinux bereit, ein grafisches Dienstprogramm zur Verwaltung von SELinux

Welche Protokolldatei wird verwendet

Unter Red Hat Enterprise Linux sind die Pakete dbus und audit standardmäßig installiert, sofern sie nicht aus der Standard-Paketauswahl entfernt wurden

Wenn der auditd-Daemon läuft, wird standardmäßig eine SELinux-Ablehnungsmeldung wie die folgende in /var/log/audit/audit.log geschrieben

type=AVC msg=audit (1223024155.684:49)

avc

denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file

Außerdem wird eine Meldung ähnlich der folgenden in die Datei /var/log/message geschrieben

7. Mai 18:55:56 localhost setroubleshoot

SELinux verhindert, dass httpd (httpd_t) „getattr“ auf /var/www/html/file1 (samba_share_t) ausführt

  • Für vollständige SELinux-Meldungen

führen Sie sealert -l de7e30d6-5488-466d-a606-92c9f40d316d aus

In Red Hat Enterprise Linux 7 läuft setroubleshootd nicht mehr ständig als Dienst

  • Es wird jedoch weiterhin zur Analyse der AVC-Meldungen verwendet
  • Zwei neue Programme dienen dazu, setroubleshoot bei Bedarf zu starten
  • Das Dienstprogramm sedispatch läuft als Teil des audit-Subsystems
  • Wenn eine AVC-Ablehnungsmeldung zurückgegeben wird, sendet sedispatch eine Nachricht über dbus
  • Diese Nachrichten gehen direkt an setroubleshootd, sofern dieses bereits läuft
  • Läuft es nicht, startet sedispatch es automatisch
  • Das Dienstprogramm seapplet läuft in der System-Symbolleiste und wartet auf DBus-Meldungen von setroubleshootd
  • Es öffnet die Benachrichtigungsblase, in der der Benutzer die AVC-Meldungen einsehen kann
Daemons automatisch starten
  1. Um die Daemons auditd und [ [rsyslog]]-Daemons so zu konfigurieren, dass sie beim Booten automatisch starten, geben Sie als Root-Benutzer die folgenden Befehle ein
sudo systemctl enable auditd.service
sudo systemctl enable rsyslog.service
  1. Um sicherzustellen, dass die Daemons aktiviert sind, geben Sie an der Shell-Eingabeaufforderung die folgenden Befehle ein
systemctl is-enabled auditd
enabled

systemctl is-enabled rsyslog

enabled

Alternativ können Sie den Befehl systemctl status ‚'service-name‘'.service verwenden und in der Befehlsausgabe nach dem Schlüsselwort enabled suchen, zum Beispiel

systemctl status auditd.service | grep enabled
auditd.service – Sicherheitsüberwachungsdienst
Geladen
geladen (/usr/lib/systemd/system/auditd.service; ‚'enabled‘')

Weitere Informationen darüber, wie der systemd-Daemon Systemdienste verwaltet, finden Sie im Kapitel „Verwaltung von Systemdiensten“ im Systemadministratorhandbuch

Hauptkonfigurationsdatei

Die Datei /etc/selinux/config ist die Hauptkonfigurationsdatei von SELinux

  • Sie steuert, ob SELinux aktiviert oder deaktiviert ist und welcher SELinux-Modus sowie welche SELinux-Richtlinie verwendet wird
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=enforcing
# SELINUXTYPE= kann einen dieser beiden Werte annehmen

  1. targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=targeted
[[SELINUX=]]

Die Option [[SELINUX]] legt fest, ob SELinux deaktiviert oder aktiviert ist und in welchem Modus – enforcing oder permissive – es läuft

  • Bei Verwendung von SELINUX=enforcing wird die SELinux-Richtlinie durchgesetzt, und SELinux verweigert den Zugriff auf Grundlage der SELinux-Richtlinienregeln
  • Verweigerungsmeldungen werden protokolliert
  • Bei Verwendung von SELINUX=permissive wird die SELinux-Richtlinie nicht durchgesetzt
  • SELinux verweigert keinen Zugriff, aber Verweigerungen werden für Aktionen protokolliert, die verweigert worden wären, wenn SELinux im Durchsetzungsmodus laufen würde
  • Bei Verwendung von SELINUX=disabled ist SELinux deaktiviert, das SELinux-Modul ist nicht beim Linux-Kernel registriert und es werden nur DAC-Regeln verwendet
[[SELINUXTYPE=]]

Die Option SELINUXTYPE legt die zu verwendende SELinux-Richtlinie fest

  • Die Targeted-Richtlinie ist die Standardrichtlinie
  • Ändern Sie diese Option nur, wenn Sie die MLS-Richtlinie verwenden möchten
  • Informationen zum Aktivieren der MLS-Richtlinie finden Sie im Abschnitt „Aktivieren von MLS in SELinux

Dauerhafte Änderungen an SELinux-Zuständen und -Modi

SELinux kann aktiviert oder deaktiviert werden

  • Wenn aktiviert, hat SEL

inux zwei Modi: „enforcing“ und „permissive“

Verwenden Sie die Befehle getenforce oder sestatus, um zu überprüfen, in welchem Modus SELinux läuft

Der Befehl sestatus gibt den SELinux-Status und die verwendete SELinux-Richtlinie zurück sestatus SELinux-Status

 enabled

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
 enabled
Status von deny_unknown in der Richtlinie
 allowed
Maximale Kernel-Richtlinienversion
 30
Hinweis
Wenn Systeme SELinux im permissiven Modus ausführen, können Benutzer Dateien falsch kennzeichnen
  • Dateien, die erstellt wurden, während SELinux deaktiviert war, werden überhaupt nicht gekennzeichnet
  • Dieses Verhalten verursacht Probleme beim Wechsel in den enforcing-Modus, da Dateien falsch oder gar nicht gekennzeichnet sind
  • Um zu verhindern, dass falsch gekennzeichnete und nicht gekennzeichnete Dateien Probleme verursachen, werden Dateisysteme automatisch neu gekennzeichnet, wenn vom deaktivierten Zustand in den permissiven oder den enforcing-Modus gewechselt wird

SELinux aktivieren

Wenn SELinux aktiviert ist, kann es in einem von zwei Modi ausgeführt werden: enforcing oder permissive

  • Die folgenden Abschnitte zeigen, wie Sie dauerhaft in diese Modi wechseln

Beim Aktivieren von SELinux auf Systemen, auf denen es zuvor deaktiviert war, empfiehlt Red Hat, um Probleme wie das Nicht-Booten des Systems oder Prozessfehler zu vermeiden, dieses Verfahren zu befolgen

  1. Aktivieren Sie SELinux im permissiven Modus
  • Weitere Informationen finden Sie im Abschnitt „Permissiver Modus“
  1. Starten Sie Ihr System neu
  2. Überprüfen Sie, ob SELinux-Ablehnungsmeldungen vorliegen
  • Weitere Informationen finden Sie im Abschnitt „Suchen und Anzeigen von Ablehnungen“
  1. Wenn keine Ablehnungen vorliegen, wechseln Sie in den Durchsetzungsmodus
  • Weitere Informationen finden Sie im Abschnitt „Enforcing-Modus“

Um benutzerdefinierte Anwendungen mit SELinux im Enforcing-Modus auszuführen, wählen Sie eines der folgenden Szenarien

  • Führen Sie Ihre Anwendung in der Domäne unconfined_service_t aus
  • Weitere Informationen finden Sie im Abschnitt „Unconfined-Prozesse
  • Schreiben Sie eine neue Richtlinie für Ihre Anwendung
  • Weitere Informationen finden Sie im Knowledge-Base-Artikel „Writing Custom SELinux Policy“
Permissive-Modus

Wenn SELinux im Permissive-Modus läuft, wird die SELinux-Richtlinie nicht durchgesetzt

  • Das System bleibt betriebsbereit und SELinux verweigert keine Vorgänge, sondern protokolliert lediglich AVC-Meldungen, die dann zur Fehlerbehebung, zum Debugging und zur Verbesserung der SELinux-Richtlinie verwendet werden können
  • In diesem Fall wird jede AVC-Meldung nur einmal protokolliert

Um den Modus dauerhaft auf „permissive“ umzustellen, befolgen Sie die folgenden Schritte

Umstellung auf den permissiven Modus
  1. Bearbeiten Sie die Datei /etc/selinux/config wie folgt
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=‚‘'permissive
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielprozesse werden geschützt,

  1. mls – Multi-Level-Security-Schutz
SELINUXTYPE=targeted
  1. Starten Sie das System neu
sudo reboot
Durchsetzungsmodus

Wenn SELinux im Durchsetzungsmodus läuft, setzt es die SELinux-Richtlinie durch und verweigert den Zugriff auf der Grundlage der SELinux-Richtlinienregeln

  • Unter Red Hat Enterprise Linux ist der Durchsetzungsmodus standardmäßig aktiviert, wenn das System ursprünglich mit SELinux

Wenn SELinux deaktiviert wurde, befolgen Sie die nachstehende Vorgehensweise, um den Modus wieder auf „Enforcing“ umzustellen

Umstellung auf den Enforcing-Modus

Diese Vorgehensweise setzt voraus, dass die Pakete selinux-policy -targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils und policycoreutils-python installiert sind

  • Um zu überprüfen, ob die Pakete installiert sind, verwenden Sie den folgenden Befehl
rpm -q ‚'Paketname‘'
  1. Bearbeiten Sie die Datei /etc/selinux/config wie folgt
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=‚‘'enforcing

  1. SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=targeted
  1. Starten Sie das System neu
sudo reboot

Beim nächsten Systemstart kennzeichnet SELinux alle Dateien und Verzeichnisse im System neu und fügt einen SELinux-Kontext für Dateien und Verzeichnisse hinzu, die erstellt wurden, als SELinux deaktiviert war

Hinweis
Nach dem Wechsel in den Enforcing-Modus kann SELinux einige Aktionen aufgrund falscher oder fehlender SELinux-Richtlinien verweigern

Um anzuzeigen, welche Aktionen SELinux verweigert, geben Sie als Root den folgenden Befehl ein

sudo ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

Alternativ können Sie, sofern das Paket setroubleshoot-server installiert ist, als root den folgenden Befehl eingeben

sudo grep „SELinux is preventing“ /var/log/messages

Falls SELinux bestimmte Aktionen verweigert, finden Sie Informationen zur Fehlerbehebung in Kapitel 11, „Fehlerbehebung“

Vorübergehende Änderungen der Modi werden in Abschnitt „SELinux-Zustände und -Modi“ behandelt

Deaktivieren von SELinux

Wenn SELinux deaktiviert ist, wird die SELinux-Richtlinie überhaupt nicht geladen; sie wird nicht durchgesetzt und AVC-Meldungen werden nicht protokolliert

  • Daher gehen alle in Abschnitt 1.1, „Vorteile des Betriebs von SELinux“, aufgeführten Vorteile des Betriebs von SELinux verloren
Wichtig
Red Hat empfiehlt dringend, den permissiven Modus zu verwenden, anstatt SELinux dauerhaft zu deaktivieren
  • Weitere Informationen zum permissiven Modus finden Sie im Abschnitt „Permissive Mode

Um SELinux dauerhaft zu deaktivieren, gehen Sie wie folgt vor

SELinux deaktivieren
  1. Konfigurieren Sie SELINUX=disabled in der Datei /etc/selinux/config
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=‚‘'disabled
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=targeted
  1. Starten Sie Ihr System neu

Vergewissern Sie sich nach dem Neustart, dass der Befehl getenforce den Wert Disabled zurückgibt

getenforce
Disabled

Ändern der SELinux-Modi beim Systemstart

Beim Systemstart können Sie mehrere Kernel-Parameter setzen, um die Funktionsweise von SELinux zu ändern

enforcing=0

Durch das Setzen dieses Parameters startet das System im permissiven Modus, was bei der Fehlerbehebung nützlich ist

  • Die Verwendung des permissiven Modus ist möglicherweise die einzige Möglichkeit, ein Problem zu erkennen, wenn Ihr Dateisystem zu stark beschädigt ist
  • Außerdem erstellt das System im permissiven Modus weiterhin die Labels korrekt
  • Die in diesem Modus erzeugten AVC-Meldungen können sich von denen im Enforcing-Modus unterscheiden

Im Permissive-Modus wird nur die erste Verweigerung aus einer Reihe gleicher Verweigerungen gemeldet

  • Im Enforcing-Modus hingegen erhalten Sie möglicherweise eine Verweigerung beim Lesen eines Verzeichnisses, woraufhin eine Anwendung stoppt
  • Im permissiven Modus erhalten Sie dieselbe AVC-Meldung, aber die Anwendung liest weiterhin Dateien in dem Verzeichnis, und Sie erhalten zusätzlich für jede Verweigerung eine AVC

selinux=0

Dieser Parameter bewirkt, dass der Kernel keinen Teil der SELinux-Infrastruktur lädt

  • Die Init-Skripte erkennen, dass das System mit dem Parameter selinux=0 gebootet wurde, und schreiben in die Datei /.autorelabel
  • Dies bewirkt, dass das System beim nächsten Start mit aktiviertem SELinux automatisch eine Neukennzeichnung durchführt
Wichtig
Red Hat empfiehlt die Verwendung des Parameters selinux=0 nicht
  • Verwenden Sie zum Debuggen Ihres Systems vorzugsweise den permissiven Modus
autorelabel=1

Dieser Parameter zwingt das System zu einer Neukennzeichnung, ähnlich wie die folgenden Befehle

sudo touch /.autorelabel
sudo reboot

Wenn die Systemkennzeichnung eine große Anzahl von Fehlern enthält, müssen Sie möglicherweise im permissiven Modus booten, damit die automatische Neukennzeichnung erfolgreich ist

Weitere SELinux-bezogene Kernel-Boot-Parameter, wie beispielsweise checkreqprot, finden Sie in der Datei [[/ usr/share/doc/kernel-doc-‚‘<KERNEL_VER>‚‘/Documentation/kernel-parameters.txt]]-Datei

  • Diese Dokumentation wird mit dem Paket kernel-doc installiert
  • Ersetzen Sie die Zeichenfolge ‚‘<KERNEL_VER>‚‘ durch die Versionsnummer des installierten Kernels, zum Beispiel
sudo yum install kernel-doc
less /usr/share/doc/kernel-doc-‚'3.10.0‘' /Documentation/kernel-parameters.txt

Booleane

Booleane ermöglichen es, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen

  • Dies ermöglicht Änderungen, wie z. B. das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu zu laden oder neu zu kompilieren

Auflisten von Booleanen

Um eine Liste der Booleans, eine Erklärung zu deren Bedeutung sowie Angaben dazu, ob sie aktiviert oder deaktiviert sind, zu erhalten, führen Sie den Befehl semanage boolean -l als Linux-Root-Benutzer aus

  • Das folgende Beispiel listet nicht alle Booleans auf, und die Ausgabe wurde der Kürze halber gekürzt

sudo semanage boolean -l SELinux-Boolean Status Standard Beschreibung

smartmon_3ware (aus , aus) Legt fest, ob smartmon... mpd_enable_homedirs (aus, aus) Legt fest, ob mpd...

Hinweis
Um detailliertere Beschreibungen zu erhalten, installieren Sie das Paket selinux-policy-devel

Die Spalte SELinux-Boolean listet die Namen der Booleans auf

  • Die Spalte Beschreibung gibt an, ob die Booleans aktiviert oder deaktiviert sind und welche Funktion sie haben

Der Befehl getsebool -a listet Boolesche Werte auf, unabhängig davon, ob sie aktiviert oder deaktiviert sind, gibt jedoch keine Beschreibung zu jedem einzelnen

  • Das folgende Beispiel listet nicht alle Booleschen Werte auf
getsebool -a
cvs_read_shadow --> off
daemons_dump_core --> on

Führen Sie den Befehl getsebool ‚‘ boolean-name'‚ aus, um nur den Status des Booleschen Werts ‘'boolean-name aufzulisten

getsebool cvs_read_shadow
cvs_read_shadow --> off

Verwenden Sie eine durch Leerzeichen getrennte Liste, um mehrere Boolesche Werte aufzulisten

getsebool cvs_read_shadow daemons_dump_core
cvs_read_shadow --> off
daemons _dump_core --> on

Konfigurieren von Booleschen Werten

Führen Sie das Dienstprogramm setsebool im Format setsebool ‚'boolean_name‘' on/off aus, um Boolesche Werte zu aktivieren oder zu deaktivieren

Das folgende Beispiel zeigt die Konfiguration des Booleschen Werts httpd_can_network_connect_db

Konfigurieren von Booleschen Werten
  1. Standardmäßig ist der Boolesche Wert httpd_can_network_connect_db deaktiviert, wodurch Skripte und Module des Apache-HTTP-Servers daran gehindert werden, eine Verbindung zu Datenbankservern herzustellen
getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> off
  1. Um Skripte und Module des Apache-HTTP-Servers vorübergehend die Verbindung zu Datenbankservern zu ermöglichen, geben Sie als Root den folgenden Befehl ein
sudo setsebool httpd_can_network_connect_db on
  1. Verwenden Sie das Dienstprogramm getsebool, um zu überprüfen, ob der Boolean-Wert aktiviert wurde
getsebool httpd_can_network_connect_db
httpd_can_network_connect_db --> on

Dadurch können Skripte und Module des Apache-HTTP-Servers eine Verbindung zu Datenbankservern herstellen

  1. Diese Änderung bleibt nach einem Neustart nicht erhalten
sudo setsebool -P httpd_can_network_connect_db on

Shell-Autovervollständigung

Es ist möglich, die Shell-Autovervollständigung mit den Dienstprogrammen getsebool, setsebool und semanage zu verwenden

  • Verwenden Sie die Autovervollständigung mit getsebool und [ [setsebool]], um sowohl Befehlszeilenparameter als auch Boolesche Werte zu vervollständigen
  • Um nur die Befehlszeilenparameter aufzulisten, fügen Sie das Bindestrichzeichen („-“) hinter dem Befehlsnamen ein und drücken Sie die Tab-Taste
sudo setsebool -[Tab]
-P

Um einen Booleschen Wert zu vervollständigen, beginnen Sie mit der Eingabe des Booleschen Werts und drücken Sie dann die Tab-Taste

getsebool samba_[Tab]
samba_create_home_dirs samba_export_all_ro samba_run_unconfined
samba_domain_controller samba_export_all_rw samba_share_fusefs
samba_enable_home_dirs samba_portmapper samba_share_nfs

sudo setsebool -P virt_use_[Tab]

virt_use_comm virt_use_nfs virt_use_sanlock
virt_use_execmem virt_use_rawip virt_use_usb
virt_use_fusefs virt_use_samba virt_use_xserver

Das Dienstprogramm semanage wird mit mehreren Befehlszeilenargumenten verwendet, die nacheinander vervollständigt werden

  • Das erste Argument eines semanage-Befehls ist eine Option, die angibt, welcher Teil der SELinux-Richtlinie verwaltet wird
sudo semanage [Tab]
boolean export import login node port
dontaudit fcontext interface module permissive user

Anschließend folgen ein oder mehrere Befehlszeilenparameter

sudo semanage fcontext -[Tab]
-a -D --equal --help -m -o
--add --delete -f -l --modify -S
-C --deleteall --ftype --list -n -t
-d -e -h --locallist --noheading --type

Geben Sie schließlich den Namen eines bestimmten SELinux-Eintrags ein, z. B. einen Booleschen Wert, einen SELinux-Benutzer, eine Domäne oder einen anderen

  • Beginnen Sie mit der Eingabe des Eintrags und drücken Sie Tab
sudo semanage fcontext -a -t samba<tab>

samba_etc_t samba_secrets_t

sambagui_exec_t samba_share_t
samba_initrc_exec_t samba_unconfined_script_exec_t
samba_log_t samba_unit_file_t
samba_net_exec_t

Befehls- -Parameter können in einem Befehl verkettet werden

sudo semanage port -a -t http_port_t -p tcp 81

SELinux-Kontexte – Dateien kennzeichnen

Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien so gekennzeichnet, dass sie sicherheitsrelevante Informationen darstellen

  • Diese Informationen werden als SELinux-Kontext bezeichnet
  • Bei Dateien kann dies mit dem Befehl ls -Z angezeigt werden

ls -Z file1

-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1

In diesem Beispiel stellt SELinux einen Benutzer (unconfined_u), eine Rolle (object_r), einen Typ (user_home_t) und eine Stufe (s0) bereit

  • Diese Informationen werden verwendet, um Entscheidungen zur Zugriffskontrolle zu treffen
  • Auf DAC-Systemen wird der Zugriff auf Basis der Linux-Benutzer- und Gruppen-IDs kontrolliert
  • SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft
  • SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuvor verweigern
Hinweis
Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse
  • Wenn Sie beispielsweise eine neue Datei im Verzeichnis /etc erstellen, das mit dem Typ etc_t gekennzeichnet ist, erbt die neue Datei denselben Typ
ls -dZ - /etc

drwxr-xr-x root root system_u:object_r:‚'etc_t‘':s0 /etc

sudo touch /etc/file1
sudo ls -lZ /etc/file1
-rw-r--r-- root root unconfined_u:object_r:‚'etc_t‘':s0 /etc/file1

SELinux bietet mehrere Befehle zur Verwaltung der Dateisystem-Kennzeichnung, wie beispielsweise chcon, semanage fcontext, restorecon und matchpathcon

Temporäre Änderungen: chcon

Der Befehl chcon ändert den SELinux-Kontext für Dateien

  • Änderungen, die mit dem Befehl chcon vorgenommen werden, bleiben jedoch nicht bestehen, wenn das Dateisystem neu gekennzeichnet wird oder der Befehl restorecon
  • Die SELinux-Richtlinie legt fest, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern dürfen
  • Bei der Verwendung von chcon geben Benutzer den gesamten oder einen Teil des SELinux-Kontexts an, der geändert werden soll
  • Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert

Kurzreferenz

  • Führen Sie den Befehl chcon -t ‚'type‘' ‚'file-name‘' , um den Dateityp zu ändern, wobei ‚'type‘' ein SELinux-Typ ist, wie z. B. [ [httpd_sys_content_t]], und ‚'file-name‘' ein Datei- oder Verzeichnisname ist
chcon -t httpd_sys_content_t ‚'file-name‘'
chcon -R -t httpd_sys_content_t ‚'Verzeichnisname‘'
Ändern des Typs einer Datei oder eines Verzeichnisses

Das folgende Verfahren zeigt, wie der Typ und keine anderen Attribute des SELinux-Kontexts geändert werden

  • Das Beispiel in diesem Abschnitt funktioniert genauso für Verzeichnisse, beispielsweise wenn file1 ein Verzeichnis wäre. # Wechseln Sie in Ihr Home-Verzeichnis
  1. Erstellen Sie eine neue Datei und zeigen Sie deren SELinux-Kontext an
touch file1
ls -Z file1
-rw -rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1

In diesem Beispiel umfasst der SELinux-Kontext für file1 den SELinux-Benutzer unconfined_u, die Rolle object_r, den Typ user_home_t und die s0 Ebene

  • Eine Beschreibung der einzelnen Bestandteile des SELinux-Kontexts finden Sie in Kapitel 2, ‚'SELinux-Kontexte‘'
  1. Geben Sie den folgenden Befehl ein, um den Typ in samba_share_t zu ändern
  • Die Option -t ändert nur den Typ
  • Zeigen Sie anschließend die Änderung an
chcon -t samba_share_t file1
ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
  1. Verwenden Sie den folgenden Befehl, um den SELinux-Kontext für die Datei file1 wiederherzustellen
  • Verwenden Sie die Option -v, um die Änderungen anzuzeigen
restorecon -v file1
restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0

In diesem Beispiel wird der vorherige Typ, samba_share_t, auf den korrekten Typ, user_home_t, zurückgesetzt

  • Bei Verwendung der Targeted-Richtlinie (der Standard-SELinux-Richtlinie in Red Hat Enterprise Linux) liest der Befehl restorecon die Dateien im Verzeichnis /etc/selinux/targeted/contexts/files/ aus, um festzustellen, welchen SELinux-Kontext die Dateien haben sollten
Ändern der Typen eines Verzeichnisses und seines Inhalts

Das folgende Beispiel zeigt, wie ein neues Verzeichnis erstellt und der Dateityp des Verzeichnisses sowie dessen Inhalt auf einen vom Apache-HTTP-Server verwendeten Typ geändert wird

  • Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server ein anderes Dokumentstammverzeichnis (anstelle von /var/www/html/) verwendet
  1. Erstellen Sie als Root-Benutzer ein neues [ [web/]]-Verzeichnis und anschließend 3 leere Dateien (file1, file2 und file3) in diesem Verzeichnis
  • Das web/-Verzeichnis und die darin enthaltenen Dateien sind mit dem Typ default_t gekennzeichnet
sudo mkdir /web

sudo touch /web/file{1,2,3}

sudo ls -dZ /web
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
sudo ls -lZ /web

-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1

-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2

-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3

  1. Geben Sie als root den folgenden Befehl ein, um den Typ des Verzeichnisses web/ (und dessen Inhalt) in httpd_sys_content_t zu ändern
sudo chcon -R -t httpd_sys_content_t /web/
sudo ls -dZ /web/
drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/

sudo ls -lZ /web/

-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw-r--r-- root root unconfined_u:object_r: httpd_sys_content_t:s0 file3
  1. Um die Standard-SELinux-Kontexte wiederherzustellen, verwenden Sie das Dienstprogramm restorecon als root
sudo restorecon -R -v /web/
restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0

restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0

restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t: s0
restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0

Weitere Informationen zu chcon finden Sie auf der chcon(1)-Manpage

Hinweis
Typen-Enforcement ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird
  • In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden

Dauerhafte Änderungen: semanage fcontext

Der Befehl semanage fcontext wird verwendet, um den SELinux-Kontext von Dateien zu ändern

  • Um die Kontexte neu erstellter Dateien und Verzeichnisse anzuzeigen, geben Sie als root den folgenden Befehl ein
sudo semanage fcontext -C -l

Änderungen, die mit semanage fcontext vorgenommen wurden, werden von den folgenden Dienstprogrammen verwendet

  • Das Dienstprogramm setfiles wird verwendet, wenn ein Dateisystem neu gekennzeichnet wird, und das Dienstprogramm restorecon stellt die Standard-SELinux-Kontexte wieder her
  • Das bedeutet, dass durch semanage fcontext vorgenommene Änderungen dauerhaft sind, selbst wenn das Dateisystem neu gekennzeichnet wird
  • Die SELinux-Richtlinie steuert, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern können

Kurzübersicht

Um SELinux-Kontextänderungen vorzunehmen, die eine Neukennzeichnung des Dateisystems überdauern

  1. Geben Sie den folgenden Befehl ein und achten Sie darauf, den vollständigen Pfad zur Datei oder zum Verzeichnis zu verwenden
sudo semanage fcontext -a ‚'Optionen‘' ‚'Dateiname‘ ‚|‘'Verzeichnisname'‚
  1. Verwenden Sie das Dienstprogramm restorecon, um die Kontextänderungen anzuwenden
sudo restorecon -v ‘'Dateiname'‚|‘'Verzeichnisname'‚
Verwendung regulärer Ausdrücke mit semanage fcontext

Damit der Befehl semanage fcontext korrekt funktioniert, können Sie entweder einen vollqualifizierten Pfad oder ‘ Perl-kompatible reguläre Ausdrücke ()‚‘'

  • Das einzige verwendete ‚'PCRE‘'-Flag ist PCRE2_DOTALL, wodurch der Platzhalter [[.]] mit allem übereinstimmt, einschließlich einer neuen Zeile
  • Zeichenfolgen, die Pfade darstellen, werden als Bytes verarbeitet, was bedeutet, dass Nicht-ASCII-Zeichen nicht durch einen einzelnen Platzhalter abgeglichen werden

Beachten Sie, dass mit semanage fcontext angegebene Dateikontextdefinitionen in umgekehrter Reihenfolge zu ihrer Definition ausgewertet werden der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet

  • Lokale Dateikontextänderungen, die in file_contexts.local gespeichert sind, haben eine höhere Priorität als die in Policy-Modulen angegebenen
  • Das bedeutet, dass immer dann, wenn in file_contexts.local gefunden wird, werden keine anderen Dateikontextdefinitionen berücksichtigt
Wichtig
Mit dem Befehl semanage fcontext festgelegte Dateikontextdefinitionen überschreiben effektiv alle anderen Dateikontextdefinitionen
  • Alle regulären Ausdrücke sollten daher so spezifisch wie möglich sein, um unbeabsichtigte Auswirkungen auf andere Teile des Dateisystems zu vermeiden

Weitere Informationen zu den in Dateikontextdefinitionen verwendeten regulären Ausdrücken und den geltenden Flags finden Sie in der semanage-fcontext(8) Man-Seite

Ändern des Typs einer Datei oder eines Verzeichnisses

Das folgende Beispiel zeigt, wie der Typ einer Datei geändert wird, ohne andere Attribute des SELinux-Kontexts zu beeinflussen

  • Dieses Beispiel funktioniert genauso für Verzeichnisse, beispielsweise wenn file1 ein Verzeichnis wäre. # Erstellen Sie als Root-Benutzer eine neue Datei im Verzeichnis /etc
  • Standardmäßig werden neu erstellte Dateien in /etc mit dem Typ etc_t gekennzeichnet
sudo touch /etc/file1

ls -Z /etc/file1

-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1

Um Informationen zu einem Verzeichnis aufzulisten, verwenden Sie den folgenden Befehl

ls -dZ ‚'Verzeichnisname‘'
  1. Geben Sie als root den folgenden Befehl ein, um den Typ von file1 in samba_share_t zu ändern
  • Die Option -a fügt einen neuen Eintrag hinzu, und die Option -t definiert einen Typ (samba_share_t)
  • Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; file1 ist weiterhin mit dem Typ etc_t gekennzeichnet
sudo semanage fcontext -a -t samba_share_t /etc/file1
sudo ls -Z /etc/file1
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
semanage fcontext -C -l

/etc/file1 unconfined_u:object_r:samba_share_t:s0

  1. Verwenden Sie als root das Dienstprogramm restorecon, um den Typ zu ändern
sudo restorecon -v /etc/file1
restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
Ändern der Typen eines Verzeichnisses und seines Inhalts

Das folgende Beispiel zeigt, wie ein neues Verzeichnis erstellt und der Dateityp des Verzeichnisses sowie dessen Inhalt auf einen vom Apache-HTTP-Server verwendeten Typ geändert wird

  • Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server anstelle von [[/var/www/html/] einen anderen Dokumentenstamm verwendet ]
  1. Erstellen Sie als Root-Benutzer ein neues Verzeichnis web/ und anschließend 3 leere Dateien (file1, file2 und file3) in diesem Verzeichnis
  • Das Verzeichnis web/ und die darin enthaltenen Dateien sind mit dem Typ default_t gekennzeichnet
sudo mkdir /web
sudo touch /web/file{1,2,3}
sudo ls -dZ /web
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
sudo ls -lZ /web
-rw-r--r-- root root unconfined_ u:object_r:default_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
  1. Geben Sie als root den folgenden Befehl ein, um den Typ des web/-Verzeichnisses und der darin enthaltenen Dateien in httpd_sys_content_t zu ändern
  • Die Option -a fügt einen neuen Eintrag hinzu, und die Option -t definiert einen Typ (httpd_sys_content_t)
  • Der reguläre Ausdruck [[„/web(/.*)?“] ] bewirkt, dass semanage die Änderungen auf web/ sowie die darin enthaltenen Dateien anwendet
  • Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; web/ und die darin enthaltenen Dateien sind weiterhin mit dem Typ default_t gekennzeichnet
sudo semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“
ls -dZ /web

drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web

ls -lZ /web
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2

-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3

Der Befehl semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“ fügt den folgenden Eintrag zu /etc/selinux/targeted/contexts/files/file_contexts.local hinzu

/web(/.*)? system_u:object_r:httpd_sys_content_t:s0
  1. Verwenden Sie als root das Dienstprogramm restorecon, um den Typ von web/ sowie aller darin enthaltenen Dateien

[httpd_sys_content_t]]

sudo restorecon -R -v /web
restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r: httpd_sys_content_t:s0
restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0

restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0

Beachten Sie, dass neu erstellte Dateien und Verzeichnisse standardmäßig den SELinux-Typ ihrer übergeordneten Verzeichnisse erben

Einen hinzugefügten Kontext löschen

Das folgende Beispiel zeigt das Hinzufügen und Entfernen eines SELinux-Kontexts

  • Wenn der Kontext Teil eines regulären Ausdrucks ist, zum Beispiel /web(/.*)?, setzen Sie den regulären Ausdruck in Anführungszeichen
sudo semanage fcontext -d „/web(/.*)?“
  1. Um den Kontext zu entfernen, geben Sie als Root den folgenden Befehl ein, wobei ‚'Dateiname‘'|‚'Verzeichnisname‘' der erste Teil in file_contexts.local ist
sudo semanage fcontext -d ‚'Dateiname‘'|‚'Verzeichnisname‘'

Das Folgende ist ein Beispiel für einen Kontext in file_contexts. local

/test system_u:object_r:httpd_sys_content_t:s0

wobei der erste Teil test ist

  • Um zu verhindern, dass das Verzeichnis test/ nach dem Ausführen von restorecon oder nach einer Neulabelung des Dateisystems mit dem httpd_sys_content_t-Label versehen wird, geben Sie als Root den folgenden Befehl ein, um den Kontext aus file_contexts.local zu löschen
sudo semanage fcontext -d /test
  1. Verwenden Sie als root das Dienstprogramm restorecon, um den Standard-SELinux-Kontext wiederherzustellen

Weitere Informationen zu semanage finden Sie in den Handbuchseiten semanage(8) und semanage-fcontext(8)

Wichtig
Wenn Sie den SELinux-Kontext mit semanage fcontext -a ändern, verwenden Sie den vollständigen Pfad zur Datei oder zum Verzeichnis, um zu vermeiden, dass Dateien nach einer Neukennzeichnung des Dateisystems oder nach dem Ausführen des Befehls [

[restorecon]]-Befehls

Wie der Dateikontext bestimmt wird

Die Bestimmung des Dateikontexts basiert auf Dateikontextdefinitionen, die in der Systemsicherheitsrichtlinie (den .fc-Dateien) festgelegt sind

Systemadministratoren können Dateikontextdefinitionen mit dem Befehl semanage fcontext anpassen

Wenn ein Kennzeichnungsprogramm wie matchpathcon oder restorecon die richtige Kennzeichnung für einen bestimmten Pfad ermittelt, sucht es zunächst nach lokalen Änderungen (file_contexts.local)

  • Findet das Dienstprogramm kein passendes Muster, durchsucht es die Datei file_contexts.homedirs und schließlich die Datei file_contexts
  • Sobald jedoch eine Übereinstimmung für einen bestimmten Dateipfad gefunden wird, endet die Suche, sucht das Dienstprogramm nicht nach weiteren Dateikontext-Definitionen
  • Das bedeutet, dass Dateikontexte, die sich auf das Home-Verzeichnis beziehen, eine höhere Priorität haben als die übrigen, und lokale Anpassungen überschreiben die Systemrichtlinie

Dateikontext-Definitionen, die durch die Systemrichtlinie festgelegt sind (Inhalt der Dateien file_contexts.homedirs und file_contexts), werden vor der Auswertung nach der Länge des Stamms (Präfix des Pfads vor etwaigen Platzhaltern) sortiert

  • Das bedeutet, dass der spezifischste Pfad ausgewählt wird
  • Mit semanage fcontext festgelegte Dateikontextdefinitionen werden jedoch in umgekehrter Reihenfolge zu ihrer Definition ausgewertet

der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet

Weitere Informationen zu

  • der Änderung des Dateikontexts mit chcon finden Sie im Abschnitt „Temporäre Änderungen

chcon“

  • das Ändern und Hinzufügen einer Dateikontextdefinition mit semanage fcontext finden Sie im Abschnitt „ Dauerhafte Änderungen

semanage fcontext“

Die Typen file_t und default_t

Bei Verwendung eines Dateisystems, das erweiterte Attribute (EA) ist der Typ file_t der Standardtyp einer Datei, der noch kein EA-Wert zugewiesen wurde

  • Dieser Typ wird nur für diesen Zweck verwendet und existiert auf korrekt gelabelten Dateisystemen nicht, da alle Dateien auf einem System, auf dem SELinux läuft, einen korrekten SELinux-Kontext haben sollten und der Typ file_t niemals in der Dateikontext-Konfiguration verwendet wird[4]

Der Typ default_t wird für Dateien verwendet, die keinem Muster in der file-context-Konfiguration entsprechen, damit solche Dateien von Dateien unterschieden werden können, die keinen Kontext auf der Festplatte haben, und im Allgemeinen für eingeschränkte Domänen unzugänglich bleiben

  • Wenn Sie beispielsweise ein neues Verzeichnis der obersten Ebene erstellen, wie z. B. mydirectory/, kann dieses Verzeichnis mit dem Typ default_t gekennzeichnet werden
  • Wenn Dienste Zugriff auf dieses Verzeichnis benötigen, müssen Sie die Dateikontext-Konfiguration für diesen Speicherort aktualisieren
  • Siehe Abschnitt „Persistente Änderungen

semanage fcontext“ für Details zum Hinzufügen eines Kontexts zur Dateikontext-Konfiguration

Einbinden von Dateisystemen

Standardmäßig wird beim Einbinden eines Dateisystems, das erweiterte Attribute unterstützt, der Sicherheitskontext für jede Datei aus dem ‚'security.selinux‘'

erweiterten Attribut der Datei

  • Dateien in Dateisystemen, die keine erweiterten Attribute unterstützen, wird ein einziger Standard-Sicherheitskontext aus der Richtlinienkonfiguration zugewiesen, basierend auf dem Dateisystemtyp

Verwenden Sie den Befehl mount -o context, um vorhandene erweiterte Attribute zu überschreiben oder einen anderen Standardkontext für Dateisysteme festzulegen, die keine erweiterten Attribute unterstützen

  • Dies ist nützlich, wenn Sie nicht darauf vertrauen, dass ein Dateisystem die richtigen Attribute bereitstellt, beispielsweise bei Wechselmedien, die in mehreren Systemen verwendet werden
  • Der Befehl mount -o context kann auch verwendet werden, um die Kennzeichnung für Dateisysteme zu unterstützen, die keine erweiterten Attribute unterstützen, wie z. B. File Allocation Table (FAT) oder NFS-Volumes
  • Der mit der Option context angegebene Kontext wird nicht auf die Festplatte geschrieben

die ursprünglichen Kontexte bleiben erhalten und sind beim Einbinden ohne context sichtbar, sofern das Dateisystem ursprünglich über erweiterte Attribute verfügte

Weitere Informationen zur Dateisystem-Kennzeichnung finden Sie in James Morris' Artikel „Filesystem Labeling in SELinux“ http://www.linuxjournal.com/article/7426

Kontext-Mounts

Um ein Dateisystem mit dem angegebenen Kontext zu mounten – wobei vorhandene Kontexte überschrieben werden, falls vorhanden – oder um einen anderen Standardkontext für ein Dateisystem festzulegen, das keine erweiterten Attribute unterstützt, verwenden Sie als Root-Benutzer den mount -o context=‚'SELinux_user:role:type:level‘' beim Einhängen des gewünschten Dateisystems

  • Kontextänderungen werden nicht auf die Festplatte geschrieben
  • Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist
  • In gängigen Richtlinien verwendet dieser Standardkontext den Typ nfs_t
  • Ohne zusätzliche Mount-Optionen kann dies die Freigabe von NFS-Volumes über andere Dienste, wie den Apache-HTTP-Server, verhindern
  • Das folgende Beispiel mountet ein NFS-Volume so, dass es über den Apache-HTTP-Server freigegeben werden kann
sudo mount server:/export /local/mount/point -o \ context="system_u:object_r:httpd_sys_content_t:s0"

Neu erstellte Dateien und Verzeichnisse auf diesem Dateisystem scheinen den mit -o context angegebenen SELinux-Kontext zu haben

  • Da diese Änderungen jedoch nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Mountvorgängen nicht erhalten
  • Daher muss diese Option bei jedem Mountvorgang mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten
  • Informationen dazu, wie man Kontext-Mounts dauerhaft macht, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“

Die Typen-Durchsetzung ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird

  • In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden. Verwenden Sie daher beim Überschreiben des SELinux-Kontexts mit -o context den SELinux-Benutzer system_u und die Rolle object_r und konzentrieren Sie sich auf den Typ
  • Wenn Sie nicht die MLS-Policy oder die Multi-Kategorie-Sicherheit verwenden, verwenden Sie die s0-Ebene
Hinweis

Wenn ein Dateisystem mit einer context-Option eingebunden wird, sind Kontextänderungen durch Benutzer und Prozesse untersagt

Ändern des Standardkontexts

Wie in Abschnitt 4.8, „Die Typen file_t und default_t“ , wird auf Dateisystemen, die erweiterte Attribute unterstützen, beim Zugriff auf eine Datei, der auf der Festplatte ein SELinux-Kontext fehlt, so behandelt, als hätte sie einen Standardkontext, wie er durch die SELinux-Richtlinie definiert ist

  • In gängigen Richtlinien verwendet dieser Standardkontext den Typ file_t
  • Wenn ein anderer Standardkontext verwendet werden soll, mounten Sie das Dateisystem mit der Option defcontext

Das folgende Beispiel mountet ein neu erstelltes Dateisystem auf [[/ dev/sda2]] in das neu erstellte Verzeichnis test/ ein

sudo mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"

In diesem Beispiel

  • definiert die Option defcontext, dass system_u:object_r:samba_share_t:s0 „der Standard-Sicherheitskontext für nicht gekennzeichnete Dateien“ ist[5]
  • wird das Stammverzeichnis (test/) des Dateisystems nach dem Einbinden so behandelt, als wäre es mit dem durch defcontext angegebenen Kontext gekennzeichnet (diese Kennzeichnung wird nicht auf der Festplatte gespeichert)
  • Dies wirkt sich auf die Kennzeichnung von Dateien aus, die unter test/ erstellt werden

neue Dateien erben den Typ samba_share_t, und diese Kennzeichnungen werden auf der Festplatte gespeichert

  • Dateien, die unter test/ erstellt wurden, während das Dateisystem mit der Option defcontext eingebunden war, behalten ihre Kennzeichnungen

Einbinden eines NFS-Volumes

Standardmäßig werden NFS-Einbindungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist

  • In gängigen Richtlinien verwendet dieser Standardkontext den Typ nfs_t
  • Je nach Richtlinienkonfiguration können Dienste wie der Apache-HTTP-Server und MariaDB möglicherweise keine Dateien lesen, die mit dem Typ nfs_t gekennzeichnet sind
  • Dies kann verhindern, dass Dateisysteme, die mit diesem Typ gekennzeichnet sind, eingebunden und anschließend von anderen Diensten gelesen oder exportiert werden

Wenn Sie ein NFS-Volume mounten und dieses Dateisystem mit einem anderen Dienst lesen oder exportieren möchten, verwenden Sie beim Mounten die Option context, um den Typ nfs_t zu überschreiben

  • Verwenden Sie die folgende context-Option, um NFS-Volumes so einzuhängen, dass sie über den Apache-HTTP-Server freigegeben werden können
sudo mount server:/export /local/mount/point -o context="system_u:object_r:httpd_sys_content_t:s0"

Da diese Änderungen nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Einhängevorgängen nicht erhalten

  • Daher muss diese Option bei jedem Einbinden mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten
  • Informationen dazu, wie Kontext-Mounts dauerhaft gemacht werden können, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“

Als Alternative zum Einbinden von Dateisystemen mit context-Optionen können Boolesche Werte aktiviert werden, um Diensten den Zugriff auf Dateisysteme zu ermöglichen, die mit dem Typ [ [nfs_t]] gekennzeichnet sind

  • Siehe Teil II, „Verwaltung eingeschränkter Dienste“ für Anweisungen zur Konfiguration von Booleans, um Diensten den Zugriff auf den Typ nfs_t zu ermöglichen

Mehrere NFS-Mounts

Wenn mehrere Mounts aus demselben NFS-Export durchgeführt werden und versucht wird, den SELinux-Kontext jedes Mounts durch einen anderen Kontext zu überschreiben, führen nachfolgende Mount-Befehle zu Fehlern

  • Im folgenden Beispiel verfügt der NFS-Server über einen einzigen Export, export/, der zwei Unterverzeichnisse enthält: [ [web/]] und database/
  • Die folgenden Befehle versuchen zwei Mounts von einem einzigen NFS-Export und versuchen, den Kontext für jeden einzelnen zu überschreiben
sudo mount server:/export/web /local/web -o context="system_u:object_r:httpd_sys_content_t:s0"
sudo mount server:/export/database /local/database -o context="system_u:object_r:mysqld_db_t:s0"

Der zweite Mount-Befehl schlägt fehl, und Folgendes wird in /var/log/messages protokolliert kernel SELinux mount invalid

  • Gleicher Superblock, unterschiedliche Sicherheitseinstellungen für (dev 0:15, Typ nfs)

Um mehrere Mounts aus einem einzigen NFS-Export durchzuführen, wobei jeder Mount einen anderen Kontext hat, verwenden Sie die -o nosharecache,context-Optionen

  • Das folgende Beispiel mountet mehrere Mounts aus einem einzigen NFS-Export, wobei jeder Mount einen anderen Kontext hat (wodurch ein einzelner Dienst auf jeden einzelnen zugreifen kann)
sudo mount server:/export/web /local/web -o nosharecache,context=„system_u:object_r:httpd_sys_content_t:s0“
sudo mount server:/export/database /local/database -o \ nosharecache,context=„system_u:object_r:mysqld_db_t:s0“

In diesem Beispiel wird server:/export/web lokal im Verzeichnis /local/web/ eingebunden, wobei alle Dateien mit dem Typ httpd_sys_content_t gekennzeichnet sind, was dem Apache-HTTP-Server Zugriff gewährt. server:/export/database wird lokal in /local/database/ eingebunden, wobei alle Dateien mit dem Typ [ [mysqld_db_t]] gekennzeichnet, was MariaDB den Zugriff ermöglicht

  • Diese Typänderungen werden nicht auf die Festplatte geschrieben
Wichtig

Die Option nosharecache ermöglicht es Ihnen, dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, beispielsweise /export/web/ mehrfach

  • Hängen Sie dasselbe Unterverzeichnis eines Exports nicht mehrfach mit unterschiedlichen Kontexten ein, da dies zu einer überlappenden Einbindung führt, bei der Dateien unter zwei verschiedenen Kontexten zugänglich sind

Kontext-Einbindungen dauerhaft machen

Um Kontext-Mounts über erneutes Mounten und Neustarts hinweg persistent zu machen, fügen Sie Einträge für die Dateisysteme in die Datei /etc/fstab oder eine Automounter-Zuordnung ein und verwenden Sie den erforderlichen Kontext als Mount-Option

Das folgende Beispiel fügt einen Eintrag in /etc/fstab für eine NFS-Kontext-Einbindung hinzu

server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0

SELinux-Labels beibehalten

Diese Abschnitte beschreiben, was mit SELinux-Kontexten geschieht, wenn Dateien und Verzeichnisse kopiert, verschieben und archivieren von Dateien und Verzeichnissen

  • Außerdem wird erklärt, wie Kontexte beim Kopieren und Archivieren beibehalten werden können

Kopieren von Dateien und Verzeichnissen

Wenn eine Datei oder ein Verzeichnis kopiert wird, wird eine neue Datei oder ein neues Verzeichnis erstellt, falls diese noch nicht existieren

  • Der Kontext dieser neuen Datei oder dieses neuen Verzeichnisses basiert auf den Standard-Labeling-Regeln und nicht auf dem Kontext der ursprünglichen Datei oder des ursprünglichen Verzeichnisses, es sei denn, es wurden Optionen verwendet, um den ursprünglichen Kontext beizubehalten

Beispielsweise werden Dateien, die in Benutzer-Home-Verzeichnissen erstellt werden, mit dem Typ user_home_t gekennzeichnet

touch file1
$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1

Wenn eine solche Datei in ein anderes Verzeichnis kopiert wird, beispielsweise /etc, wird die neue Datei gemäß den Standard-Kennzeichnungsregeln für /etc erstellt

  • Das Kopieren einer Datei ohne zusätzliche Optionen bewahrt möglicherweise den ursprünglichen Kontext nicht
ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
sudo cp file1 /etc/

$ ls -Z /etc/file1

-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1

Wenn file1 nach /etc kopiert wird und /etc/file1 nicht existiert, wird /etc/file1 als neue Datei erstellt

  • Wie im obigen Beispiel gezeigt, wird /etc/file1 gemäß den Standard-Labeling-Regeln mit dem Typ etc_t gekennzeichnet

Wenn eine Datei über eine bereits vorhandene Datei kopiert wird, bleibt der Kontext der vorhandenen Datei erhalten, es sei denn, der Benutzer hat cp-Optionen angegeben, um den Kontext der Originaldatei zu erhalten, wie z. B. --preserve=context

  • Die SELinux-Richtlinie kann verhindern, dass Kontexte beim Kopieren erhalten bleiben
Kopieren ohne Beibehaltung von SELinux-Kontexten

Dieses Verfahren zeigt, dass beim Kopieren einer Datei mit dem Befehl cp, und keine Optionen angegeben werden, der Typ vom Zielverzeichnis, dem übergeordneten Verzeichnis, übernommen wird

  1. Erstellen einer Datei im Home-Verzeichnis eines Benutzers
touch file1
ls -Z file1

-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1

  1. Das Verzeichnis /var/www/html/ ist mit dem Typ httpd_sys_content_t gekennzeichnet, wie der folgende Befehl zeigt
ls -dZ /var/www/html/drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
  1. Wenn file1 nach /var/www/html/ kopiert wird, erbt sie den Typ httpd_sys_content_t
sudo cp file1 /var/www/html/
ls -Z /var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
Beibehaltung von SELinux-Kontexten beim Kopieren

Dieses Verfahren zeigt, wie man die Option --preserve=context verwendet, um Kontexte beim Kopieren beizubehalten. # Erstellen einer Datei im Home-Verzeichnis eines Benutzers

touch file1
ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Das Verzeichnis /var/www/html/ ist mit dem Typ httpd_sys_content_t gekennzeichnet, wie der folgende Befehl zeigt ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/# Durch die Verwendung der Option --preserve=context bleiben die SELinux-Kontexte bei Kopiervorgängen erhalten* Wie unten gezeigt, wurde der Typ user_home_t von file1 beibehalten, als die Datei nach /var/www/html/ kopiert wurde sudo cp --preserve=context file1 /var/www/html/ ls -Z / var/www/html/file1-rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1; Kopieren und Ändern des KontextsDieses Verfahren zeigt, wie man die Option --context verwendet, um den Kontext der Zielkopie zu ändern* Das folgende Beispiel wird im Home-Verzeichnis des Benutzers ausgeführt# Erstellen Sie eine Datei im Home-Verzeichnis eines Benutzers* Die Datei ist mit dem Typ user_home_t gekennzeichnet touch file1 ls -Z file1-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1# Verwenden Sie die Option --context, um den SELinux-Kontext zu definieren cp --context=system_u:object_r:samba_share_t:s0 file1 file2# Ohne --context würde file2 mit dem unconfined_u:object_r:user_home_t-Kontext gekennzeichnet ls -Z file1 file2-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1-rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2; Kopieren einer Datei über eine vorhandene DateiDieses Verfahren zeigt, dass beim Kopieren einer Datei über eine vorhandene Datei der Kontext der vorhandenen Datei beibehalten wird, sofern keine Option zur Beibehaltung von Kontexten verwendet wird. # Erstellen Sie als root eine neue Datei, file1, im Verzeichnis /etc* Wie unten gezeigt, wird die Datei mit dem Typ etc_t gekennzeichnet sudo touch /etc/file1 ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1# Erstellen Sie eine weitere Datei, file2, im Verzeichnis [ [/tmp]]-Verzeichnis* Wie unten gezeigt, wird die Datei mit dem Typ user_tmp_t gekennzeichnet touch /tmp/file2 ls -Z /tmp/file2-rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2
  1. file1 mit file2 überschreiben
sudo cp /tmp/file2 /etc/file1
  1. Nach dem Kopieren zeigt der folgende Befehl, dass file1 mit dem Typ etc_t gekennzeichnet ist, nicht mit dem Typ user_tmp_t aus /tmp/file2, der /etc/file1 ersetzt hat
ls -Z /etc/file1-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
Wichtig

Kopieren Sie Dateien und Verzeichnisse, anstatt sie zu verschieben

  • Dies trägt dazu bei, dass sie mit den richtigen SELinux-Kontexten gekennzeichnet werden
  • Falsche SELinux-Kontexte können verhindern, dass Prozesse auf solche Dateien und Verzeichnisse zugreifen

Verschieben von Dateien und Verzeichnissen

Dateien und Verzeichnisse behalten ihren aktuellen SELinux-Kontext bei, wenn sie verschoben werden

  • In vielen Fällen ist dieser für den Zielort, an den sie verschoben werden, falsch
  • Das folgende Beispiel zeigt das Verschieben einer Datei aus dem Home-Verzeichnis eines Benutzers in das Verzeichnis /var/www/html/, das vom Apache-HTTP-Server verwendet wird
  • Da die Datei verschoben wird, erbt sie nicht den richtigen SELinux-Kontext
Verschieben von Dateien und Verzeichnissen
  1. Wechseln Sie in Ihr Home-Verzeichnis und erstellen Sie dort eine Datei
touch file1
ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
  1. Geben Sie den folgenden Befehl ein, um den SELinux-Kontext des Verzeichnisses /var/www/html/ anzuzeigen
ls -dZ /var/www/html/
drwxr-xr-x root root system_u:object_r:httpd _sys_content_t:s0 /var/www/html/

Standardmäßig ist /var/www/html/ mit dem Typ httpd_sys_content_t gekennzeichnet

  • Dateien und Verzeichnisse, die unter /var/www/html/ erstellt werden, erben diesen Typ und sind somit mit diesem Typ gekennzeichnet
  1. Verschieben Sie als root file1 nach /var/www/html/
  • Da diese Datei verschoben wird, behält sie ihren aktuellen Typ user_home_t
sudo mv file1 /var/www/html/

sudo ls -Z /var/www/html/file1

-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1

Standardmäßig kann der Apache-HTTP-Server keine Dateien lesen, die mit dem Typ user_home_t ] gekennzeichnet sind

  • Wenn alle Dateien, aus denen eine Webseite besteht, mit dem Typ user_home_t gekennzeichnet sind oder einem anderen Typ, den der Apache-HTTP-Server nicht lesen kann, wird der Zugriff verweigert, wenn versucht wird, über Webbrowser wie ‚‘'Mozilla Firefox'‚‘
Wichtig

Das Verschieben von Dateien und Verzeichnissen mit dem Befehl mv kann zu einem falschen SELinux-Kontext führen, wodurch Prozesse wie der Apache-HTTP-Server und Samba daran gehindert werden, auf solche Dateien und Verzeichnisse zuzugreifen

Überprüfen des Standard-SELinux-Kontexts

Verwenden Sie das Dienstprogramm matchpathcon, um zu überprüfen, ob Dateien und Verzeichnisse den richtigen SELinux-Kontext haben

  • Dieses Dienstprogramm fragt die Systemrichtlinie ab und gibt dann den mit dem Dateipfad verbundenen Standard-Sicherheitskontext aus.[6] Das folgende Beispiel zeigt, wie man mit matchpathcon überprüft, ob Dateien im Verzeichnis /var/www/html/ korrekt gekennzeichnet sind
Überprüfen des Standard-SELinux-Kontexts mit matchpathcon'‚‘
  1. Erstellen Sie als Root-Benutzer drei Dateien (file1, file2 und file3) im Verzeichnis /var/www/html/
sudo touch /var/www/html/file{1,2,3}

sudo ls -Z /var/www/html/

-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw-r--r-- root root unconfined_u: object_r:httpd_sys_content_t:s0 file3
  1. Ändern Sie als root den Typ von file1 in samba_share_t
  • Beachten Sie, dass der Apache-HTTP-Server keine Dateien oder Verzeichnisse lesen kann, die mit dem Typ samba_share_t ] gekennzeichnet sind
sudo chcon -t samba_share_t /var/www/html/file1
  1. Die Option -V von matchpathcon vergleicht den aktuellen SELinux-Kontext mit dem korrekten Standardkontext in der SELinux-Richtlinie
  • Geben Sie den folgenden Befehl ein, um alle Dateien im Verzeichnis /var/www/html/ zu überprüfen
matchpathcon -V /var/www/html/ *
/var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
/var/www/html/file2 verifiziert
/var/www/html/file3 verifiziert

Die folgende Ausgabe des Befehls matchpathcon erklärt, dass file1 mit dem Typ samba_share_t gekennzeichnet ist, aber mit dem Typ httpd_sys_content_t gekennzeichnet sein sollte

/var/www/html/file1 hat den Kontext unconfined_u:object_r:samba_share_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein

Um das Label-Problem zu beheben und dem Apache-HTTP-Server als root Zugriff auf file1 zu gewähren, verwenden Sie das Dienstprogramm restorecon

sudo restorecon -v /var/www/ html/file1
restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t: s0

Dateien mit tar archivieren

Das Dienstprogramm tar behält standardmäßig keine erweiterten Attribute bei

  • Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
  • Verwenden Sie den Befehl tar --selinux, um Archive zu erstellen, die Kontexte beibehalten, und um Dateien aus den Archiven wiederherzustellen
  • Wenn ein tar Archiv Dateien ohne erweiterte Attribute enthält oder wenn Sie möchten, dass die erweiterten Attribute den Systemstandardwerten entsprechen, verwenden Sie das Dienstprogramm restorecon
tar -xvf ‚'archive.tar‘' | restorecon -f -

Beachten Sie, dass Sie je nach Verzeichnis möglicherweise Root-Rechte benötigen, um das [ [restorecon]]

Das folgende Beispiel zeigt, wie ein tar-Archiv erstellt wird, das SELinux-Kontexte beibehält

Erstellen eines tar-Archivs
  1. Wechseln Sie in das Verzeichnis /var/www/html/ und zeigen Sie dessen SELinux-Kontext an
cd /var/www/html/

ls -dZ /var/www/html/

drwxr-xr-x
  • root root system_u:object_r:httpd_sys_content_t:s0
  1. Erstellen Sie als Root drei Dateien (file1, [ [file2] und file3) im Verzeichnis /var/www/html/

html]# touch file{1,2,3}

ls -Z /var/www/html/

-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1

-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw -r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
  1. Geben Sie als root den folgenden Befehl ein, um ein tar-Archiv mit dem Namen test.tar zu erstellen
  • Verwenden Sie die Option --selinux, um den SELinux-Kontext beizubehalten
sudo tar --selinux -cf test.tar file{1,2,3}
  1. Erstellen Sie als root ein neues Verzeichnis namens test/ und gewähren Sie anschließend allen Benutzern vollen Zugriff darauf
sudo mkdir /test
sudo chmod 777 /test/
  1. Kopieren Sie die Datei test.tar in test/
cp /var/www/html/test.tar /test/
  1. Wechseln Sie in das Verzeichnis test/
  • Geben Sie in diesem Verzeichnis den folgenden Befehl ein, um das tar-Archiv zu entpacken
  • Geben Sie die Option --selinux erneut an, da sonst der SELinux-Kontext auf default_t geändert wird
cd /test/
tar --selinux -xvf test.tar
  1. SELinux-Kontexte anzeigen
test]$ ls -lZ /test/
-rw -r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t: s0 file3
-rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.tar
  1. Wenn das Verzeichnis test/ nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
sudo rm -ri /test/

Weitere Informationen zu tar, wie beispielsweise die Option - -xattrs, die alle erweiterten Attribute beibehält

Dateien mit star archivieren

Das Dienstprogramm star behält standardmäßig keine erweiterten Attribute bei

  • Da SELinux-Kontexte in erweiterten Attributen gespeichert sind, können Kontexte beim Archivieren von Dateien verloren gehen
  • Verwenden Sie den Befehl star -xattr -H=exustar, um Archive zu erstellen, die Kontexte beibehalten
  • Das star-Paket ist standardmäßig nicht installiert
  • Um star zu installieren, führen Sie als Root-Benutzer den Befehl yum install star aus

Das folgende Beispiel zeigt die Erstellung eines star-Archivs, das SELinux-Kontexte beibehält

Erstellen eines [ [star]]-Archiv
  1. Erstellen Sie als Root drei Dateien (file1, file2 und file3) im Verzeichnis /var/www/html/
sudo touch /var/www/html/file{1,2,3}
sudo ls -Z / var/www/html/
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2

-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3

  1. Wechseln Sie in das Verzeichnis /var/www/html/
  • Geben Sie in diesem Verzeichnis als root den folgenden Befehl ein, um ein star-Archiv mit dem Namen test.star zu erstellen
cd /var/www/html
html]# star -xattr -H=exustar -c -f=test.star file{1,2,3}
star

1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 k)

  1. Erstellen Sie als Root ein neues Verzeichnis namens test/ und gewähren Sie allen Benutzern vollständigen Zugriff darauf
sudo mkdir /test
sudo chmod 777 /test/
  1. Geben Sie den folgenden Befehl ein, um die Datei test.star in test/ zu kopieren
cp /var/www/html/test.star /test/
  1. Wechseln Sie in das Verzeichnis test/
  • Sobald Sie sich in diesem Verzeichnis befinden, geben Sie den folgenden Befehl ein, um das star-Archiv zu extrahieren
cd /test/
test]$ star -x -f=test.star
star

1 Blöcke + 0 Bytes (insgesamt 10240 Bytes = 10,00 kB)

  1. Zeigen Sie die SELinux-Kontexte an
  • Der Typ httpd_sys_content_t wurde beibehalten und nicht in [ [default_t] geändert worden wäre, was geschehen wäre, wenn die Option -xattr -H=exustar nicht verwendet worden wäre
ls -lZ /test/
-rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r --r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3
-rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.star
  1. Wenn das Verzeichnis test/ Verzeichnis nicht mehr benötigt wird, geben Sie als root den folgenden Befehl ein, um es sowie alle darin enthaltenen Dateien zu entfernen
sudo rm -ri /test/
  1. Wenn star nicht mehr benötigt wird, entfernen Sie das Paket als root
sudo yum remove star

Weitere Informationen zu star finden Sie auf der Handbuchseite star(1)

Tools zur Informationsbeschaffung

Die unten aufgeführten Dienstprogramme sind Befehlszeilentools, die gut formatierte Informationen liefern, wie beispielsweise Statistiken zum Access Vector Cache oder die Anzahl der Klassen, Typen oder Booleschen Werte

avcstat

Dieser Befehl liefert eine kurze Ausgabe der Access Vector Cache-Statistiken seit dem Systemstart

  • Sie können die Statistiken in Echtzeit verfolgen, indem Sie ein Zeitintervall in Sekunden angeben
  • Dies liefert aktualisierte Statistiken seit der ersten Ausgabe
  • Die verwendete Statistikdatei ist /sys/fs/selinux/avc/cache_stats, und Sie können mit der Option [ [-f /Pfad/zur/Datei]]
sudo avcstat
Lookups Hits Misses Allocs Reclaims Frees
47517410 47504630 12780 12780 12176 12275

seinfo

Dieses Dienstprogramm ist nützlich, um die Aufschlüsselung einer Richtlinie zu beschreiben, wie z. B. die Anzahl der Klassen, Typen, Booleschen Werte, Zulassungsregeln und andere. seinfo ist ein Kommandozeilen-Dienstprogramm, das eine policy.conf-Datei, eine binäre Richtliniendatei, eine modulare Liste von Richtlinienpaketen oder eine Richtlinienlistendatei als Eingabe verwendet

  • Sie müssen das Paket setools-console installiert haben, um das Dienstprogramm seinfo nutzen

Die Ausgabe von seinfo variiert zwischen Binär- und Quelldateien

  • Beispielsweise verwendet die Richtlinienquelldatei die Klammern [[{ }]] , um mehrere Regelelemente in einer einzigen Zeile zu gruppieren
  • Ein ähnlicher Effekt tritt bei Attributen auf, bei denen sich ein einzelnes Attribut in einen oder mehrere Typen auflöst
  • Da diese aufgelöst werden und in der binären Richtlinien-Datei nicht mehr relevant sind, haben sie in den Suchergebnissen den Rückgabewert Null
  • Die Anzahl der Regeln steigt jedoch erheblich an, da jede ehemals einzeilige Regel, die Klammern nun aus mehreren einzelnen Zeilen besteht

Einige Elemente sind in der binären Richtlinie nicht vorhanden

  • Beispielsweise werden neverallow-Regeln nur während der Kompilierung der Richtlinie überprüft, nicht zur Laufzeit, und anfängliche Sicherheitskennungen (SIDs) sind nicht Teil der binären Richtlinie, da sie erforderlich sind, bevor die Richtlinie beim Booten vom Kernel geladen wird

sudo seinfo

Statistiken zur Richtliniendatei /sys/fs/selinux/policy Richtlinienversion & Typ v.28 (binär, mls)

Klassen 77 Berechtigungen 229 Sensitivitäten 1 Kategorien 1024 Typen 3001 Attribute 244 Benutzer 9 Rollen 13 Boolesche Werte 158 Cond

  • Ausdrücke

193

Zulassen

262796 Niemals zulassen 0

Audit zulassen

44 Kein Audit 156710

Typ_trans

10760 Typ_change 38

Typ_member

44 Rolle zulassen 20

Rolle_trans

237 Bereich_trans 2546

Einschränkungen 62 Validatetrans 0 Anfängliche SIDs 27 Fs_use 22 Genfscon 82 Portcon 373 Netifcon 0 Nodecon 0 Permissives 22 Polcap 2

Das Dienstprogramm seinfo kann auch die Anzahl der Typen mit dem Attribut „domain“ auflisten und so eine Schätzung der Anzahl verschiedener eingeschränkter Prozesse liefern

sudo seinfo -adomain -x | wc -l

550

Nicht alle Domänentypen sind eingeschränkt

  • Um die Anzahl der nicht eingeschränkten Domänen anzuzeigen, verwenden Sie das Attribut unconfined_domain
sudo seinfo -aunconfined_domain_type -x | wc -l
52

Permissive Domänen können mit der Option --permissive gezählt werden

sudo seinfo --permissive -x | wc -l
31

Entfernen Sie den zusätzlichen [ [ wc -l]] aus den obigen Befehlen, um die vollständigen Listen anzuzeigen

sesearch

Sie können das Dienstprogramm sesearch verwenden, um nach einer bestimmten Regel in der Richtlinie zu suchen

  • Es ist möglich, entweder die Quelldateien der Richtlinie oder die Binärdatei zu durchsuchen
  • Zum Beispiel
sesearch --role_allow -t httpd_sys_content_t
20 Regeln für die Zulassung von Rollen gefunden
allow system_r sysadm_r;
allow sysadm_r system_r;
allow sysadm_r staff_r;
allow sysadm_r user_r;
allow system_r git_shell_r;
allow system_r guest_r;
allow logadm_r system _r;
allow system_r logadm_r;
allow system_r nx_server_r;
allow system_r staff_r;
allow staff_r logadm_r;
allow staff_r sysadm_r;
allow staff_r unconfined_r;

erlaube staff_r webadm_r;

erlaube unconfined_r system_r;
erlaube system_r unconfined_r;
erlaube system_r user_r;
erlaube webadm_r system_r;
erlaube system_r webadm_r;
erlaube system_r xguest_r;

Das Dienstprogramm sesearch kann die Anzahl der ‚'allow‘'-Regeln anzeigen

sudo sesearch --allow | wc -l
262798

Und die Anzahl der ‚'dontaudit‘'-Regeln

sudo sesearch --dontaudit | wc -l
156712

Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen

Der Speicher für SELinux-Module in /etc/selinux/ ermöglicht die Verwendung einer Priorität für SELinux-Module

  • Geben Sie den folgenden Befehl als Root ein, um zwei Modulverzeichnisse mit unterschiedlicher Priorität anzuzeigen
sudo ls /etc/selinux/targeted/active/ module
100 400 disabled

Während die Standardpriorität des Dienstprogramms semodule 400 beträgt, liegt die Priorität in selinux-policy-Paketen bei 100, sodass die meisten installierten SELinux-Module die Priorität 100 haben

Sie können ein vorhandenes Modul durch ein modifiziertes Modul mit demselben Namen und einer höheren Priorität überschreiben

  • Wenn mehrere Module mit demselben Namen und unterschiedlichen Prioritäten vorhanden sind, wird beim Erstellen der Richtlinie nur das Modul mit der höchsten Priorität verwendet
Verwendung von SELinux-Richtlinienmodulen – Priorität

Erstellen Sie ein neues Modul mit geändertem Dateikontext

  • Installieren Sie das Modul mit dem Befehl semodule -i und setzen Sie die Priorität des Moduls auf 400
  • Im folgenden Beispiel verwenden wir sandbox.pp
sudo semodule -X 400 -i sandbox.pp
sudo semodule --list-modules=full | grep sandbox
400 sandbox pp
100 sandbox pp

Um zum Standardmodul zurückzukehren, geben Sie als Root den Befehl semodule -r ein

sudo semodule -X 400 -r sandbox

libsemanage.semanage_direct_remove_key Das Sandbox-Modul mit der Priorität 100 ist nun aktiv

Deaktivieren eines System-Policy-Moduls

Um ein System-Policy-Modul zu deaktivieren, geben Sie als Root den folgenden Befehl ein semodule -d ‚'MODULE_NAME‘'

Warnung

Wenn Sie ein System-Policy-Modul mit dem Befehl semodule -r entfernen, wird es vom Speichersystem gelöscht und kann nicht erneut geladen werden

  • Um unnötige Neuinstallationen des selinux -policy-targeted-Pakets zur Wiederherstellung aller Systemrichtlinien-Module, verwenden Sie stattdessen den Befehl semodule -d

Multi-Level Security (MLS)

Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt

  • Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
  • Sowohl Subjekte als auch Objekte sind mit einer Sicherheitsstufe gekennzeichnet, die die Sicherheitsfreigabe eines Subjekts oder die Klassifizierung eines Objekts angibt
  • Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt

Abbildung „Sicherheitsfreigabestufen“ zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen

  • Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen
  • Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen
Abbildung Sicherheitsfreigabestufen

Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“ zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft, und verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen

  • Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften

„no read up“ und „no write down“

Abbildung Zulässige Datenflüsse unter Verwendung von MLS

MLS und Systemberechtigungen

MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert

  • Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
  • Es ist wichtig zu beachten, dass die MLS-Richtlinien von SELinux „nach“ den DAC-Regeln überprüft werden
  • Eine höhere Sicherheitsfreigabe gewährt nicht automatisch die Berechtigung, willkürlich im Dateisystem zu stöbern

Benutzer mit Freigaben der höchsten Stufe erhalten in mehrstufigen Systemen nicht automatisch Administratorrechte

  • Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen

Aktivieren von MLS in SELinux

Hinweis

Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft

Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren

Aktivieren der SELinux-MLS-Richtlinie
  1. Installieren Sie das Paket selinux-policy-mls
sudo yum install selinux-policy-mls
  1. Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
  • Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
  • Um dies zu verhindern, konfigurieren Sie SELINUX=permissive in der Datei /etc/selinux/config
  • Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie SELINUXTYPE=mls konfigurieren
  • Ihre Konfigurationsdatei sollte wie folgt aussehen
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen

SELINUX=permissive

# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=mls
# Stellen Sie sicher, dass SELinux im permissiven Modus läuft
sudo setenforce 0
getenforce
Permissive
  1. Verwenden Sie das Skript fixfiles, um die Datei /.autorelabel mit der Option -F zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
sudo fixfiles -F onboot
  1. Starten Sie Ihr System neu
  • Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
  • Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
      • Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
*** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
*** Größe des Dateisystems und der Geschwindigkeit der Festplatten
***********

Jedes * (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden

  • Im obigen Beispiel stehen elf *-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
  • Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
  • Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
  • Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
  1. Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
  • Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
  • Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
  • Siehe Kapitel Fehlerbehebung für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat
sudo grep „SELinux is preventing“ /var/log/messages
  1. Wenn die Datei /var/log/messages keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie SELINUX=enforcing in der Datei /etc/selinux/config
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing - Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive - SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled - Es wird keine SELinux-Richtlinie geladen
SELINUX=enforcing
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted - Zielgerichtete Prozesse werden geschützt,
# mls - Multi-Level-Security-Schutz
SELINUXTYPE=mls
  1. Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
getenforce
Durchsetzung

und die MLS-Richtlinie ist aktiviert

sudo sestatus |grep mls
Richtlinie aus der Konfigurationsdatei

mls

Einen Benutzer mit einem bestimmten MLS-Bereich erstellen

Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen

Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
  1. Fügen Sie einen neuen Linux-Benutzer mit dem useradd und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall staff_u)
sudo useradd -Z staff_u john
  1. Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu
Eingabeaufforderung sudo passwd john
  1. Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen
  • Die Ausgabe sollte wie folgt aussehen
sudo semanage login -l
Anmeldename SELinux-Benutzer MLS/ MCS-Bereich Dienst
__default__ user_u s0-s0 *
john staff_u s0-s15:c0.c1023 *
root root s0-s15:c0.c1023 *
staff staff_u s0-s15:c0.c1023 *

sysadm staff_u s0-s15:c0.c1023 *

system_u system_u s0-s15:c0.c1023 *
  1. Definieren Sie einen spezifischen Bereich für den Benutzer john
sudo semanage login --modify --range s2:c100 john
  1. Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an
  • Beachten Sie, dass für den Benutzer john nun ein spezifischer MLS-Bereich definiert ist
sudo semanage login -l
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst
__default__ user_u s0-s0 *

john staff_u s2:c100 *

root root s0-s15:c0.c1023 *
staff staff_u s0-s15:c0.c1023 *
sysadm staff_u s0-s15:c0.c1023 *
system_u system_u s0-s15:c0.c1023 *
  1. Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein
sudo chcon -R -l s2:c100 /home/john

Einrichten von polyinstanziierten Verzeichnissen

Die Verzeichnisse /tmp und /var/tmp/ werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt

  • Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
  • SELinux bietet eine Lösung in Form von ‚‘ polyinstanziierten Verzeichnissen
  • Dies bedeutet im Effekt, dass sowohl /tmp als auch /var/tmp/ instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
  • Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse /tmp und /var/tmp/ jedes Benutzers automatisch unter /tmp-inst und /var/tmp/tmp-inst eingebunden

Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren

Aktivieren der Polyinstanziierung von Verzeichnissen
  1. Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei /etc/security/namespace.conf, um die Instanziierung von /tmp, /var/tmp/ und den Home-Verzeichnissen der Benutzer zu aktivieren
tail -n 3 /etc/security/namespace.conf
/tmp /tmp-inst/ level root,adm
/var/tmp /var/tmp/tmp-inst/ level root, adm
$HOME $HOME/$USER.inst/ level
  1. Stellen Sie sicher, dass in der Datei /etc/pam.d/login das Modul pam_namespace.so für die Sitzung konfiguriert ist
grep namespace /etc/pam.d/login
session required pam_namespace.so
  1. Starten Sie Ihr System neu

Dateinamenübergang

Die Funktion „Dateinamenübergang“ ermöglicht es Richtlinienautoren, den Dateinamen beim Schreiben von Richtlinienübergangsregeln anzugeben

  • Es ist möglich, eine Regel zu schreiben, die besagt

Wenn ein Prozess mit der Kennzeichnung A_t eine bestimmte Objektklasse in einem Verzeichnis mit der Kennzeichnung B_t erstellt und die bestimmte Objektklasse den Namen objectname trägt, erhält sie die Kennzeichnung [ [C_t]]

  • Dieser Mechanismus ermöglicht eine feinere Steuerung der Prozesse auf dem System

Ohne Dateinamenübergang gibt es drei Möglichkeiten, ein Objekt zu kennzeichnen

  • Standardmäßig erben Objekte Labels von übergeordneten Verzeichnissen
  • Wenn der Benutzer beispielsweise eine Datei in einem Verzeichnis mit dem Label etc_t erstellt, erhält die Datei ebenfalls das Label etc_t
  • Diese Methode ist jedoch unbrauchbar, wenn mehrere Dateien innerhalb eines Verzeichnisses unterschiedliche Labels haben sollen
  • Richtlinienautoren können eine Regel in der Richtlinie schreiben, die besagt

Wenn ein Prozess vom Typ A_t eine bestimmte Objektklasse in einem Verzeichnis mit dem Label B_t erstellt, erhält das Objekt die neue Kennzeichnung C_t

  • Diese Vorgehensweise ist problematisch, wenn ein einzelnes Programm mehrere Objekte im selben Verzeichnis erstellt, wobei jedes Objekt eine eigene Kennzeichnung benötigt
  • Darüber hinaus bieten diese Regeln nur eine teilweise Kontrolle, da die Namen der erstellten Objekte nicht angegeben werden
  • Bestimmte Anwendungen verfügen über SELinux-Unterstützung, die es einer solchen Anwendung ermöglicht, das System zu fragen, wie die Kennzeichnung eines bestimmten Pfads lauten soll
  • Diese Anwendungen fordern dann den Kernel auf, das Objekt mit der erforderlichen Kennzeichnung zu erstellen
  • Beispiele für Anwendungen mit SELinux-Unterstützung sind der ‚‘'rpm'‚‘ Paketmanager, das ‚‘'restorecon'‚‘ Dienstprogramm oder der ‚‘'udev'‚‘ Gerätemanager
  • Es ist jedoch nicht möglich, jede Anwendung, die Dateien oder Verzeichnisse erstellt, mit SELinux-Unterstützung auszustatten
  • Oft ist es notwendig, Objekte nach der Erstellung mit dem korrekten Label neu zu kennzeichnen
  • Andernfalls werden AVC-Meldungen zurückgegeben, wenn eine eingeschränkte Domäne versucht, das Objekt zu verwenden

Die Funktion zur Dateinamenumwandlung verringert Probleme im Zusammenhang mit falscher Kennzeichnung und verbessert die Sicherheit des Systems

  • Richtlinienautoren können eindeutig festlegen, dass eine bestimmte Anwendung eine Datei mit einem bestimmten Namen nur in einem bestimmten Verzeichnis erstellen darf
  • Die Regeln berücksichtigen den Dateinamen, nicht den Dateipfad
  • Dies ist der Basisname des Dateipfads
  • Beachten Sie, dass die Dateinamenübergabe eine exakte Übereinstimmung verwendet, die durch die strcmp()-Funktion durchgeführt wird
  • Die Verwendung von regulären Ausdrücken oder Platzhaltern wird nicht berücksichtigt
Hinweis
Dateipfade können im Kernel variieren, und die Dateinamenumwandlung verwendet die Pfade nicht zur Bestimmung von Labels
  • Folglich wirkt sich diese Funktion nur auf die anfängliche Dateierstellung aus und behebt keine falschen Labels bereits erstellter Objekte
Beispiele für mit Dateinamenumwandlung geschriebene Richtlinienregeln

Das folgende Beispiel zeigt eine Policy-Regel mit Dateinamenumwandlung filetrans_pattern(unconfined_t, admin_home_t, ssh_home_t, dir, „.ssh“)

Diese Regel besagt, dass, wenn ein Prozess vom Typ unconfined_t das Verzeichnis ~/.ssh/ in einem Verzeichnis mit der Bezeichnung admin_home_t erstellt, das Verzeichnis ~/.ssh/ die Bezeichnung ssh _home_t

Ähnliche Beispiele für mit Dateinamenübergängen geschriebene Richtlinienregeln sind unten aufgeführt

filetrans_pattern(staff_t, user_home_dir_t, httpd_user_content_t, dir, „public_html“)
filetrans_pattern(thumb_t, user_home_dir_t, thumb_home_t, file, „missfont.log“)
filetrans_pattern(kernel_t, device_t, xserver_misc_device_t, chr_file, „nvidia0“)
filetrans_pattern (puppet_t, etc_t, krb5_conf_t, file, „krb5.conf“)
Hinweis
Die Funktion zur Änderung von Dateinamen betrifft hauptsächlich die Verfasser von Richtlinien, aber Benutzer können feststellen, dass einige Dateiobjekte ein anderes Label aufweisen, als in der Richtlinie festgelegt, anstatt wie fast immer mit dem Standard-Label des übergeordneten Verzeichnisses erstellt zu werden

Deaktivieren von ptrace()

Der Systemaufruf ptrace() ] ermöglicht es einem Prozess, die Ausführung eines anderen Prozesses zu beobachten und zu steuern sowie dessen Speicher und Register zu ändern

  • Dieser Aufruf wird in erster Linie von Entwicklern während der Fehlersuche verwendet, beispielsweise bei der Verwendung des Dienstprogramms strace
  • Wenn ptrace() nicht benötigt wird, kann es deaktiviert werden, um die Systemsicherheit zu verbessern
  • Dies kann durch Aktivieren des Booleschen Werts deny_ptrace erfolgen, der allen Prozessen – auch solchen, die in unconfined_t-Domänen laufen – die Verwendung von ptrace() auf andere Prozesse verweigert

Der [ Boolesche Variable deny_ptrace ist standardmäßig deaktiviert

sudo setsebool -P deny_ptrace on

Um zu überprüfen, ob diese Boolesche Variable aktiviert ist, verwenden Sie den folgenden Befehl

getsebool deny_ptrace

deny_ptrace --> on

Um diesen Boolean zu deaktivieren, führen Sie den Befehl setsebool -P deny_ptrace off als Root aus

sudo setsebool -P deny_ptrace off
Hinweis
Der Befehl setsebool -P bewirkt dauerhafte Änderungen
  • Verwenden Sie die Option -P nicht, wenn Sie nicht möchten, dass die Änderungen über Neustarts hinweg bestehen bleiben

Dieser Boolean-Wert wirkt sich nur auf Pakete aus, die Teil von Red Hat Enterprise Linux sind

  • Daher könnten Pakete von Drittanbietern weiterhin den Systemaufruf ptrace() verwenden
  • Um alle Domänen aufzulisten, denen die Verwendung von ptrace() gestattet ist, geben Sie den folgenden Befehl ein
  • Beachten Sie, dass das Paket setools-console das Dienstprogramm sesearch bereitstellt und dass das Paket standardmäßig nicht installiert ist
sudo sesearch -A -p ptrace,sys_ptrace -C | grep -v deny_ptrace | cut -d ‚ ‘ -f 5

Schutz von Miniaturansichten

Die Miniaturansichtssymbole können es einem Angreifer potenziell ermöglichen, mithilfe von Wechselmedien wie USB-Geräten oder CDs in einen gesperrten Rechner einzudringen

  • Wenn das System einen Wechseldatenträger erkennt, führt der Dateimanager Nautilus den Code des Miniaturansicht-Treibers aus, um Miniaturansichten in einem entsprechenden Dateibrowser anzuzeigen, selbst wenn der Rechner gesperrt ist
  • Dieses Verhalten ist unsicher, da ein Angreifer, falls die ausführbaren Miniaturansicht-Dateien anfällig wären, den Code des Miniaturansicht-Treibers nutzen könnte, um den Sperrbildschirm zu umgehen, ohne das Passwort einzugeben

Daher wird eine neue SELinux-Richtlinie verwendet, um solche Angriffe zu verhindern

  • Diese Richtlinie stellt sicher, dass alle Miniaturansicht-Treiber gesperrt sind, wenn der Bildschirm gesperrt ist
  • Der Miniaturansicht-Schutz ist sowohl für eingeschränkte als auch für uneingeschränkte Benutzer aktiviert

Diese Richtlinie betrifft die folgenden Anwendungen

  • /usr/bin/evince-thumbnailer
  • /usr/bin/ffmpegthumbnailer
  • /usr/bin/gnome-exe-thumbnailer.sh
  • /usr/bin/gnome-nds-thumbnailer
  • /usr/bin/gnome-xcf-thumbnailer
  • /usr/bin/gsf-office-thumbnailer
  • /usr/bin/raw-thumbnailer
  • /usr/bin/shotwell-video-thumbnailer
  • /usr/bin/totem-video-thumbnailer
  • /usr/bin/whaaw-thumbnailer
  • /usr/lib/tumbler-1/tumblerd
  • /usr/lib64/tumbler-1/tumblerd