<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.foxtom.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DanielZorin</id>
	<title>Foxwiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.foxtom.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DanielZorin"/>
	<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php/Spezial:Beitr%C3%A4ge/DanielZorin"/>
	<updated>2026-07-28T03:07:03Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Dovecot/Imapsieve&amp;diff=171244</id>
		<title>Dovecot/Imapsieve</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Dovecot/Imapsieve&amp;diff=171244"/>
		<updated>2026-07-08T10:19:45Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Dovecot/Imapsieve&#039;&#039;&#039; Dovecot &#039;&#039;[[imap_sieve]]&#039;&#039; erweitern&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
* Beim Kopieren einer Nachricht nach &#039;&#039;Junk&#039;&#039; wird diese an Rspamd als Spam gemeldet&lt;br /&gt;
* Beim Kopieren einer Nachricht aus &#039;&#039;Junk&#039;&#039; in einen normalen Ordner wird diese an Rspamd als Ham gemeldet&lt;br /&gt;
* Die Konfiguration gilt für Dovecot 2.4&lt;br /&gt;
&lt;br /&gt;
== Konfiguration ==&lt;br /&gt;
Custom-Konfiguration&lt;br /&gt;
; ISPConfig-Template&lt;br /&gt;
Bleib bei späteren Reconfigure-/Update-Vorgängen erhalten&lt;br /&gt;
&lt;br /&gt;
; /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; copy line&amp;gt;&lt;br /&gt;
protocol imap {&lt;br /&gt;
  mail_plugins {&lt;br /&gt;
    imap_sieve = yes&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sieve_plugins {&lt;br /&gt;
  sieve_imapsieve = yes&lt;br /&gt;
  sieve_extprograms = yes&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sieve_global_extensions {&lt;br /&gt;
  vnd.dovecot.pipe = yes&lt;br /&gt;
  vnd.dovecot.environment = yes&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sieve_pipe_bin_dir = /etc/dovecot/sieve&lt;br /&gt;
&lt;br /&gt;
mailbox Junk {&lt;br /&gt;
  sieve_script report-spam {&lt;br /&gt;
    type = before&lt;br /&gt;
    cause = copy&lt;br /&gt;
    path = /etc/dovecot/sieve/report-spam.sieve&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
imapsieve_from Junk {&lt;br /&gt;
  sieve_script report-ham {&lt;br /&gt;
    type = before&lt;br /&gt;
    cause = copy&lt;br /&gt;
    path = /etc/dovecot/sieve/report-ham.sieve&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die ISPConfig-Custom-Konfiguration wird in die aktive Dovecot-Konfiguration übernommen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
cp /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master /etc/dovecot/conf.d/99-ispconfig-custom-config.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Create sieve scripts folder&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /etc/dovecot/sieve&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/dovecot/sieve/report-spam.sieve&lt;br /&gt;
* Die Nachricht wird per Pipe an &#039;&#039;rspamd-learn-spam.sh&#039;&#039; übergeben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; copy line&amp;gt;&lt;br /&gt;
require [&amp;quot;vnd.dovecot.pipe&amp;quot;, &amp;quot;copy&amp;quot;, &amp;quot;imapsieve&amp;quot;];&lt;br /&gt;
pipe :copy &amp;quot;rspamd-learn-spam.sh&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/dovecot/sieve/report-ham.sieve&lt;br /&gt;
Dieses Sieve-Skript wird ausgeführt, wenn eine Nachricht aus &#039;&#039;Junk&#039;&#039; in einen anderen IMAP-Ordner kopiert wird&lt;br /&gt;
* Kopien nach &#039;&#039;Trash&#039;&#039;, &#039;&#039;Deleted Messages&#039;&#039; oder erneut nach &#039;&#039;Junk&#039;&#039; werden ignoriert&lt;br /&gt;
* Alle anderen Kopien werden per Pipe an &#039;&#039;rspamd-learn-ham.sh&#039;&#039; übergeben&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; copy line&amp;gt;&lt;br /&gt;
require [&amp;quot;vnd.dovecot.pipe&amp;quot;, &amp;quot;copy&amp;quot;, &amp;quot;imapsieve&amp;quot;, &amp;quot;environment&amp;quot;, &amp;quot;variables&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
if environment :matches &amp;quot;imap.mailbox&amp;quot; &amp;quot;*&amp;quot; {&lt;br /&gt;
  set &amp;quot;mailbox&amp;quot; &amp;quot;${1}&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if string &amp;quot;${mailbox}&amp;quot; [&amp;quot;Trash&amp;quot;, &amp;quot;Deleted Messages&amp;quot;, &amp;quot;Junk&amp;quot;] {&lt;br /&gt;
  stop;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pipe :copy &amp;quot;rspamd-learn-ham.sh&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/dovecot/sieve/rspamd-learn-spam.sh&lt;br /&gt;
Das Pipe-Skript übergibt die Nachricht an Rspamd und trainiert sie als Spam&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
exec /usr/bin/rspamc -h 10.0.0.8:11334 learn_spam&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/dovecot/sieve/rspamd-learn-ham.sh&lt;br /&gt;
Das Pipe-Skript übergibt die Nachricht an Rspamd und trainiert sie als Ham&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
exec /usr/bin/rspamc -h 10.0.0.8:11334 learn_ham&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Pipe-Skripte müssen für Dovecot ausführbar sein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-2&amp;quot; copy line&amp;gt;&lt;br /&gt;
chmod 0755 /etc/dovecot/sieve/rspamd-learn-spam.sh /etc/dovecot/sieve/rspamd-learn-ham.sh&lt;br /&gt;
chmod +x /etc/dovecot/sieve/rspamd-learn-spam.sh /etc/dovecot/sieve/rspamd-learn-ham.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Sieve-Skripte werden kompiliert, damit Dovecot sie direkt verwenden kann&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-2&amp;quot; copy line&amp;gt;&lt;br /&gt;
sievec /etc/dovecot/sieve/report-spam.sieve&lt;br /&gt;
sievec /etc/dovecot/sieve/report-ham.sieve&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Abschließend wird die Dovecot-Konfiguration geprüft und der Dienst neu geladen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-2&amp;quot; copy line&amp;gt;&lt;br /&gt;
dovecot -n&lt;br /&gt;
systemctl reload dovecot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ordnernamen ==&lt;br /&gt;
* Der Ordnername &#039;&#039;Junk&#039;&#039; muss dem tatsächlichen IMAP-Ordnernamen entsprechen&lt;br /&gt;
** Mögliche abweichende Namen sind z. B. &#039;&#039;Spam&#039;&#039;&lt;br /&gt;
* Bei abweichendem Ordnernamen müssen beide Dovecot-Blöcke angepasst werden&lt;br /&gt;
** Zusätzlich muss die Ausschlussliste im Ham-Skript angepasst werden&lt;br /&gt;
&lt;br /&gt;
; Beispiel mit &#039;&#039;Spam&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; copy line&amp;gt;&lt;br /&gt;
mailbox Spam {&lt;br /&gt;
  sieve_script report-spam {&lt;br /&gt;
    type = before&lt;br /&gt;
    cause = copy&lt;br /&gt;
    path = /etc/dovecot/sieve/report-spam.sieve&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
imapsieve_from Spam {&lt;br /&gt;
  sieve_script report-ham {&lt;br /&gt;
    type = before&lt;br /&gt;
    cause = copy&lt;br /&gt;
    path = /etc/dovecot/sieve/report-ham.sieve&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sicherheit ==&lt;br /&gt;
* Die Pipe-Skripte werden durch Dovecot ausgeführt und müssen daher kontrolliert verwaltet werden&lt;br /&gt;
** &#039;&#039;/etc/dovecot/sieve&#039;&#039; darf nicht durch Mailbenutzer beschreibbar sein&lt;br /&gt;
* Der Rspamd-Controller sollte nur aus vertrauenswürdigen Netzen erreichbar sein&lt;br /&gt;
* Bei Verwendung eines Passworts sollte dieses nicht in allgemein lesbaren Dateien abgelegt werden&lt;br /&gt;
&lt;br /&gt;
; Rspamd-Controller mit enable_password&lt;br /&gt;
* &#039;&#039;password&#039;&#039; schützt lesende Controller-Kommandos&lt;br /&gt;
** Wird nur &#039;&#039;password&#039;&#039; gesetzt, kann dieses Passwort auch für privilegierte Kommandos verwendet werden&lt;br /&gt;
* &#039;&#039;enable_password&#039;&#039; schützt privilegierte Kommandos, z. B. Learning und Konfigurationsänderungen&lt;br /&gt;
** Wird zusätzlich &#039;&#039;enable_password&#039;&#039; gesetzt, sollte für IMAPSieve-Learning nur dieses Passwort verwendet werden&lt;br /&gt;
&lt;br /&gt;
; Passwort-Hash erzeugen&lt;br /&gt;
* Der Hash wird auf dem Rspamd-Host erzeugt&lt;br /&gt;
* Der Parameter &#039;&#039;-p&#039;&#039; sollte nicht verwendet werden, da das Passwort sonst in der Shell-History oder Prozessliste sichtbar werden kann&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamadm pw -q&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/rspamd/local.d/worker-controller.inc&lt;br /&gt;
* Der erzeugte Hash wird als &#039;&#039;enable_password&#039;&#039; eingetragen&lt;br /&gt;
** Optional kann zusätzlich ein separates &#039;&#039;password&#039;&#039; für lesende Zugriffe gesetzt werden&lt;br /&gt;
* Der Controller sollte nur auf einer internen Adresse oder localhost gebunden werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line&amp;gt;&lt;br /&gt;
bind_socket = &amp;quot;10.2.2.8:11334&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
password = &amp;quot;$2$READONLY_PASSWORD_HASH&amp;quot;;&lt;br /&gt;
enable_password = &amp;quot;$2$ENABLE_PASSWORD_HASH&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
secure_ip = [&amp;quot;127.0.0.1&amp;quot;, &amp;quot;::1&amp;quot;];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Rspamd-Konfiguration prüfen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-2&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamadm configtest&lt;br /&gt;
systemctl restart rspamd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Passwortdatei für rspamc&lt;br /&gt;
* Die Passwortdatei wird auf dem Dovecot-Host angelegt&lt;br /&gt;
** Die Datei enthält den Klartext des &#039;&#039;enable_password&#039;&#039;&lt;br /&gt;
* &#039;&#039;rspamc&#039;&#039; kann das Passwort über &#039;&#039;-P&#039;&#039; direkt aus dieser Datei lesen&lt;br /&gt;
** Dadurch erscheint das Passwort nicht als Kommandozeilenargument in der Prozessliste&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-3&amp;quot; copy line&amp;gt;&lt;br /&gt;
printf &#039;%s\n&#039; &#039;ENABLE_PASSWORD_KLARTEXT&#039; &amp;gt; /etc/dovecot/sieve/rspamd-controller.pass&lt;br /&gt;
chmod 0640 /etc/dovecot/sieve/rspamd-controller.pass&lt;br /&gt;
chown root:vmail /etc/dovecot/sieve/rspamd-controller.pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/dovecot/sieve/rspamd-learn-spam.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
exec /usr/bin/rspamc -h 10.0.0.8:11334 -P /etc/dovecot/sieve/rspamd-controller.pass learn_spam&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; /etc/dovecot/sieve/rspamd-learn-ham.sh&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
exec /usr/bin/rspamc -h 10.0.0.8:11334 -P /etc/dovecot/sieve/rspamd-controller.pass learn_ham&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Berechtigungen erneut prüfen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-4&amp;quot; copy line&amp;gt;&lt;br /&gt;
chown -R root:root /etc/dovecot/sieve&lt;br /&gt;
chown root:vmail /etc/dovecot/sieve/rspamd-controller.pass&lt;br /&gt;
chmod 0755 /etc/dovecot/sieve&lt;br /&gt;
chmod 0640 /etc/dovecot/sieve/rspamd-controller.pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Zugriff testen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamc -h 10.0.0.8:11334 -P /etc/dovecot/sieve/rspamd-controller.pass stat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
; Konfiguration prüfen&lt;br /&gt;
* Die geladene Dovecot-Konfiguration muss die IMAPSieve- und Extprograms-Optionen enthalten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
doveconf -n | grep -E &#039;imap_sieve|sieve_imapsieve|sieve_extprograms|sieve_pipe_bin_dir&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Rspamd-Verbindung prüfen&lt;br /&gt;
* Der Dovecot-Host muss den Rspamd-Controller erreichen können&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamc -h &amp;lt;published_ip&amp;gt;:11334 stat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Logs beobachten&lt;br /&gt;
* Während des Tests sollten Dovecot- und Rspamd-Logs beobachtet werden&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1-2&amp;quot; copy line&amp;gt;&lt;br /&gt;
journalctl -u dovecot -u rspamd -f&lt;br /&gt;
tail -f /var/log/roundcube/error.log /var/log/roundcube/error.log.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Testfall&lt;br /&gt;
! Aktion&lt;br /&gt;
! Erwartung&lt;br /&gt;
|-&lt;br /&gt;
| Spam&lt;br /&gt;
| Nachricht nach &#039;&#039;Junk&#039;&#039; kopieren&lt;br /&gt;
| &#039;&#039;learn_spam&#039;&#039; wird ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
| Ham&lt;br /&gt;
| Nachricht aus &#039;&#039;Junk&#039;&#039; nach &#039;&#039;INBOX&#039;&#039; kopieren&lt;br /&gt;
| &#039;&#039;learn_ham&#039;&#039; wird ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
| Trash&lt;br /&gt;
| Nachricht aus &#039;&#039;Junk&#039;&#039; nach &#039;&#039;Trash&#039;&#039; kopieren&lt;br /&gt;
| Kein Ham-Learning&lt;br /&gt;
|-&lt;br /&gt;
| Wiederholung&lt;br /&gt;
| Dieselbe Nachricht erneut lernen&lt;br /&gt;
| Rspamd kann &#039;&#039;already learned&#039;&#039; melden&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Fehleranalyse ==&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Symptom&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
! Prüfung&lt;br /&gt;
|-&lt;br /&gt;
| Kein Learning beim Verschieben&lt;br /&gt;
| IMAPSieve-Plugin nicht geladen&lt;br /&gt;
| &#039;&#039;doveconf -n&#039;&#039; prüfen&lt;br /&gt;
|-&lt;br /&gt;
| Kein Learning beim Verschieben nach Spam&lt;br /&gt;
| Ordnername stimmt nicht mit &#039;&#039;Junk&#039;&#039; überein&lt;br /&gt;
| IMAP-Ordnernamen prüfen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;Permission denied&#039;&#039;&lt;br /&gt;
| Pipe-Skript nicht ausführbar oder falsche Rechte&lt;br /&gt;
| Rechte unter &#039;&#039;/etc/dovecot/sieve&#039;&#039; prüfen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;rspamc: connection refused&#039;&#039;&lt;br /&gt;
| Rspamd-Controller nicht erreichbar&lt;br /&gt;
| Host, Port und Firewall prüfen. Socket in der Konfiguration prüfen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;authentication failed&#039;&#039;&lt;br /&gt;
| Controller-Zugriff nicht erlaubt&lt;br /&gt;
| &#039;&#039;secure_ip&#039;&#039; oder &#039;&#039;enable_password&#039;&#039; prüfen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;already learned&#039;&#039;&lt;br /&gt;
| Nachricht wurde bereits trainiert&lt;br /&gt;
| Kein Fehler, erneutes Lernen wurde übersprungen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;contains less tokens than required&#039;&#039;&lt;br /&gt;
| Nachricht ist für Bayes-Learning zu kurz&lt;br /&gt;
| &#039;&#039;min_tokens&#039;&#039; prüfen&lt;br /&gt;
|-&lt;br /&gt;
| Bayes-Symbol erscheint nicht im Scan-Ergebnis&lt;br /&gt;
| Zu wenige gelernte Spam- oder Ham-Nachrichten&lt;br /&gt;
| &#039;&#039;min_learns&#039;&#039; prüfen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Bayes ==&lt;br /&gt;
; Bayes Hinweise&lt;br /&gt;
Sehr kurze Nachrichten werden von Rspamd nicht für Bayes-Learning verwendet&lt;br /&gt;
* Der Standardwert &#039;&#039;min_tokens = 11&#039;&#039; bedeutet, dass mindestens 11 statistische Tokens vorhanden sein müssen&lt;br /&gt;
** Bei zu kurzen Nachrichten erscheint im Log sinngemäß eine Meldung wie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
contains less tokens than required: 9 &amp;lt; 11&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bayes wirkt nicht unmittelbar nach den ersten gelernten Nachrichten&lt;br /&gt;
* Der Standardwert &#039;&#039;min_learns = 200&#039;&#039; bedeutet, dass für Spam und Ham jeweils genügend gelernte Nachrichten vorhanden sein müssen, bevor die Bayes-Klassifizierung aktiv in die Bewertung einfließt&lt;br /&gt;
&lt;br /&gt;
Rspamd speichert dafür gelernte IDs bzw. Signaturen im Cache und kann dann eine Meldung wie &#039;&#039;already learned&#039;&#039; zurückgeben.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Standardwert&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| min_tokens&lt;br /&gt;
| &#039;&#039;11&#039;&#039;&lt;br /&gt;
| Mindestanzahl statistischer Tokens, damit eine Nachricht für Bayes verarbeitet wird&lt;br /&gt;
|-&lt;br /&gt;
| min_learns&lt;br /&gt;
| &#039;&#039;200&#039;&#039;&lt;br /&gt;
| Mindestanzahl gelernter Nachrichten pro Klasse, bevor Bayes für die Klassifizierung verwendet wird&lt;br /&gt;
|-&lt;br /&gt;
| cache_prefix&lt;br /&gt;
| &#039;&#039;learned_ids&#039;&#039;&lt;br /&gt;
| Prefix für gespeicherte IDs bereits gelernter Nachrichten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
; Variablen anzeigen&lt;br /&gt;
Die aktuell wirksamen Rspamd-Parameter können über &#039;&#039;rspamadm configdump&#039;&#039; geprüft werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamadm configdump&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Standardkonfiguration befindet sich in &#039;&#039;/etc/rspamd/statistic.conf&#039;&#039;&lt;br /&gt;
* Diese Datei sollte nicht direkt angepasst werden, da sie zur Paketkonfiguration gehört&lt;br /&gt;
&lt;br /&gt;
; Eigene Werte setzen&lt;br /&gt;
Eigene Bayes-Parameter werden üblicherweise in &#039;&#039;/etc/rspamd/local.d/classifier-bayes.conf&#039;&#039; gesetzt&lt;br /&gt;
* Die Datei ergänzt oder überschreibt die Standardwerte aus der Rspamd-Konfiguration&lt;br /&gt;
&lt;br /&gt;
; /etc/rspamd/local.d/classifier-bayes.conf&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; copy line&amp;gt;&lt;br /&gt;
min_tokens = 11;&lt;br /&gt;
min_learns = 200;&lt;br /&gt;
cache_prefix = &amp;quot;learned_ids&amp;quot;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach der Änderung wird die Rspamd-Konfiguration geprüft&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamadm configtest&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird Rspamd neu gestartet, damit die geänderten Werte aktiv werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
systemctl restart rspamd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Dovecot/Spam]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Rspamd&amp;diff=170520</id>
		<title>Rspamd</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Rspamd&amp;diff=170520"/>
		<updated>2026-07-03T13:18:56Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
----&lt;br /&gt;
{{Navigation|&amp;lt;zurück&amp;gt;|&amp;lt;nachste&amp;gt;}}&lt;br /&gt;
----&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{BASEPAGENAME}}&#039;&#039;&#039; - Beschreibung&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufruf ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optionen ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! GNU !! Parameter !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
=== Umgebungsvariablen ===&lt;br /&gt;
=== Exit-Status ===&lt;br /&gt;
{| class=&amp;quot;wikitable options col1center big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Erfolg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;0 || Fehler&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- output --&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problembehebung ===&lt;br /&gt;
&lt;br /&gt;
== Rspamd-Konfiguration mit ISPConfig ==&lt;br /&gt;
Wenn Rspamd durch ISPConfig eingerichtet wurde, sollte die Konfiguration in zwei Ebenen erfolgen:&lt;br /&gt;
&lt;br /&gt;
* benutzer-, mailbox- und domainbezogene Richtlinien über ISPConfig&lt;br /&gt;
* systemweite Rspamd-Anpassungen unter&lt;br /&gt;
 /etc/rspamd/local.d/&lt;br /&gt;
&lt;br /&gt;
=== Funktionsweise ===&lt;br /&gt;
Rspamd analysiert die Nachricht, berechnet einen Score und liefert daraus eine Action. Die spätere Zustellung in &#039;&#039;INBOX&#039;&#039; oder &#039;&#039;Junk&#039;&#039; erfolgt durch Dovecot/Sieve.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Schritt&lt;br /&gt;
! Komponente&lt;br /&gt;
! Aufgabe&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Postfix&lt;br /&gt;
| SMTP-Annahme der Nachricht&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Rspamd&lt;br /&gt;
| Analyse, Score-Berechnung und Action-Auswahl&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Postfix/Rspamd-Milter&lt;br /&gt;
| Ablehnen, Greylisting oder Hinzufügen von Spam-Headern&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Dovecot/Sieve&lt;br /&gt;
| Zustellung in &#039;&#039;INBOX&#039;&#039; oder Verschieben nach &#039;&#039;Junk&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Für das Ziel Spam annehmen und nach &#039;&#039;Junk&#039;&#039; verschieben ist daher nicht nur der Rspamd-Score relevant&lt;br /&gt;
* Entscheidend ist auch, dass Rspamd Spam-Header setzt und die Mailbox so konfiguriert ist, dass Sieve diese Nachrichten nach &#039;&#039;Junk&#039;&#039; verschiebt&lt;br /&gt;
&lt;br /&gt;
=== Benutzerbezogene Richtlinien ===&lt;br /&gt;
Die Spamfilter-Richtlinien werden in ISPConfig unter &#039;&#039;&#039;Email &amp;gt; Spamfilter &amp;gt; Policy&#039;&#039;&#039; verwaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Spam tag level / add header&lt;br /&gt;
| Score, ab dem eine Nachricht als Spam markiert wird&lt;br /&gt;
|-&lt;br /&gt;
| Reject level&lt;br /&gt;
| Score, ab dem eine Nachricht abgelehnt wird&lt;br /&gt;
|-&lt;br /&gt;
| Greylisting level&lt;br /&gt;
| Score, ab dem Greylisting angewendet wird&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Systemweite Rspamd-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Systemweite Anpassungen sollten unter &#039;&#039;/etc/rspamd/local.d/&#039;&#039; abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
* Die Dateien &#039;&#039;/etc/rspamd/rspamd.conf&#039;&#039; sowie Dateien unter &#039;&#039;/etc/rspamd/modules.d/&#039;&#039; sollten nicht direkt angepasst werden. &lt;br /&gt;
* Lokale Konfigurationen unter &#039;&#039;local.d&#039;&#039; werden mit den Standardwerten zusammengeführt und bleiben bei Paket-Updates besser wartbar.&lt;br /&gt;
&lt;br /&gt;
Globale Action-Schwellenwerte werden über folgende Datei gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
nano /etc/rspamd/local.d/actions.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine weiche Konfiguration ohne reguläre scorebasierte Ablehnung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
reject = 100;&lt;br /&gt;
add_header = 6;&lt;br /&gt;
greylist = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basisprüfung ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Befehl&lt;br /&gt;
! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| systemctl status rspamd redis-server&lt;br /&gt;
| Status von Rspamd und Redis prüfen&lt;br /&gt;
|-&lt;br /&gt;
| rspamadm configtest&lt;br /&gt;
| Rspamd-Konfiguration auf Syntaxfehler prüfen&lt;br /&gt;
|-&lt;br /&gt;
| rspamadm configdump actions&lt;br /&gt;
| Aktive Action-Schwellenwerte anzeigen&lt;br /&gt;
|-&lt;br /&gt;
| rspamc stat&lt;br /&gt;
| Verbindung zu Rspamd prüfen und Statistik anzeigen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
systemctl status rspamd redis-server&lt;br /&gt;
rspamadm configtest&lt;br /&gt;
rspamadm configdump actions&lt;br /&gt;
rspamc stat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nach Änderungen an der Rspamd-Konfiguration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamadm configtest&lt;br /&gt;
systemctl reload rspamd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dateien ===&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datei !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
| || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
----&lt;br /&gt;
{{Navigation|&amp;lt;zurück&amp;gt;|&amp;lt;nachste&amp;gt;}}&lt;br /&gt;
----&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;rspamd&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Special:PrefixIndex/rspamd/}}&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]&lt;br /&gt;
&lt;br /&gt;
; Info-Pages &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:rspamd}}&lt;br /&gt;
{{DISPLAYTITLE:rspamd}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:rspamd]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Rspamd&amp;diff=170519</id>
		<title>Rspamd</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Rspamd&amp;diff=170519"/>
		<updated>2026-07-03T12:43:58Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
----&lt;br /&gt;
{{Navigation|&amp;lt;zurück&amp;gt;|&amp;lt;nachste&amp;gt;}}&lt;br /&gt;
----&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;{{BASEPAGENAME}}&#039;&#039;&#039; - Beschreibung&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Aufruf ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optionen ===&lt;br /&gt;
{| class=&amp;quot;wikitable sortable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! GNU !! Parameter !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Parameter ===&lt;br /&gt;
=== Umgebungsvariablen ===&lt;br /&gt;
=== Exit-Status ===&lt;br /&gt;
{| class=&amp;quot;wikitable options col1center big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Erfolg&lt;br /&gt;
|-&lt;br /&gt;
| &amp;gt;0 || Fehler&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- output --&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Problembehebung ===&lt;br /&gt;
&lt;br /&gt;
== Rspamd-Konfiguration mit ISPConfig ==&lt;br /&gt;
Wenn Rspamd durch ISPConfig eingerichtet wurde, sollte die Konfiguration in zwei Ebenen erfolgen:&lt;br /&gt;
&lt;br /&gt;
* benutzer-, mailbox- und domainbezogene Richtlinien über ISPConfig&lt;br /&gt;
* systemweite Rspamd-Anpassungen unter&lt;br /&gt;
 /etc/rspamd/local.d/&lt;br /&gt;
&lt;br /&gt;
=== Benutzerbezogene Richtlinien ===&lt;br /&gt;
Die Spamfilter-Richtlinien werden in ISPConfig unter &#039;&#039;&#039;Email &amp;gt; Spamfilter &amp;gt; Policy&#039;&#039;&#039; verwaltet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Spam tag level / add header&lt;br /&gt;
| Score, ab dem eine Nachricht als Spam markiert wird&lt;br /&gt;
|-&lt;br /&gt;
| Reject level&lt;br /&gt;
| Score, ab dem eine Nachricht abgelehnt wird&lt;br /&gt;
|-&lt;br /&gt;
| Greylisting level&lt;br /&gt;
| Score, ab dem Greylisting angewendet wird&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Systemweite Rspamd-Konfiguration ===&lt;br /&gt;
&lt;br /&gt;
Systemweite Anpassungen sollten unter &#039;&#039;/etc/rspamd/local.d/&#039;&#039; abgelegt werden.&lt;br /&gt;
&lt;br /&gt;
* Die Dateien &#039;&#039;/etc/rspamd/rspamd.conf&#039;&#039; sowie Dateien unter &#039;&#039;/etc/rspamd/modules.d/&#039;&#039; sollten nicht direkt angepasst werden. &lt;br /&gt;
* Lokale Konfigurationen unter &#039;&#039;local.d&#039;&#039; werden mit den Standardwerten zusammengeführt und bleiben bei Paket-Updates besser wartbar.&lt;br /&gt;
&lt;br /&gt;
Globale Action-Schwellenwerte werden über folgende Datei gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
nano /etc/rspamd/local.d/actions.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine weiche Konfiguration ohne reguläre scorebasierte Ablehnung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
reject = 100;&lt;br /&gt;
add_header = 6;&lt;br /&gt;
greylist = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Basisprüfung ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Befehl&lt;br /&gt;
! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| systemctl status rspamd redis-server&lt;br /&gt;
| Status von Rspamd und Redis prüfen&lt;br /&gt;
|-&lt;br /&gt;
| rspamadm configtest&lt;br /&gt;
| Rspamd-Konfiguration auf Syntaxfehler prüfen&lt;br /&gt;
|-&lt;br /&gt;
| rspamadm configdump actions&lt;br /&gt;
| Aktive Action-Schwellenwerte anzeigen&lt;br /&gt;
|-&lt;br /&gt;
| rspamc stat&lt;br /&gt;
| Verbindung zu Rspamd prüfen und Statistik anzeigen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
systemctl status rspamd redis-server&lt;br /&gt;
rspamadm configtest&lt;br /&gt;
rspamadm configdump actions&lt;br /&gt;
rspamc stat&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Nach Änderungen an der Rspamd-Konfiguration:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
rspamadm configtest&lt;br /&gt;
systemctl reload rspamd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dateien ===&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Datei !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || &lt;br /&gt;
|-&lt;br /&gt;
| || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
----&lt;br /&gt;
{{Navigation|&amp;lt;zurück&amp;gt;|&amp;lt;nachste&amp;gt;}}&lt;br /&gt;
----&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;rspamd&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Special:PrefixIndex/rspamd/}}&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]&lt;br /&gt;
&lt;br /&gt;
; Info-Pages &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
&lt;br /&gt;
{{DEFAULTSORT:rspamd}}&lt;br /&gt;
{{DISPLAYTITLE:rspamd}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:rspamd]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/05_Systemstart&amp;diff=163541</id>
		<title>Linux/SELinux/04/05 Systemstart</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/05_Systemstart&amp;diff=163541"/>
		<updated>2026-03-30T00:29:15Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/04/05 Ändern der SELinux-Modi beim Systemstart&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Ändern der SELinux-Modi beim Systemstart ===&lt;br /&gt;
Beim Systemstart können Kernel-Parameter das SELinux-Verhalten direkt während des Bootvorgangs beeinflussen.&lt;br /&gt;
&lt;br /&gt;
* Diese Parameter überschreiben die übliche SELinux-Konfiguration für den jeweiligen Start.&lt;br /&gt;
* Sie sind vor allem für Fehlersuche, Relabeling und Notfallszenarien relevant.&lt;br /&gt;
* Für dauerhafte Änderungen über die Konfigurationsdatei siehe [[Linux/SELinux/04/04 Dauerhafte Änderungen|Dauerhafte Änderungen]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Parameter&lt;br /&gt;
! Wirkung&lt;br /&gt;
! Typischer Einsatz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;enforcing=0&#039;&#039;&lt;br /&gt;
| Start im permissiven Modus&lt;br /&gt;
| Fehlersuche und sicherer Start vor einem Relabeling&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;selinux=0&#039;&#039;&lt;br /&gt;
| Der Kernel lädt keine SELinux-Infrastruktur&lt;br /&gt;
| Ausnahmefall bei schweren Startproblemen&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;autorelabel=1&#039;&#039;&lt;br /&gt;
| Erzwingt ein Relabeling beim nächsten Start&lt;br /&gt;
| Reparatur fehlerhafter oder unvollständiger Dateilabels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;enforcing=0&#039;&#039; ===&lt;br /&gt;
Der Parameter &#039;&#039;enforcing=0&#039;&#039; startet das System im permissiven Modus.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
enforcing=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* SELinux bleibt geladen, erzwingt die Policy jedoch nicht.&lt;br /&gt;
* Zugriffe werden nicht blockiert, mögliche Ablehnungen werden aber weiterhin protokolliert.&lt;br /&gt;
* Dieser Modus ist für die Fehlersuche besser geeignet als eine vollständige Deaktivierung.&lt;br /&gt;
* Neue Labels werden weiterhin korrekt erzeugt.&lt;br /&gt;
* Die entstehenden AVC-Meldungen können sich vom Enforcing-Modus unterscheiden, weil Prozesse nach einer protokollierten Ablehnung weiterlaufen können.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;selinux=0&#039;&#039; ===&lt;br /&gt;
Der Parameter &#039;&#039;selinux=0&#039;&#039; deaktiviert SELinux bereits im Kernel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
selinux=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Der Kernel lädt keinen Teil der SELinux-Infrastruktur.&lt;br /&gt;
* Dieser Parameter ist kein regulärer Weg zur Fehlersuche.&lt;br /&gt;
* Für Debugging sollte nach Möglichkeit &#039;&#039;enforcing=0&#039;&#039; verwendet werden.&lt;br /&gt;
* Wird später wieder mit aktiviertem SELinux gestartet, ist in der Regel ein Relabeling erforderlich.&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
: Beim Start mit &#039;&#039;selinux=0&#039;&#039; wird &#039;&#039;/.autorelabel&#039;&#039; vorbereitet, damit das System beim nächsten Start mit aktiviertem SELinux neu gekennzeichnet werden kann.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;autorelabel=1&#039;&#039; ===&lt;br /&gt;
Der Parameter &#039;&#039;autorelabel=1&#039;&#039; erzwingt ein Relabeling beim Start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
autorelabel=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies entspricht funktional dem folgenden Ablauf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
touch /.autorelabel&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Wenn viele Objekte falsch oder gar nicht gelabelt sind, sollte der Start zusätzlich permissiv erfolgen.&lt;br /&gt;
* Dafür kann &#039;&#039;autorelabel=1&#039;&#039; mit &#039;&#039;enforcing=0&#039;&#039; kombiniert werden.&lt;br /&gt;
&lt;br /&gt;
=== Relabeling vorbereiten ===&lt;br /&gt;
Auf Debian und RHEL kann ein Relabeling auch aus dem laufenden System für den nächsten Start vorgemerkt werden.&lt;br /&gt;
&lt;br /&gt;
1.&amp;amp;nbsp; Relabeling für den nächsten Start markieren:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
fixfiles -F onboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
2.&amp;amp;nbsp; System neu starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
reboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
3.&amp;amp;nbsp; Falls das System zuvor ohne SELinux betrieben wurde oder viele Labels fehlen, zusätzlich permissiv starten:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
enforcing=0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;fixfiles -F onboot&#039;&#039; legt die Markierung für das Relabeling des nächsten Starts an.&lt;br /&gt;
* Laut Debian-Dokumentation wird &#039;&#039;/.autorelabel&#039;&#039; beim automatischen Relabeling mit &#039;&#039;fixfiles -F restore&#039;&#039; ausgewertet.&lt;br /&gt;
&lt;br /&gt;
=== Unterschiede zwischen Debian und RHEL ===&lt;br /&gt;
* Die Kernel-Parameter &#039;&#039;enforcing=0&#039;&#039;, &#039;&#039;selinux=0&#039;&#039; und &#039;&#039;autorelabel=1&#039;&#039; sind distributionsunabhängig.&lt;br /&gt;
* RHEL dokumentiert diese Parameter direkt im SELinux-Handbuch.&lt;br /&gt;
* Debian dokumentiert die zugehörige Relabeling-Mechanik vor allem über &#039;&#039;fixfiles(8)&#039;&#039; und &#039;&#039;selinux_config(5)&#039;&#039;.&lt;br /&gt;
* Die konkrete Eintragung in die Bootloader-Konfiguration ist distributions- und Bootloader-abhängig und wird hier nicht behandelt.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise ===&lt;br /&gt;
* Boot-Parameter wirken nur bei Starts, bei denen sie tatsächlich übergeben werden.&lt;br /&gt;
* Bleibt ein Parameter dauerhaft in der Bootloader-Konfiguration eingetragen, gilt er bei jedem weiteren Start.&lt;br /&gt;
* Für den normalen Betrieb sollte SELinux nicht über &#039;&#039;selinux=0&#039;&#039;, sondern nur in begründeten Ausnahmefällen vollständig deaktiviert werden.&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/04/04 Dauerhafte Änderungen|Linux/SELinux/04/06 Booleane}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
Red Hat Documentation: &lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/using_selinux/changing-selinux-states-and-modes&lt;br /&gt;
Debian Manpages: &lt;br /&gt;
* https://manpages.debian.org/testing/policycoreutils/fixfiles.8.en.html&lt;br /&gt;
* https://manpages.debian.org/testing/policycoreutils/selinux_config.5.en.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/03_Hauptkonfigurationsdatei&amp;diff=163540</id>
		<title>Linux/SELinux/04/03 Hauptkonfigurationsdatei</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/03_Hauptkonfigurationsdatei&amp;diff=163540"/>
		<updated>2026-03-29T23:42:50Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Hauptkonfigurationsdatei ===&lt;br /&gt;
; &#039;&#039;/etc/selinux/config&#039;&#039;&lt;br /&gt;
* Auf Debian und RHEL ist &#039;&#039;/etc/selinux/config&#039;&#039; die zentrale SELinux-Konfigurationsdatei.&lt;br /&gt;
* Die Datei steuert den dauerhaften SELinux-Status und den Namen der zu ladenden SELinux-Policy.&lt;br /&gt;
* Änderungen in dieser Datei werden in der Regel erst nach einem Neustart wirksam.&lt;br /&gt;
* Temporäre Laufzeitwechsel zwischen &#039;&#039;enforcing&#039;&#039; und &#039;&#039;permissive&#039;&#039; erfolgen mit &#039;&#039;setenforce&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Beispielkonfiguration ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
SELINUX=enforcing&lt;br /&gt;
SELINUXTYPE=targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; SELINUX=&lt;br /&gt;
Die Option &#039;&#039;&#039;SELINUX&#039;&#039;&#039; flegt fest, ob SELinux deaktiviert oder aktiviert ist und in welchem Modus es läuft.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Wert&lt;br /&gt;
! Wirkung&lt;br /&gt;
! Hinweis&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;enforcing&#039;&#039;&lt;br /&gt;
| Die SELinux-Policy wird durchgesetzt. Zugriffe werden auf Grundlage der Policy-Regeln erlaubt oder verweigert. Verweigerungen werden protokolliert.&lt;br /&gt;
| Geeigneter Modus für produktive Systeme.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;permissive&#039;&#039;&lt;br /&gt;
| Die SELinux-Policy bleibt geladen, wird aber nicht durchgesetzt. Zugriffe werden nicht blockiert, mögliche Verweigerungen jedoch protokolliert.&lt;br /&gt;
| Geeignet für Fehlersuche, Policy-Analyse und die schrittweise Aktivierung von SELinux.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;disabled&#039;&#039;&lt;br /&gt;
| Es wird keine SELinux-Policy geladen. SELinux schützt das System in diesem Zustand nicht, und AVC-Meldungen werden nicht protokolliert.&lt;br /&gt;
| In aktueller Debian- und RHEL-Dokumentation wird dieser Eintrag als veraltete Methode zum dauerhaften Deaktivieren beschrieben. Für eine vollständige Deaktivierung wird &#039;&#039;selinux=0&#039;&#039; als Kernel-Parameter verwendet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Praktisches Beispiel für einen temporären Wechsel in den Permissive-Modus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Änderung durch &#039;&#039;setenforce&#039;&#039; gilt nur bis zum nächsten Neustart.&lt;br /&gt;
&lt;br /&gt;
; SELINUXTYPE=&lt;br /&gt;
Die Option &#039;&#039;&#039;SELINUXTYPE&#039;&#039;&#039; legt die zu verwendende SELinux-Policy fest.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Wert&lt;br /&gt;
! Bedeutung&lt;br /&gt;
! Hinweis&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;targeted&#039;&#039;&lt;br /&gt;
| Standard-Policy mit gezielter Einschränkung ausgewählter Dienste und Domänen.&lt;br /&gt;
| Auf RHEL ist &#039;&#039;targeted&#039;&#039; die übliche Standard-Policy. Auf Debian ist der Wert gültig, wenn die entsprechende Policy installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mls&#039;&#039;&lt;br /&gt;
| Multi-Level-Security-Policy mit zusätzlicher Trennung über Sicherheitsstufen.&lt;br /&gt;
| Spezialfall für MLS-Umgebungen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;policy_name&#039;&#039;&lt;br /&gt;
| Generischer Policy-Name.&lt;br /&gt;
| Debian dokumentiert &#039;&#039;SELINUXTYPE&#039;&#039; allgemein als Namen der installierten Policy unter &#039;&#039;/etc/selinux/{SELINUXTYPE}/&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Eine Änderung von &#039;&#039;SELINUXTYPE&#039;&#039; erfordert einen Neustart und kann zusätzlich ein Relabeling des Dateisystems notwendig machen.&lt;br /&gt;
* Die zugehörige Policy muss installiert sein, bevor der Wert in &#039;&#039;SELINUXTYPE&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
=== Aktuelle Konfiguration prüfen ===&lt;br /&gt;
Die laufende Konfiguration und die in der Datei hinterlegten Werte lassen sich direkt prüfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/selinux/config&lt;br /&gt;
getenforce&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;getenforce&#039;&#039; zeigt den aktuellen Modus: &#039;&#039;Enforcing&#039;&#039;, &#039;&#039;Permissive&#039;&#039; oder &#039;&#039;Disabled&#039;&#039;.&lt;br /&gt;
* &#039;&#039;sestatus&#039;&#039; zeigt zusätzlich unter anderem die geladene Policy und den Modus aus der Konfigurationsdatei.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Änderung ===&lt;br /&gt;
* Für dauerhafte Änderungen muss &#039;&#039;/etc/selinux/config&#039;&#039; angepasst und das System neu gestartet werden.&lt;br /&gt;
* Soll SELinux auf einem System aktiviert werden, auf dem es zuvor deaktiviert war, ist &#039;&#039;permissive&#039;&#039; der sichere Zwischenschritt.&lt;br /&gt;
* RHEL-Dokumentation konzentriert sich in der Grundkonfiguration meist auf &#039;&#039;SELINUX&#039;&#039; und &#039;&#039;SELINUXTYPE&#039;&#039;.&lt;br /&gt;
* Debian-Manpages dokumentieren zusätzlich optionale Einträge wie &#039;&#039;AUTORELABEL=&#039;&#039; und &#039;&#039;REQUIRESEUSERS=&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/04/02 Protokolldateien|Linux/SELinux/04/04 Dauerhafte Änderungen}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
Red Hat Documentation: &lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/using_selinux/changing-selinux-states-and-modes&lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-security-enhanced_linux-working_with_selinux-main_configuration_file&lt;br /&gt;
Debian Manpages: &lt;br /&gt;
* https://manpages.debian.org/testing/policycoreutils/selinux_config.5.en.html&lt;br /&gt;
*  https://manpages.debian.org/testing/selinux-utils/selinux.8.en.html&lt;br /&gt;
* https://manpages.debian.org/testing/selinux-utils/getenforce.8.en.html&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/02_Protokolldateien&amp;diff=163539</id>
		<title>Linux/SELinux/04/02 Protokolldateien</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/02_Protokolldateien&amp;diff=163539"/>
		<updated>2026-03-29T23:41:37Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/04/02 Protokolldateien&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Welche Protokolldatei wird verwendet ===&lt;br /&gt;
SELinux-Ablehnungen werden primär über das Linux-Audit-Subsystem protokolliert. Wenn der &#039;&#039;auditd&#039;&#039;-Daemon läuft, werden rohe AVC-Meldungen standardmäßig in &#039;&#039;/var/log/audit/audit.log&#039;&#039; geschrieben. Für die Analyse ist diese Datei die wichtigste Quelle.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich können interpretierte Hinweise im Systemprotokoll erscheinen, zum Beispiel über &#039;&#039;setroubleshoot&#039;&#039;. Diese Meldungen erleichtern die Einordnung, ersetzen aber nicht die rohe AVC-Meldung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Quelle&lt;br /&gt;
! Inhalt&lt;br /&gt;
! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;/var/log/audit/audit.log&#039;&#039;&lt;br /&gt;
| rohe Audit- und AVC-Meldungen&lt;br /&gt;
| erste Quelle für Analyse und Korrelation&lt;br /&gt;
|-&lt;br /&gt;
| Systemjournal&lt;br /&gt;
| interpretierte Meldungen, z.&amp;amp;nbsp;B. von &#039;&#039;setroubleshoot&#039;&#039;&lt;br /&gt;
| schnelle Einordnung und Verweis auf &#039;&#039;sealert&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SELinux prüft Zugriffe erst nach den klassischen Dateirechten. Wird ein Zugriff bereits dort verweigert, entsteht keine SELinux-Ablehnung.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel einer AVC-Meldung ===&lt;br /&gt;
Eine AVC-Meldung kann beispielsweise wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1710000000.123:321): avc: denied { getattr } for pid=1234 comm=&amp;quot;httpd&amp;quot; path=&amp;quot;/var/www/html/file1&amp;quot; scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Bestandteile:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Feld&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;{ getattr }&#039;&#039;&lt;br /&gt;
| verweigerte Operation&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;comm=&amp;quot;httpd&amp;quot;&#039;&#039;&lt;br /&gt;
| aufgerufener Prozess&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;path=&amp;quot;/var/www/html/file1&amp;quot;&#039;&#039;&lt;br /&gt;
| betroffenes Zielobjekt&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;scontext=...:httpd_t:s0&#039;&#039;&lt;br /&gt;
| SELinux-Kontext des Prozesses&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;tcontext=...:samba_share_t:s0&#039;&#039;&lt;br /&gt;
| SELinux-Kontext des Zielobjekts&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;tclass=file&#039;&#039;&lt;br /&gt;
| Objektklasse&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vollständige SELinux-Meldungen ===&lt;br /&gt;
Für die gezielte Auswertung der Audit-Einträge eignet sich &#039;&#039;ausearch&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent&lt;br /&gt;
ausearch -m AVC -i -ts recent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist &#039;&#039;setroubleshoot&#039;&#039; installiert, können zusätzliche Hinweise mit &#039;&#039;sealert&#039;&#039; angezeigt werden. Enthält eine Meldung eine lokale ID, lässt sie sich direkt auflösen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sealert -l &amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interpretierte Meldungen von &#039;&#039;setroubleshoot&#039;&#039; lassen sich im Systemjournal anzeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -t setroubleshoot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wenn keine Meldungen erscheinen ===&lt;br /&gt;
Erscheinen keine AVC-Meldungen, sollten zuerst die üblichen Fehlerquellen geprüft werden:&lt;br /&gt;
&lt;br /&gt;
* Läuft &#039;&#039;auditd&#039;&#039; nicht, werden keine rohen Audit-Einträge in &#039;&#039;/var/log/audit/audit.log&#039;&#039; geschrieben.&lt;br /&gt;
* Ohne Treffer in &#039;&#039;ausearch&#039;&#039; sollte der blockierte Zugriff erneut ausgeführt und danach erneut gesucht werden.&lt;br /&gt;
* Ist &#039;&#039;auditd&#039;&#039; nicht aktiv, können einzelne SELinux-Meldungen noch im Kernel-Puffer sichtbar sein.&lt;br /&gt;
&lt;br /&gt;
Praktische Prüfung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status auditd.service&lt;br /&gt;
dmesg | grep -i -e type=1300 -e type=1400&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für eine dauerhafte Protokollierung kann &#039;&#039;auditd&#039;&#039; aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now auditd.service&lt;br /&gt;
systemctl is-enabled auditd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Werden Ablehnungen durch &#039;&#039;dontaudit&#039;&#039;-Regeln unterdrückt, lässt sich die Protokollierung kurzfristig erweitern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
semodule -DB&lt;br /&gt;
# blockierten Zugriff erneut ausführen&lt;br /&gt;
ausearch -m AVC -i -ts recent&lt;br /&gt;
semodule -B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/04 Arbeiten mit SELinux|Linux/SELinux/04/03 Hauptkonfigurationsdatei}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
Red Hat Documentation: &lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_selinux/troubleshooting-problems-related-to-selinux_using-selinux&lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-security-enhanced_linux-working_with_selinux-which_log_file_is_used&lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-sealert_messages&lt;br /&gt;
Debian Manpages: &lt;br /&gt;
* https://manpages.debian.org/testing/auditd/auditd.8.en.html&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/03_Hauptkonfigurationsdatei&amp;diff=163538</id>
		<title>Linux/SELinux/04/03 Hauptkonfigurationsdatei</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/03_Hauptkonfigurationsdatei&amp;diff=163538"/>
		<updated>2026-03-29T23:41:31Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Hauptkonfigurationsdatei ===&lt;br /&gt;
; &#039;&#039;/etc/selinux/config&#039;&#039;&lt;br /&gt;
* Auf Debian und RHEL ist &#039;&#039;/etc/selinux/config&#039;&#039; die zentrale SELinux-Konfigurationsdatei.&lt;br /&gt;
* Die Datei steuert den dauerhaften SELinux-Status und den Namen der zu ladenden SELinux-Policy.&lt;br /&gt;
* Änderungen in dieser Datei werden in der Regel erst nach einem Neustart wirksam.&lt;br /&gt;
* Temporäre Laufzeitwechsel zwischen &#039;&#039;enforcing&#039;&#039; und &#039;&#039;permissive&#039;&#039; erfolgen mit &#039;&#039;setenforce&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Beispielkonfiguration ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
SELINUX=enforcing&lt;br /&gt;
SELINUXTYPE=targeted&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; SELINUX=&lt;br /&gt;
Die Option &amp;lt;nowiki&amp;gt;[[SELINUX]]&amp;lt;/nowiki&amp;gt; legt fest, ob SELinux deaktiviert oder aktiviert ist und in welchem Modus es läuft.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Wert&lt;br /&gt;
! Wirkung&lt;br /&gt;
! Hinweis&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;enforcing&#039;&#039;&lt;br /&gt;
| Die SELinux-Policy wird durchgesetzt. Zugriffe werden auf Grundlage der Policy-Regeln erlaubt oder verweigert. Verweigerungen werden protokolliert.&lt;br /&gt;
| Geeigneter Modus für produktive Systeme.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;permissive&#039;&#039;&lt;br /&gt;
| Die SELinux-Policy bleibt geladen, wird aber nicht durchgesetzt. Zugriffe werden nicht blockiert, mögliche Verweigerungen jedoch protokolliert.&lt;br /&gt;
| Geeignet für Fehlersuche, Policy-Analyse und die schrittweise Aktivierung von SELinux.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;disabled&#039;&#039;&lt;br /&gt;
| Es wird keine SELinux-Policy geladen. SELinux schützt das System in diesem Zustand nicht, und AVC-Meldungen werden nicht protokolliert.&lt;br /&gt;
| In aktueller Debian- und RHEL-Dokumentation wird dieser Eintrag als veraltete Methode zum dauerhaften Deaktivieren beschrieben. Für eine vollständige Deaktivierung wird &#039;&#039;selinux=0&#039;&#039; als Kernel-Parameter verwendet.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Praktisches Beispiel für einen temporären Wechsel in den Permissive-Modus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
setenforce 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Die Änderung durch &#039;&#039;setenforce&#039;&#039; gilt nur bis zum nächsten Neustart.&lt;br /&gt;
&lt;br /&gt;
; SELINUXTYPE=&lt;br /&gt;
Die Option &#039;&#039;&#039;SELINUXTYPE&#039;&#039;&#039; legt die zu verwendende SELinux-Policy fest.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Wert&lt;br /&gt;
! Bedeutung&lt;br /&gt;
! Hinweis&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;targeted&#039;&#039;&lt;br /&gt;
| Standard-Policy mit gezielter Einschränkung ausgewählter Dienste und Domänen.&lt;br /&gt;
| Auf RHEL ist &#039;&#039;targeted&#039;&#039; die übliche Standard-Policy. Auf Debian ist der Wert gültig, wenn die entsprechende Policy installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;mls&#039;&#039;&lt;br /&gt;
| Multi-Level-Security-Policy mit zusätzlicher Trennung über Sicherheitsstufen.&lt;br /&gt;
| Spezialfall für MLS-Umgebungen.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;policy_name&#039;&#039;&lt;br /&gt;
| Generischer Policy-Name.&lt;br /&gt;
| Debian dokumentiert &#039;&#039;SELINUXTYPE&#039;&#039; allgemein als Namen der installierten Policy unter &#039;&#039;/etc/selinux/{SELINUXTYPE}/&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Eine Änderung von &#039;&#039;SELINUXTYPE&#039;&#039; erfordert einen Neustart und kann zusätzlich ein Relabeling des Dateisystems notwendig machen.&lt;br /&gt;
* Die zugehörige Policy muss installiert sein, bevor der Wert in &#039;&#039;SELINUXTYPE&#039;&#039; verwendet wird.&lt;br /&gt;
&lt;br /&gt;
=== Aktuelle Konfiguration prüfen ===&lt;br /&gt;
Die laufende Konfiguration und die in der Datei hinterlegten Werte lassen sich direkt prüfen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/selinux/config&lt;br /&gt;
getenforce&lt;br /&gt;
sestatus&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;getenforce&#039;&#039; zeigt den aktuellen Modus: &#039;&#039;Enforcing&#039;&#039;, &#039;&#039;Permissive&#039;&#039; oder &#039;&#039;Disabled&#039;&#039;.&lt;br /&gt;
* &#039;&#039;sestatus&#039;&#039; zeigt zusätzlich unter anderem die geladene Policy und den Modus aus der Konfigurationsdatei.&lt;br /&gt;
&lt;br /&gt;
=== Hinweise zur Änderung ===&lt;br /&gt;
* Für dauerhafte Änderungen muss &#039;&#039;/etc/selinux/config&#039;&#039; angepasst und das System neu gestartet werden.&lt;br /&gt;
* Soll SELinux auf einem System aktiviert werden, auf dem es zuvor deaktiviert war, ist &#039;&#039;permissive&#039;&#039; der sichere Zwischenschritt.&lt;br /&gt;
* RHEL-Dokumentation konzentriert sich in der Grundkonfiguration meist auf &#039;&#039;SELINUX&#039;&#039; und &#039;&#039;SELINUXTYPE&#039;&#039;.&lt;br /&gt;
* Debian-Manpages dokumentieren zusätzlich optionale Einträge wie &#039;&#039;AUTORELABEL=&#039;&#039; und &#039;&#039;REQUIRESEUSERS=&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/04/02 Protokolldateien|Linux/SELinux/04/04 Dauerhafte Änderungen}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
Red Hat Documentation: &lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/using_selinux/changing-selinux-states-and-modes&lt;br /&gt;
* https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-security-enhanced_linux-working_with_selinux-main_configuration_file&lt;br /&gt;
Debian Manpages: &lt;br /&gt;
* https://manpages.debian.org/testing/policycoreutils/selinux_config.5.en.html&lt;br /&gt;
*  https://manpages.debian.org/testing/selinux-utils/selinux.8.en.html&lt;br /&gt;
* https://manpages.debian.org/testing/selinux-utils/getenforce.8.en.html&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/02_Protokolldateien&amp;diff=163537</id>
		<title>Linux/SELinux/04/02 Protokolldateien</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/02_Protokolldateien&amp;diff=163537"/>
		<updated>2026-03-29T23:26:00Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/04/02 Protokolldateien&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Welche Protokolldatei wird verwendet ===&lt;br /&gt;
SELinux-Ablehnungen werden primär über das Linux-Audit-Subsystem protokolliert. Wenn der &#039;&#039;auditd&#039;&#039;-Daemon läuft, werden rohe AVC-Meldungen standardmäßig in &#039;&#039;/var/log/audit/audit.log&#039;&#039; geschrieben. Für die Analyse ist diese Datei die wichtigste Quelle.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich können interpretierte Hinweise im Systemprotokoll erscheinen, zum Beispiel über &#039;&#039;setroubleshoot&#039;&#039;. Diese Meldungen erleichtern die Einordnung, ersetzen aber nicht die rohe AVC-Meldung.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Quelle&lt;br /&gt;
! Inhalt&lt;br /&gt;
! Zweck&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;/var/log/audit/audit.log&#039;&#039;&lt;br /&gt;
| rohe Audit- und AVC-Meldungen&lt;br /&gt;
| erste Quelle für Analyse und Korrelation&lt;br /&gt;
|-&lt;br /&gt;
| Systemjournal&lt;br /&gt;
| interpretierte Meldungen, z.&amp;amp;nbsp;B. von &#039;&#039;setroubleshoot&#039;&#039;&lt;br /&gt;
| schnelle Einordnung und Verweis auf &#039;&#039;sealert&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* SELinux prüft Zugriffe erst nach den klassischen Dateirechten. Wird ein Zugriff bereits dort verweigert, entsteht keine SELinux-Ablehnung.&lt;br /&gt;
&lt;br /&gt;
=== Beispiel einer AVC-Meldung ===&lt;br /&gt;
Eine AVC-Meldung kann beispielsweise wie folgt aussehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1710000000.123:321): avc: denied { getattr } for pid=1234 comm=&amp;quot;httpd&amp;quot; path=&amp;quot;/var/www/html/file1&amp;quot; scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Bestandteile:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Feld&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;{ getattr }&#039;&#039;&lt;br /&gt;
| verweigerte Operation&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;comm=&amp;quot;httpd&amp;quot;&#039;&#039;&lt;br /&gt;
| aufgerufener Prozess&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;path=&amp;quot;/var/www/html/file1&amp;quot;&#039;&#039;&lt;br /&gt;
| betroffenes Zielobjekt&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;scontext=...:httpd_t:s0&#039;&#039;&lt;br /&gt;
| SELinux-Kontext des Prozesses&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;tcontext=...:samba_share_t:s0&#039;&#039;&lt;br /&gt;
| SELinux-Kontext des Zielobjekts&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;tclass=file&#039;&#039;&lt;br /&gt;
| Objektklasse&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Vollständige SELinux-Meldungen ===&lt;br /&gt;
Für die gezielte Auswertung der Audit-Einträge eignet sich &#039;&#039;ausearch&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts recent&lt;br /&gt;
ausearch -m AVC -i -ts recent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist &#039;&#039;setroubleshoot&#039;&#039; installiert, können zusätzliche Hinweise mit &#039;&#039;sealert&#039;&#039; angezeigt werden. Enthält eine Meldung eine lokale ID, lässt sie sich direkt auflösen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
sealert -l &amp;lt;ID&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Interpretierte Meldungen von &#039;&#039;setroubleshoot&#039;&#039; lassen sich im Systemjournal anzeigen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
journalctl -t setroubleshoot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wenn keine Meldungen erscheinen ===&lt;br /&gt;
Erscheinen keine AVC-Meldungen, sollten zuerst die üblichen Fehlerquellen geprüft werden:&lt;br /&gt;
&lt;br /&gt;
* Läuft &#039;&#039;auditd&#039;&#039; nicht, werden keine rohen Audit-Einträge in &#039;&#039;/var/log/audit/audit.log&#039;&#039; geschrieben.&lt;br /&gt;
* Ohne Treffer in &#039;&#039;ausearch&#039;&#039; sollte der blockierte Zugriff erneut ausgeführt und danach erneut gesucht werden.&lt;br /&gt;
* Ist &#039;&#039;auditd&#039;&#039; nicht aktiv, können einzelne SELinux-Meldungen noch im Kernel-Puffer sichtbar sein.&lt;br /&gt;
&lt;br /&gt;
Praktische Prüfung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status auditd.service&lt;br /&gt;
dmesg | grep -i -e type=1300 -e type=1400&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für eine dauerhafte Protokollierung kann &#039;&#039;auditd&#039;&#039; aktiviert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now auditd.service&lt;br /&gt;
systemctl is-enabled auditd.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Werden Ablehnungen durch &#039;&#039;dontaudit&#039;&#039;-Regeln unterdrückt, lässt sich die Protokollierung kurzfristig erweitern:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; copy line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
semodule -DB&lt;br /&gt;
# blockierten Zugriff erneut ausführen&lt;br /&gt;
ausearch -m AVC -i -ts recent&lt;br /&gt;
semodule -B&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* Red Hat Documentation: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/using_selinux/troubleshooting-problems-related-to-selinux_using-selinux&lt;br /&gt;
* Red Hat Documentation: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-security-enhanced_linux-working_with_selinux-which_log_file_is_used&lt;br /&gt;
* Red Hat Documentation: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/security-enhanced_linux/sect-security-enhanced_linux-fixing_problems-sealert_messages&lt;br /&gt;
* Debian Manpages: https://manpages.debian.org/testing/auditd/auditd.8.en.html&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/04 Arbeiten mit SELinux|Linux/SELinux/04/03 Hauptkonfigurationsdatei}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/02_Kontext&amp;diff=163536</id>
		<title>Linux/SELinux/02 Kontext</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/02_Kontext&amp;diff=163536"/>
		<updated>2026-03-29T23:00:43Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/02 Kontext&#039;&#039;&#039; - Security Context Verwaltung&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
; Kennzeichnung&lt;br /&gt;
Prozesse und Dateien werden mit einem Kontext gekennzeichnet&lt;br /&gt;
&lt;br /&gt;
; Kontext&lt;br /&gt;
* SELinux-Benutzer&lt;br /&gt;
* Rolle&lt;br /&gt;
* Typ&lt;br /&gt;
* Sicherheitsstufe&lt;br /&gt;
&lt;br /&gt;
; Ausführung von SELinux &lt;br /&gt;
Entscheidungen zur Zugriffskontrolle des Kontexts&lt;br /&gt;
&lt;br /&gt;
SELinux bietet eine Kombination aus&lt;br /&gt;
* [[Rollenbasierter Zugriffskontrolle]] ([[RBAC]])&lt;br /&gt;
* [[Typdurchsetzung]] ([[TE]])&lt;br /&gt;
* [[Mehrstufiger Sicherheit]] ([[MLS]])&lt;br /&gt;
&lt;br /&gt;
; Beispiele für SELinux-Kontexte&lt;br /&gt;
SELinux-Kontexte werden auf Prozessen, Linux-Benutzern und Dateien unter Linux-Betriebssystemen verwendet, auf denen SELinux läuft&lt;br /&gt;
&lt;br /&gt;
== Kontext-Syntax ==&lt;br /&gt;
 &#039;&#039;&#039;SELinuxUser:role:type:level&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Felder&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Bestandteil&lt;br /&gt;
! Beispiel&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| &amp;lt;name&amp;gt;_u&lt;br /&gt;
| SELinux-Benutzer&lt;br /&gt;
* Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts&lt;br /&gt;
|-&lt;br /&gt;
| role&lt;br /&gt;
| &amp;lt;name&amp;gt;_r&lt;br /&gt;
| SELinux-Rolle&lt;br /&gt;
* Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;name&amp;gt;_t&#039;&#039;&#039;&lt;br /&gt;
| SELinux-Typ – &#039;der wichtigste Bestandteil&#039; im Type-Enforcement-Modell&lt;br /&gt;
&lt;br /&gt;
* Der Typ wird in Zugriffsregeln ausgewertet und &#039;bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind&#039;&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| s0&lt;br /&gt;
| SELinux-Level – die Sicherheitsstufe&lt;br /&gt;
* In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten&lt;br /&gt;
* In vielen Standardszenarien erscheint hier einfach s0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Domänenübergänge ==&lt;br /&gt;
Ein Prozess in einer Domäne wechselt in eine andere Domäne, indem er eine Anwendung ausführt, die den Typ entrypoint für die neue Domäne hat&lt;br /&gt;
* Die Berechtigung entrypoint wird in der SELinux-Richtlinie verwendet und steuert, welche Anwendungen zum Betreten einer Domäne verwendet werden können&lt;br /&gt;
* Das folgende Beispiel veranschaulicht einen Domänenwechsel&lt;br /&gt;
&lt;br /&gt;
; Ein Beispiel für einen Domänenübergang&lt;br /&gt;
Ein Benutzer möchte sein Passwort ändern&lt;br /&gt;
* Dazu führt er das Dienstprogramm passwd aus&lt;br /&gt;
&lt;br /&gt;
Die ausführbare Datei /usr/bin/passwd ist mit dem Typ &#039;&#039;&#039;passwd_exec_t&#039;&#039;&#039; gekennzeichnet. Das Dienstprogramm passwd greift auf /etc/shadow zu, das mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; gekennzeichnet ist.&lt;br /&gt;
&lt;br /&gt;
Eine SELinux-Richtlinienregel besagt, dass Prozesse, die in der &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne laufen, Dateien lesen und schreiben dürfen, die mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; gekennzeichnet sind. &lt;br /&gt;
Wenn ein Benutzer das Dienstprogramm passwd ausführt, wechselt der Shell-Prozess des Benutzers in die &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne. Da bei SELinux die Standardaktion „Verweigern“ ist und eine Regel existiert, die Anwendungen, die in der &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne laufen, den Zugriff auf Dateien mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; erlaubt, darf die passwd-Anwendung auf /etc/shadow zugreifen und das Passwort des Benutzers aktualisieren.&lt;br /&gt;
&lt;br /&gt;
== Praxis: Kontexte anzeigen und ändern ==&lt;br /&gt;
&lt;br /&gt;
; SELinux-Kontext von Dateien und Verzeichnissen anzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; SELinux- und Linux-Benutzer&lt;br /&gt;
Geben Sie den folgenden Befehl als root ein, um eine Liste der Zuordnungen zwischen SELinux- und Linux-Benutzerkonten anzuzeigen (das Paket policycoreutils-python muss installiert sein):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage login -l&lt;br /&gt;
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst&lt;br /&gt;
&lt;br /&gt;
__default__ unconfined_u s0-s0:c0.c1023 *&lt;br /&gt;
root unconfined_u s0-s0:c0.c1023 *&lt;br /&gt;
system_u system_u s0-s0:c0.c1023 *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Prozesskontext&lt;br /&gt;
Verwenden Sie den Befehl ps -eZ, um den SELinux-Kontext für Prozesse anzuzeigen.&lt;br /&gt;
Anzeigen des SELinux-Kontexts für das Dienstprogramm passwd:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ | grep passwd&lt;br /&gt;
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die SELinux-Kontexte aller laufenden Prozesse anzuzeigen, führen Sie das Dienstprogramm ps erneut aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ&lt;br /&gt;
system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient&lt;br /&gt;
system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd&lt;br /&gt;
system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm&lt;br /&gt;
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond&lt;br /&gt;
system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops&lt;br /&gt;
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rolle system_r wird für Systemprozesse wie Daemons verwendet. Type Enforcement trennt dann jede Domäne.&lt;br /&gt;
&lt;br /&gt;
; Benutzerkontext&lt;br /&gt;
Verwenden Sie den folgenden Befehl, um den SELinux-Kontext anzuzeigen, der Ihrem Linux-Benutzer zugeordnet ist:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
id -Z&lt;br /&gt;
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser SELinux-Kontext zeigt, dass der Linux-Benutzer dem SELinux-Benutzer unconfined_u zugeordnet ist, in der Rolle unconfined_r läuft und in der Domäne &#039;&#039;&#039;unconfined_t&#039;&#039;&#039; ausgeführt wird. s0-s0 ist ein MLS-Bereich, der in diesem Fall mit s0 identisch ist. Standardmäßig laufen Linux-Benutzer in der unconfined-Rolle.&lt;br /&gt;
&lt;br /&gt;
== Context setzen mit chcon ==&lt;br /&gt;
* Category und Sensitivity Label setzen mit chcat&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ | grep httpd&lt;br /&gt;
system_u:system_r:httpd_t:s0      16392 ?        00:00:01 apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= To Cut =&lt;br /&gt;
&lt;br /&gt;
== Benutzer ==&lt;br /&gt;
; SELinux-Benutzeridentität&lt;br /&gt;
&lt;br /&gt;
Richtlinie bekannte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten MLS/MCS-Bereich autorisiert ist&lt;br /&gt;
* Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet&lt;br /&gt;
* Dadurch können Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen übernehmen&lt;br /&gt;
* Die zugeordnete SELinux-Benutzeridentität wird im SELinux-Kontext für Prozesse in dieser Sitzung verwendet, um zu definieren, welche Rollen und Ebenen sie betreten dürfen&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe kann von System zu System leicht abweichen:&lt;br /&gt;
* Die Spalte Login Name listet Linux-Benutzer auf&lt;br /&gt;
* Die Spalte SELinux User listet auf, welchem SELinux-Benutzer der Linux-Benutzer zugeordnet ist&lt;br /&gt;
&lt;br /&gt;
* Bei Prozessen legt der SELinux-Benutzer fest, auf welche Rollen und Ebenen zugegriffen werden kann&lt;br /&gt;
* Die Spalte MLS/MCS-Bereich gibt die Ebene an, die von Multi-Level Security (MLS) und Multi-Category Security (MCS) verwendet wird&lt;br /&gt;
* Die Spalte Dienst bestimmt den korrekten SELinux-Kontext, in dem der Linux-Benutzer am System angemeldet sein soll&lt;br /&gt;
&lt;br /&gt;
* Standardmäßig wird das Sternchen (*) verwendet, das für jeden beliebigen Dienst steht&lt;br /&gt;
&lt;br /&gt;
; Rolle&lt;br /&gt;
&lt;br /&gt;
; Teil von SELinux ist das Sicherheitsmodell der rollenbasierten Zugriffskontrolle (RBAC)&lt;br /&gt;
* Die Rolle ist ein Attribut von RBAC&lt;br /&gt;
* SELinux-Benutzer sind für Rollen autorisiert, und Rollen sind für Domänen autorisiert&lt;br /&gt;
&lt;br /&gt;
* Die Rolle dient als Vermittler zwischen Domänen und SELinux-Benutzern&lt;br /&gt;
* Die Rollen, auf die zugegriffen werden kann, bestimmen, auf welche Domänen zugegriffen werden kann; letztendlich steuert dies, auf welche Objekttypen zugegriffen werden kann&lt;br /&gt;
* Dies trägt dazu bei, die Anfälligkeit für Angriffe zur Rechteausweitung zu verringern&lt;br /&gt;
&lt;br /&gt;
; Typ&lt;br /&gt;
Der Typ ist ein Attribut der Typdurchsetzung&lt;br /&gt;
* Der Typ definiert eine Domäne für Prozesse und einen Typ für Dateien&lt;br /&gt;
* SELinux-Richtlinienregeln definieren, wie Typen aufeinander zugreifen können, sei es eine Domäne, die auf einen Typ zugreift, oder eine Domäne, die auf eine andere Domäne zugreift&lt;br /&gt;
* Zugriff ist nur erlaubt, wenn eine spezifische SELinux-Richtlinienregel existiert, die dies zulässt&lt;br /&gt;
&lt;br /&gt;
; level&lt;br /&gt;
Die Stufe ist ein Attribut von MLS und MCS&lt;br /&gt;
* Ein MLS-Bereich ist ein Paar von Stufen, das als lowlevel-highlevel geschrieben wird, wenn sich die Stufen unterscheiden, oder als lowlevel, wenn die Stufen identisch sind (s0-s0 entspricht s0)&lt;br /&gt;
&lt;br /&gt;
* Jede Stufe ist ein Paar aus Sensitivitätsstufe und Kategorie, wobei Kategorien optional sind&lt;br /&gt;
* Wenn Kategorien vorhanden sind, wird die Stufe als Sensitivitätsstufe:Kategoriengruppe geschrieben&lt;br /&gt;
* Wenn keine Kategorien vorhanden sind, wird sie als Sensitivitätsstufe geschrieben&lt;br /&gt;
&lt;br /&gt;
; Wenn die Kategoriengruppe eine zusammenhängende Reihe ist, kann sie abgekürzt werden&lt;br /&gt;
* Beispielsweise entspricht c0.c3 dem Ausdruck c0,c1,c2,c3&lt;br /&gt;
* Die Datei /etc/selinux/targeted/setrans.conf ordnet Stufen (s0:c0) einer für Menschen lesbaren Form zu (nämlich CompanyConfidential)&lt;br /&gt;
&lt;br /&gt;
* In Linux setzt die gezielte Richtlinie MCS durch, und in MCS gibt es nur eine Sensitivitätsstufe, s0&lt;br /&gt;
&lt;br /&gt;
* MCS in Linux unterstützt 1024 verschiedene Kategorien: c0 bis c1023. s0-s0:c0.c1023 entspricht der Sensitivitätsstufe s0 und ist für alle Kategorien autorisiert&lt;br /&gt;
&lt;br /&gt;
; MLS setzt das Bell-La-Padula-Modell für zwingenden Zugriff durch und wird in LSPP-Umgebungen (Labeled Security Protection Profile) verwendet&lt;br /&gt;
* Um MLS-Einschränkungen zu nutzen, installieren Sie das Paket selinux-policy-mls und konfigurieren Sie MLS als Standard-SELinux-Richtlinie&lt;br /&gt;
&lt;br /&gt;
* Die mit Linux gelieferte MLS-Richtlinie lässt viele Programmdomänen außer Acht, die nicht Teil der evaluierten Konfiguration waren, weshalb MLS auf einer Desktop-Workstation unbrauchbar ist (keine Unterstützung für das X Window System); es kann jedoch eine MLS-Richtlinie aus der vorgelagerten SELinux-Referenzrichtlinie erstellt werden, die alle Programmdomänen enthält&lt;br /&gt;
&lt;br /&gt;
; Weitere Informationen&lt;br /&gt;
zur MLS-Konfiguration finden Sie unter [[Linux/SELinux/04/13 Multi-Level Security]]&lt;br /&gt;
&lt;br /&gt;
== File Context Verwaltung ==&lt;br /&gt;
&#039;&#039;&#039;SELinux/File Context&#039;&#039;&#039; - Verhalten bei Dateisystemen mit und ohne xattr Unterstützung&lt;br /&gt;
&lt;br /&gt;
; Mount Optionen&lt;br /&gt;
* für SELinux (context=, defcontext=,	fs,context=, rootcontext=)&lt;br /&gt;
&lt;br /&gt;
ls -Z /usr/bin/passwd&lt;br /&gt;
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd&lt;br /&gt;
&lt;br /&gt;
ls -Z /etc/shadow&lt;br /&gt;
-r--------&lt;br /&gt;
root root system_u:object_r:shadow_t:s0 /etc/shadow&lt;br /&gt;
&lt;br /&gt;
* Der Typ shadow_t wird nur auf Dateien angewendet, die für eine Passwortänderung erforderlich sind&lt;br /&gt;
* Dazu gehören /etc/gshadow, /etc/shadow und deren Sicherungsdateien&lt;br /&gt;
&lt;br /&gt;
Eine SELinux-Richtlinienregel besagt, dass für die passwd_t-Domäne die entrypoint-Berechtigung auf den Typ passwd_exec_t gesetzt ist&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel ist nicht erschöpfend und dient als grundlegendes Beispiel zur Erläuterung des Domänenwechsels&lt;br /&gt;
* Obwohl es eine tatsächliche Regel gibt, die es Subjekten, die in der passwd_t-Domäne laufen, erlaubt, auf Objekte zuzugreifen, die mit dem Dateityp shadow_t gekennzeichnet sind, müssen andere SELinux-Richtlinienregeln erfüllt sein, bevor das Subjekt in eine neue Domäne wechseln kann&lt;br /&gt;
&lt;br /&gt;
: In diesem Beispiel stellt die Typdurchsetzung Folgendes sicher&lt;br /&gt;
* Die passwd_t-Domäne kann nur durch die Ausführung einer Anwendung betreten werden, die mit dem Typ passwd_exec_t gekennzeichnet ist; sie darf nur aus autorisierten gemeinsam genutzten Bibliotheken, wie z. B. dem Typ lib_t, ausführen; und sie darf keine anderen Anwendungen ausführen&lt;br /&gt;
* Nur autorisierte Domänen, wie z. B. passwd_t, können in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind&lt;br /&gt;
* Selbst wenn andere Prozesse mit Superuser-Rechten laufen, können diese Prozesse nicht in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind, da sie nicht in der Domäne passwd_t laufen&lt;br /&gt;
* Nur autorisierte Domänen können in die passwd_t-Domäne wechseln&lt;br /&gt;
* Beispielsweise hat der in der sendmail_t-Domäne laufende sendmail-Prozess keinen legitimen Grund, passwd&amp;lt;nowiki&amp;gt; auszuführen; daher kann er niemals in die &amp;lt;/nowiki&amp;gt;passwd_t-Domäne wechseln&lt;br /&gt;
* Prozesse, die in der passwd_t-Domäne laufen, können nur auf autorisierte Typen lesen und schreiben, wie z. B. Dateien, die mit den Typen etc_t oder shadow_t gekennzeichnet sind&lt;br /&gt;
* Dies verhindert, dass die passwd-Anwendung dazu verleitet wird, beliebige Dateien zu lesen oder zu schreiben&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie ein Terminal, z. B. über Anwendungen → Systemwerkzeuge → Terminal &lt;br /&gt;
# Führen Sie das Dienstprogramm passwd aus&lt;br /&gt;
&lt;br /&gt;
Geben Sie kein neues Passwort ein:&lt;br /&gt;
passwd&lt;br /&gt;
Passwort für Benutzer ‚&#039;user_name‘&#039; ändern&lt;br /&gt;
Passwort für ‚&#039;user_name‘&#039; ändern&lt;br /&gt;
(aktuelles) UNIX-Passwort:&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie einen neuen Tab oder ein weiteres Terminal und geben Sie den folgenden Befehl ein&lt;br /&gt;
Die Ausgabe sieht in etwa wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
Drücken Sie im ersten Tab/Terminal Strg+C, um das Dienstprogramm passwd abzubrechen&lt;br /&gt;
In diesem Beispiel wechselt der Shell-Prozess des Benutzers in die Domäne passwd_t, wenn das Dienstprogramm passwd (mit dem Typ passwd_exec_t gekennzeichnet) ausgeführt wird&lt;br /&gt;
* Beachten Sie, dass der Typ eine Domäne für Prozesse und einen Typ für Dateien definiert&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass es sich bei der folgenden Ausgabe um ein gekürztes Beispiel handelt, das auf Ihrem System abweichen kann:&lt;br /&gt;
&lt;br /&gt;
* Die Kategorien, auf die der Benutzer Zugriff hat, werden durch &amp;lt;tt&amp;gt;c0.c1023&amp;lt;/tt&amp;gt; definiert, was alle Kategorien (&amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; bis &amp;lt;tt&amp;gt;c1023&amp;lt;/tt&amp;gt;) umfasst.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Bestandteil&lt;br /&gt;
! Beispiel&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_u&#039;&#039;&lt;br /&gt;
| SELinux User. Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts.&lt;br /&gt;
|-&lt;br /&gt;
| role&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_r&#039;&#039;&lt;br /&gt;
| SELinux Role. Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen.&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_t&#039;&#039;&lt;br /&gt;
| SELinux Type - &#039;&#039;&#039;der wichtigste Bestandteil&#039;&#039;&#039; im Type-Enforcement-Modell. Der Typ wird in Zugriffsregeln ausgewertet und &#039;&#039;&#039;bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| &#039;&#039;s0&#039;&#039;&lt;br /&gt;
| SELinux Level - die Sicherheitsstufe. In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten. In vielen Standardszenarien erscheint hier einfach &#039;&#039;s0&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
; Unterseiten&lt;br /&gt;
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}&lt;br /&gt;
----&lt;br /&gt;
; Inhalt der aktuellen Kategorie&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;Linux/SELinux&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]&lt;br /&gt;
&lt;br /&gt;
; Info-Pages &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
# [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#chap-Security-Enhanced_Linux-SELinux_Contexts Kapitel 2. SELinux-Kontexte]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{DEFAULTSORT:new}}&lt;br /&gt;
{{DISPLAYTITLE:new}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/01 Grundlagen/Installation|Linux/SELinux/03 Default Policy}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/02_Kontext&amp;diff=163535</id>
		<title>Linux/SELinux/02 Kontext</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/02_Kontext&amp;diff=163535"/>
		<updated>2026-03-29T23:00:19Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: /* To Cut */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/02 Kontext&#039;&#039;&#039; - Security Context Verwaltung&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
; Kennzeichnung&lt;br /&gt;
Prozesse und Dateien werden mit einem Kontext gekennzeichnet&lt;br /&gt;
&lt;br /&gt;
; Kontext&lt;br /&gt;
* SELinux-Benutzer&lt;br /&gt;
* Rolle&lt;br /&gt;
* Typ&lt;br /&gt;
* Sicherheitsstufe&lt;br /&gt;
&lt;br /&gt;
; Ausführung von SELinux &lt;br /&gt;
Entscheidungen zur Zugriffskontrolle des Kontexts&lt;br /&gt;
&lt;br /&gt;
SELinux bietet eine Kombination aus&lt;br /&gt;
* [[Rollenbasierter Zugriffskontrolle]] ([[RBAC]])&lt;br /&gt;
* [[Typdurchsetzung]] ([[TE]])&lt;br /&gt;
* [[Mehrstufiger Sicherheit]] ([[MLS]])&lt;br /&gt;
&lt;br /&gt;
; Beispiele für SELinux-Kontexte&lt;br /&gt;
SELinux-Kontexte werden auf Prozessen, Linux-Benutzern und Dateien unter Linux-Betriebssystemen verwendet, auf denen SELinux läuft&lt;br /&gt;
&lt;br /&gt;
== Kontext-Syntax ==&lt;br /&gt;
 &#039;&#039;&#039;SELinuxUser:role:type:level&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Felder&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Bestandteil&lt;br /&gt;
! Beispiel&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| &amp;lt;name&amp;gt;_u&lt;br /&gt;
| SELinux-Benutzer&lt;br /&gt;
* Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts&lt;br /&gt;
|-&lt;br /&gt;
| role&lt;br /&gt;
| &amp;lt;name&amp;gt;_r&lt;br /&gt;
| SELinux-Rolle&lt;br /&gt;
* Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;name&amp;gt;_t&#039;&#039;&#039;&lt;br /&gt;
| SELinux-Typ – &#039;der wichtigste Bestandteil&#039; im Type-Enforcement-Modell&lt;br /&gt;
&lt;br /&gt;
* Der Typ wird in Zugriffsregeln ausgewertet und &#039;bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind&#039;&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| s0&lt;br /&gt;
| SELinux-Level – die Sicherheitsstufe&lt;br /&gt;
* In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten&lt;br /&gt;
* In vielen Standardszenarien erscheint hier einfach s0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Domänenübergänge ==&lt;br /&gt;
Ein Prozess in einer Domäne wechselt in eine andere Domäne, indem er eine Anwendung ausführt, die den Typ entrypoint für die neue Domäne hat&lt;br /&gt;
* Die Berechtigung entrypoint wird in der SELinux-Richtlinie verwendet und steuert, welche Anwendungen zum Betreten einer Domäne verwendet werden können&lt;br /&gt;
* Das folgende Beispiel veranschaulicht einen Domänenwechsel&lt;br /&gt;
&lt;br /&gt;
; Ein Beispiel für einen Domänenübergang&lt;br /&gt;
Ein Benutzer möchte sein Passwort ändern&lt;br /&gt;
* Dazu führt er das Dienstprogramm passwd aus&lt;br /&gt;
&lt;br /&gt;
Die ausführbare Datei /usr/bin/passwd ist mit dem Typ &#039;&#039;&#039;passwd_exec_t&#039;&#039;&#039; gekennzeichnet. Das Dienstprogramm passwd greift auf /etc/shadow zu, das mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; gekennzeichnet ist.&lt;br /&gt;
&lt;br /&gt;
Eine SELinux-Richtlinienregel besagt, dass Prozesse, die in der &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne laufen, Dateien lesen und schreiben dürfen, die mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; gekennzeichnet sind. &lt;br /&gt;
Wenn ein Benutzer das Dienstprogramm passwd ausführt, wechselt der Shell-Prozess des Benutzers in die &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne. Da bei SELinux die Standardaktion „Verweigern“ ist und eine Regel existiert, die Anwendungen, die in der &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne laufen, den Zugriff auf Dateien mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; erlaubt, darf die passwd-Anwendung auf /etc/shadow zugreifen und das Passwort des Benutzers aktualisieren.&lt;br /&gt;
&lt;br /&gt;
== Praxis: Kontexte anzeigen und ändern ==&lt;br /&gt;
&lt;br /&gt;
; SELinux-Kontext von Dateien und Verzeichnissen anzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; SELinux- und Linux-Benutzer&lt;br /&gt;
Geben Sie den folgenden Befehl als root ein, um eine Liste der Zuordnungen zwischen SELinux- und Linux-Benutzerkonten anzuzeigen (das Paket policycoreutils-python muss installiert sein):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage login -l&lt;br /&gt;
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst&lt;br /&gt;
&lt;br /&gt;
__default__ unconfined_u s0-s0:c0.c1023 *&lt;br /&gt;
root unconfined_u s0-s0:c0.c1023 *&lt;br /&gt;
system_u system_u s0-s0:c0.c1023 *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Prozesskontext&lt;br /&gt;
Verwenden Sie den Befehl ps -eZ, um den SELinux-Kontext für Prozesse anzuzeigen.&lt;br /&gt;
Anzeigen des SELinux-Kontexts für das Dienstprogramm passwd:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ | grep passwd&lt;br /&gt;
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die SELinux-Kontexte aller laufenden Prozesse anzuzeigen, führen Sie das Dienstprogramm ps erneut aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ&lt;br /&gt;
system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient&lt;br /&gt;
system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd&lt;br /&gt;
system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm&lt;br /&gt;
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond&lt;br /&gt;
system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops&lt;br /&gt;
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rolle system_r wird für Systemprozesse wie Daemons verwendet. Type Enforcement trennt dann jede Domäne.&lt;br /&gt;
&lt;br /&gt;
; Benutzerkontext&lt;br /&gt;
Verwenden Sie den folgenden Befehl, um den SELinux-Kontext anzuzeigen, der Ihrem Linux-Benutzer zugeordnet ist:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
id -Z&lt;br /&gt;
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser SELinux-Kontext zeigt, dass der Linux-Benutzer dem SELinux-Benutzer unconfined_u zugeordnet ist, in der Rolle unconfined_r läuft und in der Domäne &#039;&#039;&#039;unconfined_t&#039;&#039;&#039; ausgeführt wird. s0-s0 ist ein MLS-Bereich, der in diesem Fall mit s0 identisch ist. Standardmäßig laufen Linux-Benutzer in der unconfined-Rolle.&lt;br /&gt;
&lt;br /&gt;
== Context setzen mit chcon ==&lt;br /&gt;
* Category und Sensitivity Label setzen mit chcat&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ | grep httpd&lt;br /&gt;
system_u:system_r:httpd_t:s0      16392 ?        00:00:01 apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
= To Cut =&lt;br /&gt;
&lt;br /&gt;
== Benutzer ==&lt;br /&gt;
; SELinux-Benutzeridentität&lt;br /&gt;
&lt;br /&gt;
Richtlinie bekannte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten MLS/MCS-Bereich autorisiert ist&lt;br /&gt;
* Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet&lt;br /&gt;
* Dadurch können Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen übernehmen&lt;br /&gt;
* Die zugeordnete SELinux-Benutzeridentität wird im SELinux-Kontext für Prozesse in dieser Sitzung verwendet, um zu definieren, welche Rollen und Ebenen sie betreten dürfen&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe kann von System zu System leicht abweichen:&lt;br /&gt;
* Die Spalte Login Name listet Linux-Benutzer auf&lt;br /&gt;
* Die Spalte SELinux User listet auf, welchem SELinux-Benutzer der Linux-Benutzer zugeordnet ist&lt;br /&gt;
&lt;br /&gt;
* Bei Prozessen legt der SELinux-Benutzer fest, auf welche Rollen und Ebenen zugegriffen werden kann&lt;br /&gt;
* Die Spalte MLS/MCS-Bereich gibt die Ebene an, die von Multi-Level Security (MLS) und Multi-Category Security (MCS) verwendet wird&lt;br /&gt;
* Die Spalte Dienst bestimmt den korrekten SELinux-Kontext, in dem der Linux-Benutzer am System angemeldet sein soll&lt;br /&gt;
&lt;br /&gt;
* Standardmäßig wird das Sternchen (*) verwendet, das für jeden beliebigen Dienst steht&lt;br /&gt;
&lt;br /&gt;
; Rolle&lt;br /&gt;
&lt;br /&gt;
; Teil von SELinux ist das Sicherheitsmodell der rollenbasierten Zugriffskontrolle (RBAC)&lt;br /&gt;
* Die Rolle ist ein Attribut von RBAC&lt;br /&gt;
* SELinux-Benutzer sind für Rollen autorisiert, und Rollen sind für Domänen autorisiert&lt;br /&gt;
&lt;br /&gt;
* Die Rolle dient als Vermittler zwischen Domänen und SELinux-Benutzern&lt;br /&gt;
* Die Rollen, auf die zugegriffen werden kann, bestimmen, auf welche Domänen zugegriffen werden kann; letztendlich steuert dies, auf welche Objekttypen zugegriffen werden kann&lt;br /&gt;
* Dies trägt dazu bei, die Anfälligkeit für Angriffe zur Rechteausweitung zu verringern&lt;br /&gt;
&lt;br /&gt;
; Typ&lt;br /&gt;
Der Typ ist ein Attribut der Typdurchsetzung&lt;br /&gt;
* Der Typ definiert eine Domäne für Prozesse und einen Typ für Dateien&lt;br /&gt;
* SELinux-Richtlinienregeln definieren, wie Typen aufeinander zugreifen können, sei es eine Domäne, die auf einen Typ zugreift, oder eine Domäne, die auf eine andere Domäne zugreift&lt;br /&gt;
* Zugriff ist nur erlaubt, wenn eine spezifische SELinux-Richtlinienregel existiert, die dies zulässt&lt;br /&gt;
&lt;br /&gt;
; level&lt;br /&gt;
Die Stufe ist ein Attribut von MLS und MCS&lt;br /&gt;
* Ein MLS-Bereich ist ein Paar von Stufen, das als lowlevel-highlevel geschrieben wird, wenn sich die Stufen unterscheiden, oder als lowlevel, wenn die Stufen identisch sind (s0-s0 entspricht s0)&lt;br /&gt;
&lt;br /&gt;
* Jede Stufe ist ein Paar aus Sensitivitätsstufe und Kategorie, wobei Kategorien optional sind&lt;br /&gt;
* Wenn Kategorien vorhanden sind, wird die Stufe als Sensitivitätsstufe:Kategoriengruppe geschrieben&lt;br /&gt;
* Wenn keine Kategorien vorhanden sind, wird sie als Sensitivitätsstufe geschrieben&lt;br /&gt;
&lt;br /&gt;
; Wenn die Kategoriengruppe eine zusammenhängende Reihe ist, kann sie abgekürzt werden&lt;br /&gt;
* Beispielsweise entspricht c0.c3 dem Ausdruck c0,c1,c2,c3&lt;br /&gt;
* Die Datei /etc/selinux/targeted/setrans.conf ordnet Stufen (s0:c0) einer für Menschen lesbaren Form zu (nämlich CompanyConfidential)&lt;br /&gt;
&lt;br /&gt;
* In Linux setzt die gezielte Richtlinie MCS durch, und in MCS gibt es nur eine Sensitivitätsstufe, s0&lt;br /&gt;
&lt;br /&gt;
* MCS in Linux unterstützt 1024 verschiedene Kategorien: c0 bis c1023. s0-s0:c0.c1023 entspricht der Sensitivitätsstufe s0 und ist für alle Kategorien autorisiert&lt;br /&gt;
&lt;br /&gt;
; MLS setzt das Bell-La-Padula-Modell für zwingenden Zugriff durch und wird in LSPP-Umgebungen (Labeled Security Protection Profile) verwendet&lt;br /&gt;
* Um MLS-Einschränkungen zu nutzen, installieren Sie das Paket selinux-policy-mls und konfigurieren Sie MLS als Standard-SELinux-Richtlinie&lt;br /&gt;
&lt;br /&gt;
* Die mit Linux gelieferte MLS-Richtlinie lässt viele Programmdomänen außer Acht, die nicht Teil der evaluierten Konfiguration waren, weshalb MLS auf einer Desktop-Workstation unbrauchbar ist (keine Unterstützung für das X Window System); es kann jedoch eine MLS-Richtlinie aus der vorgelagerten SELinux-Referenzrichtlinie erstellt werden, die alle Programmdomänen enthält&lt;br /&gt;
&lt;br /&gt;
; Weitere Informationen&lt;br /&gt;
zur MLS-Konfiguration finden Sie unter [[Linux/SELinux/04/13 Multi-Level Security]]&lt;br /&gt;
&lt;br /&gt;
== File Context Verwaltung ==&lt;br /&gt;
&#039;&#039;&#039;SELinux/File Context&#039;&#039;&#039; - Verhalten bei Dateisystemen mit und ohne xattr Unterstützung&lt;br /&gt;
&lt;br /&gt;
; Mount Optionen&lt;br /&gt;
* für SELinux (context=, defcontext=,	fs,context=, rootcontext=)&lt;br /&gt;
&lt;br /&gt;
ls -Z /usr/bin/passwd&lt;br /&gt;
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd&lt;br /&gt;
&lt;br /&gt;
ls -Z /etc/shadow&lt;br /&gt;
-r--------&lt;br /&gt;
root root system_u:object_r:shadow_t:s0 /etc/shadow&lt;br /&gt;
&lt;br /&gt;
* Der Typ shadow_t wird nur auf Dateien angewendet, die für eine Passwortänderung erforderlich sind&lt;br /&gt;
* Dazu gehören /etc/gshadow, /etc/shadow und deren Sicherungsdateien&lt;br /&gt;
&lt;br /&gt;
Eine SELinux-Richtlinienregel besagt, dass für die passwd_t-Domäne die entrypoint-Berechtigung auf den Typ passwd_exec_t gesetzt ist&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel ist nicht erschöpfend und dient als grundlegendes Beispiel zur Erläuterung des Domänenwechsels&lt;br /&gt;
* Obwohl es eine tatsächliche Regel gibt, die es Subjekten, die in der passwd_t-Domäne laufen, erlaubt, auf Objekte zuzugreifen, die mit dem Dateityp shadow_t gekennzeichnet sind, müssen andere SELinux-Richtlinienregeln erfüllt sein, bevor das Subjekt in eine neue Domäne wechseln kann&lt;br /&gt;
&lt;br /&gt;
: In diesem Beispiel stellt die Typdurchsetzung Folgendes sicher&lt;br /&gt;
* Die passwd_t-Domäne kann nur durch die Ausführung einer Anwendung betreten werden, die mit dem Typ passwd_exec_t gekennzeichnet ist; sie darf nur aus autorisierten gemeinsam genutzten Bibliotheken, wie z. B. dem Typ lib_t, ausführen; und sie darf keine anderen Anwendungen ausführen&lt;br /&gt;
* Nur autorisierte Domänen, wie z. B. passwd_t, können in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind&lt;br /&gt;
* Selbst wenn andere Prozesse mit Superuser-Rechten laufen, können diese Prozesse nicht in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind, da sie nicht in der Domäne passwd_t laufen&lt;br /&gt;
* Nur autorisierte Domänen können in die passwd_t-Domäne wechseln&lt;br /&gt;
* Beispielsweise hat der in der sendmail_t-Domäne laufende sendmail-Prozess keinen legitimen Grund, passwd&amp;lt;nowiki&amp;gt; auszuführen; daher kann er niemals in die &amp;lt;/nowiki&amp;gt;passwd_t-Domäne wechseln&lt;br /&gt;
* Prozesse, die in der passwd_t-Domäne laufen, können nur auf autorisierte Typen lesen und schreiben, wie z. B. Dateien, die mit den Typen etc_t oder shadow_t gekennzeichnet sind&lt;br /&gt;
* Dies verhindert, dass die passwd-Anwendung dazu verleitet wird, beliebige Dateien zu lesen oder zu schreiben&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie ein Terminal, z. B. über Anwendungen → Systemwerkzeuge → Terminal &lt;br /&gt;
# Führen Sie das Dienstprogramm passwd aus&lt;br /&gt;
&lt;br /&gt;
Geben Sie kein neues Passwort ein:&lt;br /&gt;
passwd&lt;br /&gt;
Passwort für Benutzer ‚&#039;user_name‘&#039; ändern&lt;br /&gt;
Passwort für ‚&#039;user_name‘&#039; ändern&lt;br /&gt;
(aktuelles) UNIX-Passwort:&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie einen neuen Tab oder ein weiteres Terminal und geben Sie den folgenden Befehl ein&lt;br /&gt;
Die Ausgabe sieht in etwa wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
Drücken Sie im ersten Tab/Terminal Strg+C, um das Dienstprogramm passwd abzubrechen&lt;br /&gt;
In diesem Beispiel wechselt der Shell-Prozess des Benutzers in die Domäne passwd_t, wenn das Dienstprogramm passwd (mit dem Typ passwd_exec_t gekennzeichnet) ausgeführt wird&lt;br /&gt;
* Beachten Sie, dass der Typ eine Domäne für Prozesse und einen Typ für Dateien definiert&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass es sich bei der folgenden Ausgabe um ein gekürztes Beispiel handelt, das auf Ihrem System abweichen kann:&lt;br /&gt;
&lt;br /&gt;
* Die Kategorien, auf die der Benutzer Zugriff hat, werden durch &amp;lt;tt&amp;gt;c0.c1023&amp;lt;/tt&amp;gt; definiert, was alle Kategorien (&amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; bis &amp;lt;tt&amp;gt;c1023&amp;lt;/tt&amp;gt;) umfasst.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Bestandteil&lt;br /&gt;
! Beispiel&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_u&#039;&#039;&lt;br /&gt;
| SELinux User. Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts.&lt;br /&gt;
|-&lt;br /&gt;
| role&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_r&#039;&#039;&lt;br /&gt;
| SELinux Role. Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen.&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_t&#039;&#039;&lt;br /&gt;
| SELinux Type - &#039;&#039;&#039;der wichtigste Bestandteil&#039;&#039;&#039; im Type-Enforcement-Modell. Der Typ wird in Zugriffsregeln ausgewertet und &#039;&#039;&#039;bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| &#039;&#039;s0&#039;&#039;&lt;br /&gt;
| SELinux Level - die Sicherheitsstufe. In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten. In vielen Standardszenarien erscheint hier einfach &#039;&#039;s0&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
--!&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
; Unterseiten&lt;br /&gt;
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}&lt;br /&gt;
----&lt;br /&gt;
; Inhalt der aktuellen Kategorie&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;Linux/SELinux&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]&lt;br /&gt;
&lt;br /&gt;
; Info-Pages &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
# [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#chap-Security-Enhanced_Linux-SELinux_Contexts Kapitel 2. SELinux-Kontexte]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{DEFAULTSORT:new}}&lt;br /&gt;
{{DISPLAYTITLE:new}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/01 Grundlagen/Installation|Linux/SELinux/03 Default Policy}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/02_Kontext&amp;diff=163534</id>
		<title>Linux/SELinux/02 Kontext</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/02_Kontext&amp;diff=163534"/>
		<updated>2026-03-29T22:59:12Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/02 Kontext&#039;&#039;&#039; - Security Context Verwaltung&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
; Kennzeichnung&lt;br /&gt;
Prozesse und Dateien werden mit einem Kontext gekennzeichnet&lt;br /&gt;
&lt;br /&gt;
; Kontext&lt;br /&gt;
* SELinux-Benutzer&lt;br /&gt;
* Rolle&lt;br /&gt;
* Typ&lt;br /&gt;
* Sicherheitsstufe&lt;br /&gt;
&lt;br /&gt;
; Ausführung von SELinux &lt;br /&gt;
Entscheidungen zur Zugriffskontrolle des Kontexts&lt;br /&gt;
&lt;br /&gt;
SELinux bietet eine Kombination aus&lt;br /&gt;
* [[Rollenbasierter Zugriffskontrolle]] ([[RBAC]])&lt;br /&gt;
* [[Typdurchsetzung]] ([[TE]])&lt;br /&gt;
* [[Mehrstufiger Sicherheit]] ([[MLS]])&lt;br /&gt;
&lt;br /&gt;
; Beispiele für SELinux-Kontexte&lt;br /&gt;
SELinux-Kontexte werden auf Prozessen, Linux-Benutzern und Dateien unter Linux-Betriebssystemen verwendet, auf denen SELinux läuft&lt;br /&gt;
&lt;br /&gt;
== Kontext-Syntax ==&lt;br /&gt;
 &#039;&#039;&#039;SELinuxUser:role:type:level&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Felder&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Bestandteil&lt;br /&gt;
! Beispiel&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| &amp;lt;name&amp;gt;_u&lt;br /&gt;
| SELinux-Benutzer&lt;br /&gt;
* Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts&lt;br /&gt;
|-&lt;br /&gt;
| role&lt;br /&gt;
| &amp;lt;name&amp;gt;_r&lt;br /&gt;
| SELinux-Rolle&lt;br /&gt;
* Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &#039;&#039;&#039;&amp;lt;name&amp;gt;_t&#039;&#039;&#039;&lt;br /&gt;
| SELinux-Typ – &#039;der wichtigste Bestandteil&#039; im Type-Enforcement-Modell&lt;br /&gt;
&lt;br /&gt;
* Der Typ wird in Zugriffsregeln ausgewertet und &#039;bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind&#039;&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| s0&lt;br /&gt;
| SELinux-Level – die Sicherheitsstufe&lt;br /&gt;
* In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten&lt;br /&gt;
* In vielen Standardszenarien erscheint hier einfach s0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Domänenübergänge ==&lt;br /&gt;
Ein Prozess in einer Domäne wechselt in eine andere Domäne, indem er eine Anwendung ausführt, die den Typ entrypoint für die neue Domäne hat&lt;br /&gt;
* Die Berechtigung entrypoint wird in der SELinux-Richtlinie verwendet und steuert, welche Anwendungen zum Betreten einer Domäne verwendet werden können&lt;br /&gt;
* Das folgende Beispiel veranschaulicht einen Domänenwechsel&lt;br /&gt;
&lt;br /&gt;
; Ein Beispiel für einen Domänenübergang&lt;br /&gt;
Ein Benutzer möchte sein Passwort ändern&lt;br /&gt;
* Dazu führt er das Dienstprogramm passwd aus&lt;br /&gt;
&lt;br /&gt;
Die ausführbare Datei /usr/bin/passwd ist mit dem Typ &#039;&#039;&#039;passwd_exec_t&#039;&#039;&#039; gekennzeichnet. Das Dienstprogramm passwd greift auf /etc/shadow zu, das mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; gekennzeichnet ist.&lt;br /&gt;
&lt;br /&gt;
Eine SELinux-Richtlinienregel besagt, dass Prozesse, die in der &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne laufen, Dateien lesen und schreiben dürfen, die mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; gekennzeichnet sind. &lt;br /&gt;
Wenn ein Benutzer das Dienstprogramm passwd ausführt, wechselt der Shell-Prozess des Benutzers in die &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne. Da bei SELinux die Standardaktion „Verweigern“ ist und eine Regel existiert, die Anwendungen, die in der &#039;&#039;&#039;passwd_t&#039;&#039;&#039;-Domäne laufen, den Zugriff auf Dateien mit dem Typ &#039;&#039;&#039;shadow_t&#039;&#039;&#039; erlaubt, darf die passwd-Anwendung auf /etc/shadow zugreifen und das Passwort des Benutzers aktualisieren.&lt;br /&gt;
&lt;br /&gt;
== Praxis: Kontexte anzeigen und ändern ==&lt;br /&gt;
&lt;br /&gt;
; SELinux-Kontext von Dateien und Verzeichnissen anzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; SELinux- und Linux-Benutzer&lt;br /&gt;
Geben Sie den folgenden Befehl als root ein, um eine Liste der Zuordnungen zwischen SELinux- und Linux-Benutzerkonten anzuzeigen (das Paket policycoreutils-python muss installiert sein):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage login -l&lt;br /&gt;
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst&lt;br /&gt;
&lt;br /&gt;
__default__ unconfined_u s0-s0:c0.c1023 *&lt;br /&gt;
root unconfined_u s0-s0:c0.c1023 *&lt;br /&gt;
system_u system_u s0-s0:c0.c1023 *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Prozesskontext&lt;br /&gt;
Verwenden Sie den Befehl ps -eZ, um den SELinux-Kontext für Prozesse anzuzeigen.&lt;br /&gt;
Anzeigen des SELinux-Kontexts für das Dienstprogramm passwd:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ | grep passwd&lt;br /&gt;
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um die SELinux-Kontexte aller laufenden Prozesse anzuzeigen, führen Sie das Dienstprogramm ps erneut aus:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ&lt;br /&gt;
system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient&lt;br /&gt;
system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd&lt;br /&gt;
system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm&lt;br /&gt;
system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond&lt;br /&gt;
system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops&lt;br /&gt;
system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Rolle system_r wird für Systemprozesse wie Daemons verwendet. Type Enforcement trennt dann jede Domäne.&lt;br /&gt;
&lt;br /&gt;
; Benutzerkontext&lt;br /&gt;
Verwenden Sie den folgenden Befehl, um den SELinux-Kontext anzuzeigen, der Ihrem Linux-Benutzer zugeordnet ist:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
id -Z&lt;br /&gt;
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser SELinux-Kontext zeigt, dass der Linux-Benutzer dem SELinux-Benutzer unconfined_u zugeordnet ist, in der Rolle unconfined_r läuft und in der Domäne &#039;&#039;&#039;unconfined_t&#039;&#039;&#039; ausgeführt wird. s0-s0 ist ein MLS-Bereich, der in diesem Fall mit s0 identisch ist. Standardmäßig laufen Linux-Benutzer in der unconfined-Rolle.&lt;br /&gt;
&lt;br /&gt;
== Context setzen mit chcon ==&lt;br /&gt;
* Category und Sensitivity Label setzen mit chcat&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ps -eZ | grep httpd&lt;br /&gt;
system_u:system_r:httpd_t:s0      16392 ?        00:00:01 apache2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= To Cut =&lt;br /&gt;
&lt;br /&gt;
== Benutzer ==&lt;br /&gt;
; SELinux-Benutzeridentität&lt;br /&gt;
&lt;br /&gt;
Richtlinie bekannte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten MLS/MCS-Bereich autorisiert ist&lt;br /&gt;
* Jeder Linux-Benutzer wird mithilfe der SELinux-Richtlinie einem SELinux-Benutzer zugeordnet&lt;br /&gt;
* Dadurch können Linux-Benutzer die für SELinux-Benutzer geltenden Einschränkungen übernehmen&lt;br /&gt;
* Die zugeordnete SELinux-Benutzeridentität wird im SELinux-Kontext für Prozesse in dieser Sitzung verwendet, um zu definieren, welche Rollen und Ebenen sie betreten dürfen&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe kann von System zu System leicht abweichen:&lt;br /&gt;
* Die Spalte Login Name listet Linux-Benutzer auf&lt;br /&gt;
* Die Spalte SELinux User listet auf, welchem SELinux-Benutzer der Linux-Benutzer zugeordnet ist&lt;br /&gt;
&lt;br /&gt;
* Bei Prozessen legt der SELinux-Benutzer fest, auf welche Rollen und Ebenen zugegriffen werden kann&lt;br /&gt;
* Die Spalte MLS/MCS-Bereich gibt die Ebene an, die von Multi-Level Security (MLS) und Multi-Category Security (MCS) verwendet wird&lt;br /&gt;
* Die Spalte Dienst bestimmt den korrekten SELinux-Kontext, in dem der Linux-Benutzer am System angemeldet sein soll&lt;br /&gt;
&lt;br /&gt;
* Standardmäßig wird das Sternchen (*) verwendet, das für jeden beliebigen Dienst steht&lt;br /&gt;
&lt;br /&gt;
; Rolle&lt;br /&gt;
&lt;br /&gt;
; Teil von SELinux ist das Sicherheitsmodell der rollenbasierten Zugriffskontrolle (RBAC)&lt;br /&gt;
* Die Rolle ist ein Attribut von RBAC&lt;br /&gt;
* SELinux-Benutzer sind für Rollen autorisiert, und Rollen sind für Domänen autorisiert&lt;br /&gt;
&lt;br /&gt;
* Die Rolle dient als Vermittler zwischen Domänen und SELinux-Benutzern&lt;br /&gt;
* Die Rollen, auf die zugegriffen werden kann, bestimmen, auf welche Domänen zugegriffen werden kann; letztendlich steuert dies, auf welche Objekttypen zugegriffen werden kann&lt;br /&gt;
* Dies trägt dazu bei, die Anfälligkeit für Angriffe zur Rechteausweitung zu verringern&lt;br /&gt;
&lt;br /&gt;
; Typ&lt;br /&gt;
Der Typ ist ein Attribut der Typdurchsetzung&lt;br /&gt;
* Der Typ definiert eine Domäne für Prozesse und einen Typ für Dateien&lt;br /&gt;
* SELinux-Richtlinienregeln definieren, wie Typen aufeinander zugreifen können, sei es eine Domäne, die auf einen Typ zugreift, oder eine Domäne, die auf eine andere Domäne zugreift&lt;br /&gt;
* Zugriff ist nur erlaubt, wenn eine spezifische SELinux-Richtlinienregel existiert, die dies zulässt&lt;br /&gt;
&lt;br /&gt;
; level&lt;br /&gt;
Die Stufe ist ein Attribut von MLS und MCS&lt;br /&gt;
* Ein MLS-Bereich ist ein Paar von Stufen, das als lowlevel-highlevel geschrieben wird, wenn sich die Stufen unterscheiden, oder als lowlevel, wenn die Stufen identisch sind (s0-s0 entspricht s0)&lt;br /&gt;
&lt;br /&gt;
* Jede Stufe ist ein Paar aus Sensitivitätsstufe und Kategorie, wobei Kategorien optional sind&lt;br /&gt;
* Wenn Kategorien vorhanden sind, wird die Stufe als Sensitivitätsstufe:Kategoriengruppe geschrieben&lt;br /&gt;
* Wenn keine Kategorien vorhanden sind, wird sie als Sensitivitätsstufe geschrieben&lt;br /&gt;
&lt;br /&gt;
; Wenn die Kategoriengruppe eine zusammenhängende Reihe ist, kann sie abgekürzt werden&lt;br /&gt;
* Beispielsweise entspricht c0.c3 dem Ausdruck c0,c1,c2,c3&lt;br /&gt;
* Die Datei /etc/selinux/targeted/setrans.conf ordnet Stufen (s0:c0) einer für Menschen lesbaren Form zu (nämlich CompanyConfidential)&lt;br /&gt;
&lt;br /&gt;
* In Linux setzt die gezielte Richtlinie MCS durch, und in MCS gibt es nur eine Sensitivitätsstufe, s0&lt;br /&gt;
&lt;br /&gt;
* MCS in Linux unterstützt 1024 verschiedene Kategorien: c0 bis c1023. s0-s0:c0.c1023 entspricht der Sensitivitätsstufe s0 und ist für alle Kategorien autorisiert&lt;br /&gt;
&lt;br /&gt;
; MLS setzt das Bell-La-Padula-Modell für zwingenden Zugriff durch und wird in LSPP-Umgebungen (Labeled Security Protection Profile) verwendet&lt;br /&gt;
* Um MLS-Einschränkungen zu nutzen, installieren Sie das Paket selinux-policy-mls und konfigurieren Sie MLS als Standard-SELinux-Richtlinie&lt;br /&gt;
&lt;br /&gt;
* Die mit Linux gelieferte MLS-Richtlinie lässt viele Programmdomänen außer Acht, die nicht Teil der evaluierten Konfiguration waren, weshalb MLS auf einer Desktop-Workstation unbrauchbar ist (keine Unterstützung für das X Window System); es kann jedoch eine MLS-Richtlinie aus der vorgelagerten SELinux-Referenzrichtlinie erstellt werden, die alle Programmdomänen enthält&lt;br /&gt;
&lt;br /&gt;
; Weitere Informationen&lt;br /&gt;
zur MLS-Konfiguration finden Sie unter [[Linux/SELinux/04/13 Multi-Level Security]]&lt;br /&gt;
&lt;br /&gt;
== File Context Verwaltung ==&lt;br /&gt;
&#039;&#039;&#039;SELinux/File Context&#039;&#039;&#039; - Verhalten bei Dateisystemen mit und ohne xattr Unterstützung&lt;br /&gt;
&lt;br /&gt;
; Mount Optionen&lt;br /&gt;
* für SELinux (context=, defcontext=,	fs,context=, rootcontext=)&lt;br /&gt;
&lt;br /&gt;
ls -Z /usr/bin/passwd&lt;br /&gt;
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd&lt;br /&gt;
&lt;br /&gt;
ls -Z /etc/shadow&lt;br /&gt;
-r--------&lt;br /&gt;
root root system_u:object_r:shadow_t:s0 /etc/shadow&lt;br /&gt;
&lt;br /&gt;
* Der Typ shadow_t wird nur auf Dateien angewendet, die für eine Passwortänderung erforderlich sind&lt;br /&gt;
* Dazu gehören /etc/gshadow, /etc/shadow und deren Sicherungsdateien&lt;br /&gt;
&lt;br /&gt;
Eine SELinux-Richtlinienregel besagt, dass für die passwd_t-Domäne die entrypoint-Berechtigung auf den Typ passwd_exec_t gesetzt ist&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel ist nicht erschöpfend und dient als grundlegendes Beispiel zur Erläuterung des Domänenwechsels&lt;br /&gt;
* Obwohl es eine tatsächliche Regel gibt, die es Subjekten, die in der passwd_t-Domäne laufen, erlaubt, auf Objekte zuzugreifen, die mit dem Dateityp shadow_t gekennzeichnet sind, müssen andere SELinux-Richtlinienregeln erfüllt sein, bevor das Subjekt in eine neue Domäne wechseln kann&lt;br /&gt;
&lt;br /&gt;
: In diesem Beispiel stellt die Typdurchsetzung Folgendes sicher&lt;br /&gt;
* Die passwd_t-Domäne kann nur durch die Ausführung einer Anwendung betreten werden, die mit dem Typ passwd_exec_t gekennzeichnet ist; sie darf nur aus autorisierten gemeinsam genutzten Bibliotheken, wie z. B. dem Typ lib_t, ausführen; und sie darf keine anderen Anwendungen ausführen&lt;br /&gt;
* Nur autorisierte Domänen, wie z. B. passwd_t, können in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind&lt;br /&gt;
* Selbst wenn andere Prozesse mit Superuser-Rechten laufen, können diese Prozesse nicht in Dateien schreiben, die mit dem Typ shadow_t gekennzeichnet sind, da sie nicht in der Domäne passwd_t laufen&lt;br /&gt;
* Nur autorisierte Domänen können in die passwd_t-Domäne wechseln&lt;br /&gt;
* Beispielsweise hat der in der sendmail_t-Domäne laufende sendmail-Prozess keinen legitimen Grund, passwd&amp;lt;nowiki&amp;gt; auszuführen; daher kann er niemals in die &amp;lt;/nowiki&amp;gt;passwd_t-Domäne wechseln&lt;br /&gt;
* Prozesse, die in der passwd_t-Domäne laufen, können nur auf autorisierte Typen lesen und schreiben, wie z. B. Dateien, die mit den Typen etc_t oder shadow_t gekennzeichnet sind&lt;br /&gt;
* Dies verhindert, dass die passwd-Anwendung dazu verleitet wird, beliebige Dateien zu lesen oder zu schreiben&lt;br /&gt;
&lt;br /&gt;
# Öffnen Sie ein Terminal, z. B. über Anwendungen → Systemwerkzeuge → Terminal &lt;br /&gt;
# Führen Sie das Dienstprogramm passwd aus&lt;br /&gt;
&lt;br /&gt;
Geben Sie kein neues Passwort ein:&lt;br /&gt;
passwd&lt;br /&gt;
Passwort für Benutzer ‚&#039;user_name‘&#039; ändern&lt;br /&gt;
Passwort für ‚&#039;user_name‘&#039; ändern&lt;br /&gt;
(aktuelles) UNIX-Passwort:&lt;br /&gt;
&lt;br /&gt;
Öffnen Sie einen neuen Tab oder ein weiteres Terminal und geben Sie den folgenden Befehl ein&lt;br /&gt;
Die Ausgabe sieht in etwa wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
Drücken Sie im ersten Tab/Terminal Strg+C, um das Dienstprogramm passwd abzubrechen&lt;br /&gt;
In diesem Beispiel wechselt der Shell-Prozess des Benutzers in die Domäne passwd_t, wenn das Dienstprogramm passwd (mit dem Typ passwd_exec_t gekennzeichnet) ausgeführt wird&lt;br /&gt;
* Beachten Sie, dass der Typ eine Domäne für Prozesse und einen Typ für Dateien definiert&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass es sich bei der folgenden Ausgabe um ein gekürztes Beispiel handelt, das auf Ihrem System abweichen kann:&lt;br /&gt;
&lt;br /&gt;
* Die Kategorien, auf die der Benutzer Zugriff hat, werden durch &amp;lt;tt&amp;gt;c0.c1023&amp;lt;/tt&amp;gt; definiert, was alle Kategorien (&amp;lt;tt&amp;gt;c0&amp;lt;/tt&amp;gt; bis &amp;lt;tt&amp;gt;c1023&amp;lt;/tt&amp;gt;) umfasst.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
! Bestandteil&lt;br /&gt;
! Beispiel&lt;br /&gt;
! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| user&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_u&#039;&#039;&lt;br /&gt;
| SELinux User. Dieser Teil des Kontexts beschreibt die SELinux-Identität eines Subjekts oder Objekts.&lt;br /&gt;
|-&lt;br /&gt;
| role&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_r&#039;&#039;&lt;br /&gt;
| SELinux Role. Sie wird vor allem bei Prozessen und beim Login verwendet und legt fest, welche Domänen einem Subjekt zugeordnet werden dürfen.&lt;br /&gt;
|-&lt;br /&gt;
| type&lt;br /&gt;
| &#039;&#039;&amp;lt;name&amp;gt;_t&#039;&#039;&lt;br /&gt;
| SELinux Type - &#039;&#039;&#039;der wichtigste Bestandteil&#039;&#039;&#039; im Type-Enforcement-Modell. Der Typ wird in Zugriffsregeln ausgewertet und &#039;&#039;&#039;bestimmt maßgeblich, welche Zugriffe für Prozesse und Objekte erlaubt sind&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| &#039;&#039;s0&#039;&#039;&lt;br /&gt;
| SELinux Level - die Sicherheitsstufe. In MLS- oder MCS-Szenarien kann dieser Teil auch einen Bereich mit Kategorien enthalten. In vielen Standardszenarien erscheint hier einfach &#039;&#039;s0&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
; Unterseiten&lt;br /&gt;
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}&lt;br /&gt;
----&lt;br /&gt;
; Inhalt der aktuellen Kategorie&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;Linux/SELinux&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/procps/pgrep.1.de.html prep(1)]&lt;br /&gt;
&lt;br /&gt;
; Info-Pages &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
# [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#chap-Security-Enhanced_Linux-SELinux_Contexts Kapitel 2. SELinux-Kontexte]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{DEFAULTSORT:new}}&lt;br /&gt;
{{DISPLAYTITLE:new}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{Navigation|Linux/SELinux/01 Grundlagen/Installation|Linux/SELinux/03 Default Policy}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/05_SEPolicy&amp;diff=163465</id>
		<title>Linux/SELinux/05 SEPolicy</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/05_SEPolicy&amp;diff=163465"/>
		<updated>2026-03-29T17:31:13Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Linux/SELinux/05 SEPolicy&#039;&#039;&#039; - Sepolicy-Suite&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
&#039;&#039;&#039;[[sepolicy]]&#039;&#039;&#039; bietet eine Reihe von Funktionen zur Abfrage der installierten SELinux-Richtlinie&lt;br /&gt;
* Diese Funktionen sind entweder neu oder wurden zuvor von separaten Dienstprogrammen wie &#039;&#039;&#039;[[sepolgen]]&#039;&#039;&#039; oder &#039;&#039;&#039;[[setrans]]&#039;&#039;&#039; bereitgestellt&lt;br /&gt;
* Mit dieser Suite können Sie Übergangsberichte, Manpages oder sogar neue Richtlinienmodule erstellen, wodurch Benutzer einen einfacheren Zugang zur SELinux-Richtlinie erhalten und diese besser verstehen können&lt;br /&gt;
&lt;br /&gt;
Das Paket [[policycoreutils-devel]] stellt [[sepolicy]] bereit&lt;br /&gt;
&lt;br /&gt;
Geben Sie als Root-Benutzer den folgenden Befehl ein, um [[sepolicy]] zu installieren&lt;br /&gt;
 sudo yum install policycoreutils-devel&lt;br /&gt;
&lt;br /&gt;
; Funktionen von sepolicy&lt;br /&gt;
Die &#039;&#039;&#039;sepolicy&#039;&#039;&#039;-Suite bietet die folgenden Funktionen, die als Befehlszeilenparameter aufgerufen werden:&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
|booleans&lt;br /&gt;
|Abfrage der SELinux-Richtlinie zur Anzeige der Beschreibung von Booleschen Werten&lt;br /&gt;
|-&lt;br /&gt;
|communicate&lt;br /&gt;
|Abfrage der SELinux-Richtlinie, um zu prüfen, ob Domänen miteinander kommunizieren können&lt;br /&gt;
|-&lt;br /&gt;
|generate&lt;br /&gt;
|Erstellung einer Vorlage für ein SELinux-Richtlinienmodul&lt;br /&gt;
|-&lt;br /&gt;
|gui&lt;br /&gt;
|Grafische Benutzeroberfläche für die SELinux-Richtlinie&lt;br /&gt;
|-&lt;br /&gt;
|interface&lt;br /&gt;
|Auflistung der SELinux-Richtlinien-Schnittstellen&lt;br /&gt;
|-&lt;br /&gt;
|manpage&lt;br /&gt;
|SELinux-Manpages generieren&lt;br /&gt;
|-&lt;br /&gt;
|network&lt;br /&gt;
|Netzwerkinformationen der SELinux-Richtlinie abfragen&lt;br /&gt;
|-&lt;br /&gt;
|transition&lt;br /&gt;
|SELinux-Richtlinie abfragen und einen Prozessübergangsbericht generieren&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python-Bindings ==&lt;br /&gt;
; sepolicy-Python-Bindings&lt;br /&gt;
In früheren Linux-Versionen enthielt das setools-Paket die Dienstprogramme &#039;&#039;&#039;sesearch&#039;&#039;&#039; und &#039;&#039;&#039;seinfo&#039;&#039;&#039;&lt;br /&gt;
* Das Dienstprogramm &#039;&#039;&#039;sesearch&#039;&#039;&#039; dient zum Suchen von Regeln in einer SELinux-Richtlinie, während das Dienstprogramm &#039;&#039;&#039;seinfo&#039;&#039;&#039; es ermöglicht, verschiedene andere Komponenten der Richtlinie abzufragen&lt;br /&gt;
&lt;br /&gt;
In Linux wurden Python-Bindings für &#039;&#039;&#039;sesearch&#039;&#039;&#039; und &#039;&#039;&#039;seinfo&#039;&#039;&#039; hinzugefügt, sodass Sie die Funktionalität dieser Dienstprogramme über die &#039;&#039;&#039;sepolicy&#039;&#039;&#039;-Suite nutzen können&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
 &amp;gt; python&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; import sepolicy&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; sepolicy.info(sepolicy.ATTRIBUTE)&lt;br /&gt;
 Returns a dictionary of all information about SELinux Attributes&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;sepolicy.search([sepolicy.ALLOW])&lt;br /&gt;
 Returns a dictionary of all allow rules in the policy.&lt;br /&gt;
&lt;br /&gt;
== Richtlinienmodule ==&lt;br /&gt;
Richtlinienmodule generieren&lt;br /&gt;
&lt;br /&gt;
; sepolicy generate&lt;br /&gt;
In früheren Linux-Versionen wurden die Dienstprogramme &#039;&#039;&#039;sepolgen&#039;&#039;&#039; oder &#039;&#039;&#039;selinux-polgengui&#039;&#039;&#039; zum Generieren einer SELinux-Richtlinie verwendet&lt;br /&gt;
* Diese Tools wurden in die &#039;&#039;&#039;sepolicy&#039;&#039;&#039;-Suite integriert&lt;br /&gt;
* Unter Linux wird der Befehl &#039;&#039;&#039;sepolicy generate&#039;&#039;&#039; verwendet, um eine erste Vorlage für ein SELinux-Richtlinienmodul zu generieren&lt;br /&gt;
&lt;br /&gt;
Im Gegensatz zu &#039;&#039;&#039;sepolgen&#039;&#039;&#039; ist es nicht erforderlich, &#039;&#039;&#039;sepolicy generate&#039;&#039;&#039; als Root-Benutzer auszuführen&lt;br /&gt;
* Dieses Dienstprogramm erstellt außerdem eine RPM-Spec-Datei, mit der ein RPM-Paket erstellt werden kann, das die Policy-Paketdatei (&#039;&#039;NAME&#039;&#039;.pp) und die Schnittstellendatei (&#039;&#039;NAME&#039;&#039;.if) am richtigen Ort installiert, die SELinux-Policy in den Kernel integriert und die Labeling-Einstellungen anpasst&lt;br /&gt;
* Das Setup-Skript installiert anschließend die SELinux-Policy und richtet das Labeling ein&lt;br /&gt;
* Darüber hinaus wird mit dem Befehl &#039;&#039;&#039;sepolicy manpage&#039;&#039;&#039; eine Handbuchseite basierend auf der installierten Richtlinie generiert. [7] Schließlich erstellt und kompiliert &#039;&#039;&#039;sepolicy generate&#039;&#039;&#039; die SELinux-Richtlinie und die Handbuchseite zu einem RPM-Paket, das zur Installation auf anderen Systemen bereit ist&lt;br /&gt;
&lt;br /&gt;
; &#039;&#039;sepolicy generate&#039;&#039; erzeugt folgenden Dateien&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
| &#039;&#039;NAME&#039;&#039;.te || Typ-Enforcing-Datei || Diese Datei definiert alle Typen und Regeln für eine bestimmte Domäne&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;NAME&#039;&#039;.if || Schnittstellendatei || Diese Datei definiert den Standard-Dateikontext für das System&lt;br /&gt;
* Sie übernimmt die in der Datei &#039;&#039;&#039;NAME.te&#039;&#039;&#039; erstellten Dateitypen und ordnet den Typen Dateipfade zu&lt;br /&gt;
* Dienstprogramme wie &#039;&#039;&#039;restorecon&#039;&#039;&#039; und &#039;&#039;&#039;rpm&#039;&#039;&#039; verwenden diese Pfade, um Labels zu schreiben&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;NAME&#039;&#039;_selinux.spec || RPM-Spezifikationsdatei || Diese Datei ist eine RPM-Spezifikationsdatei, die die SELinux-Richtlinie installiert und die Labeling-Einstellungen vornimmt&lt;br /&gt;
* Diese Datei installiert außerdem die Schnittstellendatei und eine Man-Seite, die die Richtlinie beschreibt&lt;br /&gt;
* Sie können den Befehl &#039;&#039;&#039;sepolicy manpage -d &#039;&#039;&#039;NAME&#039;&#039;&#039; verwenden, um die Man-Seite zu generieren&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;NAME&#039;&#039;.sh || Hilfs-Shell-Skript || Dieses Skript hilft beim Kompilieren, Installieren und Korrigieren der Kennzeichnung auf dem System&lt;br /&gt;
* Es generiert außerdem eine Man-Seite basierend auf der installierten Richtlinie, kompiliert und erstellt ein RPM-Paket, das für die Installation auf anderen Systemen geeignet ist&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn es möglich ist, ein SELinux-Richtlinienmodul zu generieren, gibt &#039;&#039;&#039;sepolicy generate&#039;&#039;&#039; alle generierten Pfade von der Quelldomäne zur Zieldomäne aus&lt;br /&gt;
* Weitere Informationen zu &#039;&#039;&#039;sepolicy generate&#039;&#039;&#039; finden Sie auf der Man-Seite sepolicy-generate(8)&lt;br /&gt;
&lt;br /&gt;
== Domänenübergänge ==&lt;br /&gt;
Domänenübergänge verstehen&lt;br /&gt;
&lt;br /&gt;
; sepolicy transition&lt;br /&gt;
Früher wurde das Dienstprogramm &#039;&#039;&#039;setrans&#039;&#039;&#039; verwendet, um zu prüfen, ob ein Übergang zwischen zwei Domänen- oder Prozesstypen möglich ist, und es gab alle Zwischentypen aus, die für den Übergang zwischen diesen Domänen oder Prozessen verwendet werden&lt;br /&gt;
* Unter Linux ist &#039;&#039;&#039;setrans&#039;&#039;&#039; als Teil der &#039;&#039;&#039;sepolicy&#039;&#039;&#039;-Suite verfügbar, und stattdessen wird nun der Befehl &#039;&#039;&#039;sepolicy transition&#039;&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
Der Befehl &#039;&#039;&#039;sepolicy transition&#039;&#039;&#039; fragt eine SELinux-Richtlinie ab und erstellt einen Prozessübergangsbericht&lt;br /&gt;
* Der Befehl &#039;&#039;&#039;sepolicy transition&#039;&#039;&#039; benötigt zwei Befehlszeilenargumente – eine Quelldomäne (angegeben mit der Option ‚‘-s&#039;‚) und eine Zieldomäne (angegeben mit der Option &#039;&#039;&#039;-t&#039;&#039;&#039;)&lt;br /&gt;
* Wenn nur die Quelldomäne angegeben wird, listet &#039;&#039;&#039;sepolicy transition&#039;&#039;&#039; alle möglichen Domänen auf, zu denen die Quelldomäne wechseln kann&lt;br /&gt;
* Die folgende Ausgabe enthält nicht alle Einträge&lt;br /&gt;
&lt;br /&gt;
Das Zeichen &#039;&#039;&#039;@&#039;&#039;&#039; bedeutet &#039;&#039;&#039;ausführen&#039;&#039;&#039;:&lt;br /&gt;
 sepolicy transition -s httpd_t&lt;br /&gt;
  httpd_t @ httpd_suexec_exec_t --&amp;gt; httpd_suexec_t&lt;br /&gt;
  httpd_t @ mailman_cgi_exec_t --&amp;gt; mailman_cgi_t&lt;br /&gt;
  httpd_t @ abrt_retrace_worker_exec_t --&amp;gt; abrt_retrace_worker_t&lt;br /&gt;
  httpd_t @ dirsrvadmin_unconfined_script_exec_t --&amp;gt; dirsrvadmin_unconfined_script_t&lt;br /&gt;
  httpd_t @ httpd_unconfined_script_exec_t --&amp;gt; httpd_unconfined_script_t&lt;br /&gt;
&lt;br /&gt;
Wenn die Zieldomäne angegeben ist, untersucht &#039;&#039;&#039;sepolicy transition&#039;&#039;&#039; die SELinux-Richtlinie auf alle Übergangspfade von der Quelldomäne zur Zieldomäne und listet diese Pfade auf&lt;br /&gt;
&lt;br /&gt;
Die folgende Ausgabe ist unvollständig: &lt;br /&gt;
 sepolicy transition -s httpd_t -t system_mail_t&lt;br /&gt;
  httpd_t @ exim_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
  httpd_t @ courier_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
  httpd_t @ sendmail_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
  httpd_t ... httpd_suexec_t @ sendmail_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
  httpd_t ... httpd_suexec_t @ exim_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
  httpd_t ... httpd_suexec_t @ courier_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
  httpd_t ... httpd_suexec_t ... httpd_mojomojo_script_t @ sendmail_exec_t --&amp;gt; system_mail_t&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zum &#039;&#039;&#039;sepolicy-transition&#039;&#039;&#039; finden Sie in der sepolicy-transition(8)-Handbuchseite&lt;br /&gt;
&lt;br /&gt;
== Manpage erstellen ==&lt;br /&gt;
; Erstellen von Handbuchseiten: sepolicy manpage&lt;br /&gt;
Der Befehl &#039;&#039;&#039;sepolicy manpage&#039;&#039;&#039; generiert Handbuchseiten auf Basis der SELinux-Richtlinie, die Prozessdomänen dokumentieren&lt;br /&gt;
* Dadurch ist diese Dokumentation stets auf dem neuesten Stand&lt;br /&gt;
* Jeder Name der automatisch generierten Handbuchseiten besteht aus dem Namen der Prozessdomäne und dem Suffix &#039;&#039;&#039;_selinux&#039;&#039;&#039;, zum Beispiel &#039;&#039;&#039;httpd_selinux&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Handbuchseiten enthalten mehrere Abschnitte, die Informationen zu verschiedenen Teilen der SELinux-Richtlinie für eingeschränkte Domänen bereitstellen:&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
| Entrypoints || enthält alle ausführbaren Dateien, die während eines Domänenübergangs ausgeführt werden müssen&lt;br /&gt;
|-&lt;br /&gt;
| Process Types || listet alle Prozesstypen auf, die mit demselben Präfix wie die Zieldomäne beginnen&lt;br /&gt;
|-&lt;br /&gt;
| Booleans || listet die mit der Domäne verbundenen Booleschen Werte auf&lt;br /&gt;
|-&lt;br /&gt;
| Port Types || enthält die Porttypen, die mit demselben Präfix wie die Domäne übereinstimmen, und beschreibt die diesen Porttypen zugewiesenen Standardportnummern&lt;br /&gt;
|-&lt;br /&gt;
| Managed Files || beschreibt die Typen, in die die Domäne schreiben darf, sowie die diesen Typen zugeordneten Standardpfade&lt;br /&gt;
|-&lt;br /&gt;
| File Contexts || enthält alle mit der Domäne verbundenen Dateitypen und beschreibt, wie diese Dateitypen zusammen mit der Standard-Pfadkennzeichnung auf einem System verwendet werden&lt;br /&gt;
|-&lt;br /&gt;
| Sharing Files || erläutert die Verwendung der Domänen-Freigabetypen, wie &#039;&#039;&#039;public_content_t&#039;&#039;&#039;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu &#039;&#039;&#039;sepolicy manpage&#039;&#039;&#039; finden Sie auf der sepolicy-manpage(8)-Handbuchseite&lt;br /&gt;
&lt;br /&gt;
[7] Weitere Informationen zu &#039;&#039;&#039;sepolicy manpage&#039;&#039;&#039; finden Sie in Abschnitt &#039;&#039;&#039;[[Erstellen von Handbuchseiten]]: &#039;&#039;&#039;sepolicy manpage&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Debian = &lt;br /&gt;
== Arbeit mit Modulen ==&lt;br /&gt;
Um eine maximale Performance auf Ebene der Systemaufrufe (Syscalls) zu gewährleisten, verwendet SELinux eine &#039;&#039;kompilierte binäre Zugriffsmatrix&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Der Quellcode der Policy (Type Enforcement-Dateien — &#039;&#039;.te&#039;&#039;) muss eine spezielle Kompilierungs- und Build-Pipeline durchlaufen, bevor er in den Kernel geladen werden kann.&lt;br /&gt;
&lt;br /&gt;
Diese Pipeline besteht aus drei wesentlichen Werkzeugen:&lt;br /&gt;
&lt;br /&gt;
=== checkmodule ===&lt;br /&gt;
Dieses Tool nimmt eine Textdatei (&#039;&#039;.te&#039;&#039;), prüft deren Syntax und kompiliert sie in ein binäres Zwischenformat — ein Modul (&#039;&#039;.mod&#039;&#039;). In diesem Schritt stellt das Programm sicher, dass alle deklarierten Typen und Klassen tatsächlich existieren.&lt;br /&gt;
&lt;br /&gt;
; Wichtige Optionen:&lt;br /&gt;
* &#039;&#039;-M&#039;&#039;: Aktiviert die Unterstützung für MLS/MCS. Bei modernen Distributionen ist diese Option &#039;&#039;&#039;zwingend erforderlich&#039;&#039;&#039;, da deren Basis-Policies Kategorien verwenden.&lt;br /&gt;
* &#039;&#039;-m&#039;&#039;: Gibt an, dass ein ladbares Modul für eine bereits existierende Policy kompiliert wird.&lt;br /&gt;
* &#039;&#039;-o &amp;lt;FILE.mod&amp;gt;&#039;&#039;: Legt den Namen der ausgegebenen kompilierten Datei fest.&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
checkmodule -M -m -o my_rule.mod my_rule.te&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semodule_package ===&lt;br /&gt;
Der SELinux-Kernel akzeptiert keine &#039;&#039;.mod&#039;&#039;-Dateien direkt. Diese müssen in ein spezielles Policy-Paket — Policy Package (&#039;&#039;.pp&#039;&#039;) — verpackt werden. Der Packager nimmt das kompilierte Modul und fügt (falls erforderlich) Dateikontext-Regeln hinzu.&lt;br /&gt;
&lt;br /&gt;
; Wichtige Optionen&lt;br /&gt;
* &#039;&#039;-m &amp;lt;FILE.mod&amp;gt;&#039;&#039;: Gibt das binäre Eingangsmodul an.&lt;br /&gt;
* &#039;&#039;-o &amp;lt;FILE.pp&amp;gt;&#039;&#039;: Legt den Namen des resultierenden Policy-Pakets fest.&lt;br /&gt;
* &#039;&#039;-fc &amp;lt;FILE.fc&amp;gt;&#039;&#039;: &#039;&#039;(Optional)&#039;&#039; Fügt eine Datei mit Regeln zur Markierung des Dateisystems (File Contexts) hinzu.&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semodule_package -o my_rule.pp -m my_rule.mod&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== semodule ===&lt;br /&gt;
Dies ist das primäre Administrationswerkzeug zur Verwaltung der im System geladenen Module. Es integriert das fertige Paket (&#039;&#039;.pp&#039;&#039;) in die aktive SELinux-Datenbank und wendet die Regeln im laufenden Betrieb an, ohne dass ein Systemneustart erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
; Wichtige Optionen&lt;br /&gt;
* &#039;&#039;-i &amp;lt;FILE.pp&amp;gt;&#039;&#039;: Ein neues Modul installieren oder ein bestehendes aktualisieren.&lt;br /&gt;
* &#039;&#039;-r &amp;lt;MODULE_NAME&amp;gt;&#039;&#039;: Ein installiertes Modul aus dem System entfernen.&lt;br /&gt;
* &#039;&#039;-l&#039;&#039;: Listet alle aktuell geladenen Module auf.&lt;br /&gt;
* &#039;&#039;-X &amp;lt;PRIORITY&amp;gt;&#039;&#039;: Legt die Priorität des Moduls fest (standardmäßig werden benutzerdefinierte Module mit der Priorität 400 installiert).&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semodule -i my_rule.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{navigation|Linux/SELinux/04/16 Miniaturansichten|Linux/SELinux/06 Benutzer}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung/L%C3%B6sungen&amp;diff=163462</id>
		<title>Linux/SELinux/11 Fehlerbehebung/Lösungen</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung/L%C3%B6sungen&amp;diff=163462"/>
		<updated>2026-03-29T17:15:25Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;SELinux/11 Fehlerbehebung/Lösungen&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Lösungen ===&lt;br /&gt;
; Hilfe bei der Fehlerbehebung&lt;br /&gt;
* Überprüfung von Linux-Berechtigungen, die vor den SELinux-Regeln geprüft werden&lt;br /&gt;
* mögliche Ursachen dafür, dass SELinux den Zugriff verweigert, aber keine Verweigerungen protokolliert werden&lt;br /&gt;
* Handbuchseiten für Dienste, die Informationen zu Labeling und Booleschen Werten enthalten&lt;br /&gt;
* permissive Domänen, um einem einzelnen Prozess statt dem gesamten System permissives Verhalten zu ermöglichen&lt;br /&gt;
* Suchen und Anzeigen von Verweigerungsmeldungen&lt;br /&gt;
* Analysieren von Verweigerungen&lt;br /&gt;
* Erstellen benutzerdefinierter Policy-Module&lt;br /&gt;
&lt;br /&gt;
=== Linux-Berechtigungen ===&lt;br /&gt;
Wenn der Zugriff verweigert wird, überprüfen Sie die Standard-Linux-Berechtigungen&lt;br /&gt;
* Wie in Kapitel&amp;amp;nbsp;1,Einführung, erwähnt, verwenden die meisten Betriebssysteme ein Discretionary Access Control (DAC)-System zur Zugriffskontrolle, das es Benutzern ermöglicht, die Berechtigungen für Dateien zu steuern, deren Eigentümer sie sind&lt;br /&gt;
* SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft&lt;br /&gt;
* SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff bereits verweigert haben&lt;br /&gt;
&lt;br /&gt;
Wenn der Zugriff verweigert wird und keine SELinux-Verweigerungen protokolliert werden, verwenden Sie den folgenden Befehl, um die Standard-Linux-Berechtigungen anzuzeigen:&lt;br /&gt;
 ls -l /var/www/html/index.html&lt;br /&gt;
 -rw-r----- 1 root root 0 2009-05-07 11:06 index.html&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel gehört die Datei &#039;&#039;&#039;index.html&#039;&#039;&#039; dem Root-Benutzer und der Root-Gruppe&lt;br /&gt;
* Der Root-Benutzer verfügt über Lese- und Schreibrechte (&#039;&#039;&#039;-rw&#039;&#039;&#039;), und Mitglieder der Root-Gruppe haben Leserechte (&#039;&#039;&#039;-r-&#039;&#039;&#039;)&lt;br /&gt;
* Alle anderen haben keinen Zugriff (&#039;&#039;&#039;---&#039;&#039;&#039;)&lt;br /&gt;
* Standardmäßig erlauben solche Berechtigungen &#039;&#039;&#039;httpd&#039;&#039;&#039; nicht, diese Datei zu lesen&lt;br /&gt;
* Um dieses Problem zu beheben, verwenden Sie den Befehl &#039;&#039;&#039;chown&#039;&#039;&#039;, um den Eigentümer und die Gruppe zu ändern&lt;br /&gt;
* Dieser Befehl muss als root ausgeführt werden:&lt;br /&gt;
 sudo chown apache:apache /var/www/html/index.html&lt;br /&gt;
&lt;br /&gt;
Dies setzt die Standardkonfiguration voraus, in der &#039;&#039;&#039;httpd&#039;&#039;&#039; als Linux-Apache-Benutzer läuft&lt;br /&gt;
* Wenn Sie &#039;&#039;&#039;httpd&#039;&#039;&#039; mit einem anderen Benutzer ausführen, ersetzen Sie &#039;&#039;&#039;apache:apache&#039;&#039;&#039; durch diesen Benutzer&lt;br /&gt;
&lt;br /&gt;
Informationen zur Verwaltung von Linux-Berechtigungen finden Sie im Entwurf „Permissions“ des Fedora Documentation Project&lt;br /&gt;
&lt;br /&gt;
=== Stille Zugriffsverweigerungen ===&lt;br /&gt;
; Mögliche Ursachen für stille Zugriffsverweigerungen&lt;br /&gt;
In bestimmten Situationen werden AVC-Verweigerungsmeldungen möglicherweise nicht protokolliert, wenn SELinux den Zugriff verweigert&lt;br /&gt;
* Anwendungen und Systembibliotheksfunktionen versuchen oft, mehr Zugriff zu erlangen, als für die Ausführung ihrer Aufgaben erforderlich ist&lt;br /&gt;
* Um das Prinzip der geringsten Privilegien zu wahren, ohne die Audit-Protokolle mit AVC-Verweigerungen für harmlose Anwendungsversuche zu überfluten, kann die Richtlinie AVC-Verweigerungen unterdrücken, ohne die Berechtigung zu erteilen, indem sie „dontaudit“-Regeln verwendet&lt;br /&gt;
* Diese Regeln sind in Standardrichtlinien üblich&lt;br /&gt;
* Der Nachteil von „dontaudit“ ist, dass, obwohl SELinux den Zugriff verweigert, keine Verweigerungsmeldungen protokolliert werden, was die Fehlerbehebung erschwert&lt;br /&gt;
&lt;br /&gt;
Um „dontaudit“-Regeln vorübergehend zu deaktivieren, sodass alle Verweigerungen protokolliert werden, geben Sie als Root den folgenden Befehl ein:&lt;br /&gt;
 sudo semodule -DB&lt;br /&gt;
&lt;br /&gt;
Die Option &#039;&#039;&#039;-D&#039;&#039;&#039; deaktiviert die „dontaudit“-Regeln; die Option &#039;&#039;&#039;-B&#039;&#039;&#039; erstellt die Richtlinie neu&lt;br /&gt;
* Versuchen Sie nach dem Ausführen von &#039;&#039;&#039;semodule -DB&#039;&#039;&#039; die Anwendung auszuführen, bei der zuvor Berechtigungsprobleme auftraten, und prüfen Sie, ob SELinux-Ablehnungen – die für die Anwendung relevant sind – nun protokolliert werden&lt;br /&gt;
* Seien Sie vorsichtig bei der Entscheidung, welche Verweigerungen zugelassen werden sollen, da einige ignoriert und durch dontaudit-Regeln behandelt werden sollten&lt;br /&gt;
* Wenn Sie Zweifel haben oder Rat suchen, wenden Sie sich an andere SELinux-Benutzer und -Entwickler in einer SELinux-Mailingliste, wie fedora-selinux-list&lt;br /&gt;
&lt;br /&gt;
Um die Richtlinie neu zu erstellen und &#039;&#039;&#039;dontaudit&#039;&#039;&#039; -Regeln zu aktivieren, geben Sie als Root den folgenden Befehl ein:&lt;br /&gt;
 sudo semodule -B&lt;br /&gt;
&lt;br /&gt;
Dadurch wird die Richtlinie in ihren ursprünglichen Zustand zurückversetzt&lt;br /&gt;
* Für eine vollständige Liste der dontaudit-Regeln führen Sie den Befehl &#039;&#039;&#039;sesearch --dontaudit&#039;&#039;&#039; aus&lt;br /&gt;
* Grenzen Sie die Suche mit der Option &#039;&#039;&#039;-sdomain&#039;&#039;&#039; und dem Befehl &#039;&#039;&#039;grep&#039;&#039;&#039; ein&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
 sesearch --dontaudit -s smbd_t | grep squid&lt;br /&gt;
 dontaudit smbd_t squid_port_t : tcp_socket name_bind ;&lt;br /&gt;
 dontaudit smbd_t squid_port_t : udp_socket name_bind ;&lt;br /&gt;
&lt;br /&gt;
Siehe Abschnitt „[[Raw Audit Messages]]“ und Abschnitt „[ [sealert-Meldungen]]“ für Informationen zur Analyse von Zugriffsverweigerungen&lt;br /&gt;
&lt;br /&gt;
=== Handbuchseiten für Dienste ===&lt;br /&gt;
Handbuchseiten für Dienste enthalten wertvolle Informationen, beispielsweise welchen Dateityp in einer bestimmten Situation zu verwenden ist, sowie boolesche Werte zur Änderung der Zugriffsrechte eines Dienstes (wie &#039;&#039;&#039;httpd&#039;&#039;&#039; beim Zugriff auf NFS-Volumes)&lt;br /&gt;
* Diese Informationen können in der Standard-Handbuchseite oder in der Handbuchseite enthalten sein, die mit dem Dienstprogramm &#039;&#039;&#039;sepolicy manpage&#039;&#039;&#039; automatisch aus der SELinux-Richtlinie für jede Dienstdomäne generiert werden kann&lt;br /&gt;
* Solche Handbuchseiten sind im Format &#039;&#039;&#039;&#039;‚Dienstname_selinux&#039;&#039;&#039; benannt&lt;br /&gt;
* Solche Handbuchseiten werden auch mit dem Paket selinux-policy-doc ausgeliefert&lt;br /&gt;
&lt;br /&gt;
Beispielsweise enthält die Manpage httpd_selinux(8) Informationen darüber, welcher Dateityp in einer bestimmten Situation zu verwenden ist, sowie über Booleane, die Skripte, die Freigabe von Dateien, den Zugriff auf Verzeichnisse innerhalb von Benutzer-Home-Verzeichnissen usw.&amp;amp;nbsp;ermöglichen&lt;br /&gt;
* Weitere Manpages mit SELinux-Informationen für Dienste sind unter anderem:&lt;br /&gt;
* Samba: Die Manpage samba_selinux(8) beschreibt beispielsweise, dass die Aktivierung des Booleschen Werts &#039;&#039;&#039;samba_enable_home_dirs&#039;&#039;&#039; es Samba ermöglicht, Benutzer-Home-Verzeichnisse freizugeben&lt;br /&gt;
* NFS: Die Manpage nfsd_selinux(8) beschreibt die SELinux-nfsd-Richtlinie, die es Benutzern ermöglicht, ihre nfsd-Prozesse so sicher wie möglich einzurichten&lt;br /&gt;
&lt;br /&gt;
Die Informationen in den Handbuchseiten helfen Ihnen dabei, die richtigen Dateitypen und Booleans zu konfigurieren, um zu verhindern, dass SELinux den Zugriff verweigert&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur &#039;&#039;&#039;sepolicy-Handbuchseite&#039;&#039;&#039; finden Sie im Abschnitt „[[Generieren von Handbuchseiten]]: &#039;&#039;&#039;sepolicy-Handbuchseite&#039;&#039;&#039;”&lt;br /&gt;
&lt;br /&gt;
=== Permissive Domänen ===&lt;br /&gt;
Wenn SELinux im permissiven Modus läuft, verweigert SELinux keinen Zugriff, aber Verweigerungen werden für Aktionen protokolliert, die im Durchsetzungsmodus verweigert worden wären&lt;br /&gt;
* Früher war es nicht möglich, eine einzelne Domäne permissiv zu machen (denken Sie daran: Prozesse laufen in Domänen)&lt;br /&gt;
* In bestimmten Situationen führte dies dazu, dass das gesamte System zur Fehlerbehebung permissiv gemacht wurde&lt;br /&gt;
&lt;br /&gt;
Permissive Domains ermöglichen es einem Administrator, einen einzelnen Prozess (eine Domain) so zu konfigurieren, dass er permissiv läuft, anstatt das gesamte System permissiv zu machen&lt;br /&gt;
* SELinux-Prüfungen werden für permissive Domains weiterhin durchgeführt; der Kernel gewährt jedoch Zugriff und meldet eine AVC-Verweigerung für Situationen, in denen SELinux den Zugriff verweigert hätte&lt;br /&gt;
&lt;br /&gt;
; Verwendungszweck&lt;br /&gt;
* Sie können verwendet werden, um einen einzelnen Prozess (eine Domäne) permissiv laufen zu lassen, um ein Problem zu beheben, ohne das gesamte System durch die Umstellung auf den permissiven Modus zu gefährden&lt;br /&gt;
* Sie ermöglichen es einem Administrator, Richtlinien für neue Anwendungen zu erstellen&lt;br /&gt;
* Früher wurde empfohlen, eine minimale Richtlinie zu erstellen, und anschließend den gesamten Rechner in den permissiven Modus zu versetzen, damit die Anwendung ausgeführt werden konnte, SELinux-Verweigerungen jedoch weiterhin protokolliert wurden&lt;br /&gt;
* Das Tool &#039;&#039;&#039;audit2allow&#039;&#039;&#039; konnte dann zur Erstellung der Richtlinie herangezogen werden&lt;br /&gt;
* Dies stellte das gesamte System einem Risiko aus&lt;br /&gt;
* Mit permissiven Domänen kann nur die Domäne in der neuen Richtlinie als permissiv markiert werden, ohne das gesamte System einem Risiko auszusetzen&lt;br /&gt;
&lt;br /&gt;
==== Domäne permissiv machen ====&lt;br /&gt;
Um eine Domäne permissiv zu machen, führen Sie den Befehl &#039;&#039;&#039;semanage permissive -adomain&#039;&#039;&#039; aus, wobeidomain die Domäne ist, die Sie permissiv machen möchten&lt;br /&gt;
&lt;br /&gt;
Geben Sie beispielsweise als Root den folgenden Befehl ein, um die Domäne &#039;&#039;&#039;httpd_t&#039;&#039;&#039; (die Domäne, in der der Apache-HTTP-Server läuft) permissiv zu machen:&lt;br /&gt;
 sudo semanage permissive -a httpd_t&lt;br /&gt;
&lt;br /&gt;
Um eine Liste der Domänen anzuzeigen, die Sie als permissiv markiert haben, führen Sie als Root den Befehl &#039;&#039;&#039;semodule -l | grep permissive&#039;&#039;&#039; aus&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
 sudo semodule -l | grep permissive&lt;br /&gt;
 permissive_httpd_t (null)&lt;br /&gt;
 permissivedomains (null)&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine Domäne nicht mehr als permissiv festlegen möchten, führen Sie den Befehl &#039;&#039;&#039;semanage permissive -ddomain&#039;&#039;&#039; als Root aus&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
 sudo semanage permissive -d httpd_t&lt;br /&gt;
&lt;br /&gt;
==== Permissiven Domänen deaktivieren ====&lt;br /&gt;
Das Modul &#039;&#039;&#039;permissivedomains.pp&#039;&#039;&#039; enthält alle Deklarationen für permissive Domänen, die auf dem System vorhanden sind&lt;br /&gt;
* Um alle permissiven Domänen zu deaktivieren, geben Sie als Root den folgenden Befehl ein:&lt;br /&gt;
 sudo semodule -d permissivedomains&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
: Sobald ein Richtlinienmodul über den Befehl &#039;&#039;&#039;semodule -d&#039;&#039;&#039; deaktiviert wurde, wird es nicht mehr in der Ausgabe des Befehls &#039;&#039;&#039;semodule -l&#039;&#039;&#039; angezeigt&lt;br /&gt;
&lt;br /&gt;
Um alle Richtlinienmodule einschließlich der deaktivierten anzuzeigen, geben Sie als Root den folgenden Befehl ein:&lt;br /&gt;
 sudo semodule --list-modules=full&lt;br /&gt;
&lt;br /&gt;
==== Ablehnungen für permissive Domänen ====&lt;br /&gt;
Die &#039;&#039;&#039;SYSCALL&#039;&#039;&#039; -Meldung unterscheidet sich bei permissiven Domänen&lt;br /&gt;
* Im Folgenden finden Sie ein Beispiel für eine AVC-Ablehnung (und den zugehörigen Systemaufruf) vom Apache-HTTP-Server:&lt;br /&gt;
 type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm= „httpd“ path=&amp;quot;/var/www/html/file1&amp;quot; dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file&lt;br /&gt;
 type=SYSCALL msg=audit (1226882736. 442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=4&lt;br /&gt;
 8 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm=&amp;quot;httpd&amp;quot; exe=&amp;quot;/usr/sbin/httpd&amp;quot; subj=unconfined_u:system_r:httpd_t:s0 key=(null)&lt;br /&gt;
&lt;br /&gt;
Standardmäßig ist die Domäne &#039;&#039;&#039;httpd_t&#039;&#039;&#039; nicht permissiv, weshalb die Aktion verweigert wird und die &#039;&#039;&#039;SYSCALL&#039;&#039;&#039; -Meldung &#039;&#039;&#039;success=no&#039;&#039;&#039; enthält&lt;br /&gt;
* Das Folgende ist ein Beispiel für eine AVC-Verweigerung in derselben Situation, mit dem Unterschied, dass der Befehl &#039;&#039;&#039;semanage permissive -a httpd_t&#039;&#039;&#039; ausgeführt wurde, um die Domäne &#039;&#039;&#039;httpd_t&#039;&#039;&#039; permissiv zu machen:&lt;br /&gt;
 type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm=&amp;quot;httpd&amp;quot; name=&amp;quot;file1&amp;quot; dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u: object_r:samba_share_t:s0 tclass=file&lt;br /&gt;
 type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid =48 sgid=48 fsgid=48 tty=(none) ses=4 comm=&amp;quot;httpd&amp;quot; exe=&amp;quot;/usr/sbin/httpd&amp;quot; subj=unconfined_u:system_r:httpd_t:s0 key=(null)&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wurde zwar eine AVC-Ablehnung protokolliert, der Zugriff wurde jedoch nicht verweigert, wie durch &#039;&#039;&#039;success=yes&#039;&#039;&#039; in der &#039;&#039;&#039;SYSCALL&#039;&#039;&#039; -Meldung angezeigt wird&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu permissiven Domänen finden Sie in Dan Walshs Blogeintrag „Permissive Domains“&lt;br /&gt;
&lt;br /&gt;
=== Suchen und Anzeigen von Verweigerungen ===&lt;br /&gt;
Dieser Abschnitt setzt voraus, dass die Pakete setroubleshoot, setroubleshoot-server, dbus und audit installiert sind und dass die Daemons &#039;&#039;&#039;auditd&#039;&#039;&#039;, &#039;&#039;&#039;rsyslogd&#039;&#039;&#039; und &#039;&#039;&#039;setroubleshootd&#039;&#039;&#039; laufen&lt;br /&gt;
* Informationen zum Starten dieser Daemons finden Sie im Abschnitt „ [[Welche Protokolldatei wird verwendet]]“ für Informationen zum Starten dieser Daemons&lt;br /&gt;
* Es stehen eine Reihe von Dienstprogrammen zum Suchen und Anzeigen von SELinux-AVC-Meldungen zur Verfügung, wie beispielsweise &#039;&#039;&#039;ausearch&#039;&#039;&#039;, &#039;&#039;&#039;aureport&#039;&#039;&#039; und &#039;&#039;&#039;sealert&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
=== ausearch ===&lt;br /&gt;
Das audit-Paket enthält das Dienstprogramm &#039;&#039;&#039;ausearch&#039;&#039;&#039;, mit dem die Protokolle des &#039;&#039;&#039;audit&#039;&#039;&#039;-Daemons nach Ereignissen anhand verschiedener Suchkriterien durchsucht werden können.[10]&lt;br /&gt;
&lt;br /&gt;
Das Dienstprogramm &#039;&#039;&#039;ausearch&#039;&#039;&#039; greift auf &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039; zu und muss daher als Root-Benutzer ausgeführt werden:&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! | Suche nach&lt;br /&gt;
! | Befehl&lt;br /&gt;
|-&lt;br /&gt;
|| alle Verweigerungen&lt;br /&gt;
|| &#039;&#039;&#039;ausearch -m avc,user_avc,selinux_err,user_selinux_err&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| Verweigerungen für den heutigen Tag&lt;br /&gt;
|| &#039;&#039;&#039;ausearch -m avc -ts today&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| Verweigerungen der letzten 10 Minuten&lt;br /&gt;
|| &#039;&#039;&#039;ausearch -m avc -ts recent&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Um nach SELinux-AVC-Meldungen für einen bestimmten Dienst zu suchen, verwenden Sie die Option &#039;&#039;&#039;-ccomm-name&#039;&#039;&#039;, wobeicomm-name der Name der ausführbaren Datei ist, zum Beispiel &#039;&#039;&#039;httpd&#039;&#039;&#039; für den Apache-HTTP-Server und &#039;&#039;&#039;smbd&#039;&#039;&#039; für Samba:&lt;br /&gt;
 sudo ausearch -m avc -c httpd&lt;br /&gt;
 sudo ausearch -m avc -c smbd&lt;br /&gt;
&lt;br /&gt;
Bei jedem &#039;&#039;&#039;ausearch&#039;&#039;&#039; Befehl wird empfohlen, entweder die Option &#039;&#039;&#039;--interpret&#039;&#039;&#039; (&#039;&#039;&#039;-i&#039;&#039;&#039;) für bessere Lesbarkeit oder die Option &#039;&#039;&#039;--raw&#039;&#039;&#039; (&#039;&#039;&#039;-r&#039;&#039;&#039;) für die Skriptverarbeitung zu verwenden&lt;br /&gt;
* Weitere Optionen für &#039;&#039;&#039;ausearch&#039;&#039;&#039; finden Sie in der Handbuchseite ausearch(8)&lt;br /&gt;
&lt;br /&gt;
=== aureport ===&lt;br /&gt;
Das Audit-Paket enthält das Dienstprogramm &#039;&#039;&#039;aureport&#039;&#039;&#039;&lt;br /&gt;
* das zusammenfassende Berichte der Audit-Systemprotokolle erstellt. [11] &lt;br /&gt;
&lt;br /&gt;
Das Dienstprogramm &#039;&#039;&#039;aureport&#039;&#039;&#039; greift auf &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039; zu und muss daher als Root-Benutzer ausgeführt werden&lt;br /&gt;
* Um eine Liste der SELinux-Ablehnungsmeldungen und deren Häufigkeit anzuzeigen, führen Sie den Befehl &#039;&#039;&#039;aureport -a&#039;&#039;&#039; aus&lt;br /&gt;
&lt;br /&gt;
Nachfolgend finden Sie eine Beispielausgabe, die zwei Ablehnungen enthält:&lt;br /&gt;
 sudo aureport -a&lt;br /&gt;
 &lt;br /&gt;
 AVC-Bericht&lt;br /&gt;
 &lt;br /&gt;
 ======================================&lt;br /&gt;
 # Datum Uhrzeit Befehl Subjekt Systemaufruf Klasse Berechtigung Objekt Ereignis&lt;br /&gt;
 ======================================&lt;br /&gt;
 1. 01.05.2009 21:41:39 httpd unconfined_u:system_r: httpd_t:s0 195 file getattr system_u:object_r:samba_share_t:s0 denied 2&lt;br /&gt;
 2. 03.05.2009 22:00:25 vsftpd unconfined_u: system_r:ftpd_t:s0 5 file read unconfined_u:object_r:cifs_t:s0 denied 4&lt;br /&gt;
&lt;br /&gt;
=== sealert ===&lt;br /&gt;
Das Paket setroubleshoot-server stellt das Dienstprogramm &#039;&#039;&#039;sealert&#039;&#039;&#039; bereit&lt;br /&gt;
* das die von setroubleshoot-server übersetzten Ablehnungsmeldungen ausliest.[12] &lt;br /&gt;
* Ablehnungen werden IDs zugewiesen, wie in &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039; zu sehen ist&lt;br /&gt;
&lt;br /&gt;
; Beispiel für eine Ablehnung aus &#039;&#039;messages&#039;&#039;&lt;br /&gt;
 setroubleshoot: SELinux verhindert den Zugriff von /usr/sbin/httpd auf name_bind über den tcp_socket&lt;br /&gt;
 Für vollständige SELinux-Meldungen führen Sie sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel lautet die Ablehnungs-ID &#039;&#039;&#039;8c123656-5dda-4e5d-8791-9e3bd03786b7&#039;&#039;&#039;&lt;br /&gt;
* Die Option &#039;&#039;&#039;-l&#039;&#039;&#039; nimmt eine ID als Argument entgegen&lt;br /&gt;
* Die Ausführung des Befehls &#039;&#039;&#039;sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7&#039;&#039;&#039; liefert eine detaillierte Analyse, warum SELinux den Zugriff verweigert hat, sowie eine mögliche Lösung, um den Zugriff zu ermöglichen&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das X Window System verwenden, die Pakete [[setroubleshoot]] und [[setroubleshoot-server]] installiert haben und die Daemons &#039;&#039;&#039;[[setroubleshootd]]&#039;&#039;&#039;, &#039;&#039;&#039;[[dbus]]&#039;&#039;&#039; und &#039;&#039;&#039;[[auditd]]&#039;&#039;&#039; laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bild2.png|top|alt=„Eine AVC-Ablehnungsmeldung“]]&lt;br /&gt;
&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Anzeigen&#039;&#039;&#039; startet die &#039;&#039;&#039;sealert&#039;&#039;&#039; GUI, mit der Sie das Problem beheben können:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bild3.png|top]]&lt;br /&gt;
&lt;br /&gt;
Alternativ können Sie den Befehl &#039;&#039;&#039;[[sealert]] -b&#039;&#039;&#039; ausführen, um die &#039;&#039;&#039;[[sealert]]&#039;&#039;&#039; GUI zu starten&lt;br /&gt;
* Um eine detaillierte Analyse aller Verweigerungsmeldungen anzuzeigen, führen Sie den Befehl &#039;&#039;&#039;sealert -l \*&#039;&#039;&#039; aus&lt;br /&gt;
&lt;br /&gt;
=== Rohdaten der Audit-Meldungen ===&lt;br /&gt;
Rohdaten der Audit-Meldungen werden in &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039; protokolliert&lt;br /&gt;
&lt;br /&gt;
Im Folgenden finden Sie ein Beispiel für eine AVC-Ablehnungsmeldung (und den zugehörigen Systemaufruf), die auftrat, als der Apache-HTTP-Server (der in der Domäne &#039;&#039;&#039;httpd_t&#039;&#039;&#039; läuft) versuchte, auf die Datei &#039;&#039;&#039;/var/www/html/file1&#039;&#039;&#039; (mit dem Typ &#039;&#039;&#039;samba_share_t&#039;&#039;&#039; gekennzeichnet):&lt;br /&gt;
 type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm=&amp;quot;httpd&amp;quot; path=&amp;quot;/var/www/html/file1&amp;quot; dev=dm -0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file&lt;br /&gt;
 &lt;br /&gt;
 type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=4 8 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm=&amp;quot;httpd&amp;quot; exe=&amp;quot;/usr/sbin/httpd&amp;quot; subj=unconfined_u:system_r:httpd_t:s0 key=(null)&lt;br /&gt;
&lt;br /&gt;
; { getattr }&lt;br /&gt;
Der Eintrag in den geschweiften Klammern gibt die verweigerte Berechtigung an&lt;br /&gt;
* Der Eintrag &#039;&#039;&#039;getattr&#039;&#039;&#039; zeigt an, dass der Quellprozess versucht hat, die Statusinformationen der Zieldatei zu lesen&lt;br /&gt;
* Dies geschieht vor dem Lesen von Dateien&lt;br /&gt;
* Diese Aktion wird verweigert, da die Datei, auf die zugegriffen wird, ein falsches Label hat&lt;br /&gt;
* Häufig vorkommende Berechtigungen sind &#039;&#039;&#039;getattr&#039;&#039;&#039;, &#039;&#039;&#039;read&#039;&#039;&#039; und &#039;&#039;&#039;write&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; comm=&amp;quot;httpd&amp;quot;&lt;br /&gt;
Die ausführbare Datei, die den Prozess gestartet hat&lt;br /&gt;
* Der vollständige Pfad der ausführbaren Datei findet sich im Abschnitt &#039;&#039;&#039;exe=&#039;&#039;&#039; der Systemaufruf-Meldung (&#039;&#039;&#039;SYSCALL&#039;&#039;&#039;), der in diesem Fall &#039;&#039;&#039;exe=„/usr/sbin/httpd“&#039;&#039;&#039; lautet&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; path=&amp;quot;/var/www/html/file1&amp;quot;&lt;br /&gt;
Der Pfad zu dem Objekt (Ziel), auf das der Prozess zuzugreifen versuchte&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;scontext=„‚&#039;unconfined_u:system_r:httpd_t:s0&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der SELinux-Kontext des Prozesses, der die abgelehnte Aktion versucht hat&lt;br /&gt;
* In diesem Fall ist es der SELinux-Kontext des Apache-HTTP-Servers, der in der Domäne &#039;&#039;&#039;httpd_t&#039;&#039;&#039; läuft&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;nowiki&amp;gt;tcontext=&amp;quot;unconfined_u:object_r:samba_share_t:s0&amp;quot;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
Der SELinux-Kontext des Objekts (Ziels), auf das der Prozess zugreifen wollte&lt;br /&gt;
* In diesem Fall ist es der SELinux-Kontext von &#039;&#039;&#039;file1&#039;&#039;&#039;&lt;br /&gt;
* Beachten Sie, dass der Typ &#039;&#039;&#039;samba_share_t&#039;&#039;&#039; für Prozesse, die in der &#039;&#039;&#039;httpd_t&#039;&#039;&#039; Domäne laufen, nicht zugänglich ist&lt;br /&gt;
&lt;br /&gt;
In bestimmten Situationen kann der &#039;&#039;&#039;tcontext&#039;&#039;&#039; mit dem &#039;&#039;&#039;scontext&#039;&#039;&#039; übereinstimmen, beispielsweise wenn ein Prozess versucht, einen Systemdienst auszuführen, der Eigenschaften des laufenden Prozesses, wie beispielsweise die Benutzer-ID, ändert&lt;br /&gt;
* Außerdem kann der &#039;&#039;&#039;tcontext&#039;&#039;&#039; mit dem &#039;&#039;&#039; scontext&#039;&#039;&#039; übereinstimmen, wenn ein Prozess versucht, mehr Ressourcen (wie Speicher) zu nutzen, als die normalen Grenzen zulassen, was zu einer Sicherheitsprüfung führt, um festzustellen, ob dieser Prozess diese Grenzen überschreiten darf&lt;br /&gt;
&lt;br /&gt;
; Systemaufruf-Meldung&lt;br /&gt;
Aus der Systemaufruf-Meldung (&#039;&#039;&#039;SYSCALL&#039;&#039;&#039;) sind zwei Punkte von Interesse:&lt;br /&gt;
* &#039;&#039;&#039;success=‚&#039;no&#039;&#039;&#039;: gibt an, ob die Verweigerung (AVC) durchgesetzt wurde oder nicht&lt;br /&gt;
**&#039;&#039;&#039;success=no&#039;&#039;&#039; bedeutet, dass der Systemaufruf nicht erfolgreich war (SELinux hat den Zugriff verweigert). &#039;&#039;&#039;success=yes&#039;&#039;&#039; bedeutet, dass der Systemaufruf erfolgreich war&lt;br /&gt;
** Dies ist bei permissiven Domänen oder unconfined Domänen zu beobachten, wie beispielsweise &#039;&#039;&#039;unconfined_service_t&#039;&#039;&#039; und &#039;&#039;&#039;kernel_t&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;exe=„&#039;&#039;&#039;/usr/sbin/httpd&#039;&#039;“ &#039;&#039;&#039;: der vollständige Pfad zu der ausführbaren Datei, die den Prozess gestartet hat; in diesem Fall ist dies &#039;&#039;&#039;exe=„/usr/sbin/httpd“&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Falscher Dateityp&lt;br /&gt;
Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert&lt;br /&gt;
* Um mit der Fehlerbehebung zu beginnen, vergleichen Sie den Quellkontext (&#039;&#039;&#039;scontext&#039;&#039;&#039;) mit dem Zielkontext (&#039;&#039;&#039;tcontext&#039;&#039;&#039; )&lt;br /&gt;
* Sollte der Prozess (&#039;&#039;&#039;scontext&#039;&#039;&#039;) auf ein solches Objekt (&#039;&#039;&#039;tcontext&#039;&#039;&#039;) zugreifen? &lt;br /&gt;
* Beispielsweise sollte der Apache-HTTP-Server (&#039;&#039;&#039;httpd_t&#039;&#039;&#039;) nur auf Typen zugreifen, die in der Handbuchseite httpd_selinux(8) angegeben sind, wie &#039;&#039;&#039;httpd_sys_content_t&#039;&#039;&#039;, &#039;&#039;&#039; public_content_t&#039;‚ usw., sofern nicht anders konfiguriert&lt;br /&gt;
&lt;br /&gt;
=== sealert-Meldungen ===&lt;br /&gt;
Verweigerungen werden IDs zugewiesen, wie in &#039;/var/log/messages&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
AVC-Verweigerung (protokolliert in &#039;&#039;&#039;messages&#039;&#039;&#039;) die auftrat, als der Apache-HTTP-Server (der in der Domäne &#039;&#039;&#039;httpd_t&#039;&#039;&#039; läuft) versuchte, auf die Datei &#039;&#039;&#039;/var/www/html/file1&#039;&#039;&#039; (mit dem Typ &#039;&#039;&#039;samba_share_t&#039;&#039;&#039; gekennzeichnet) zuzugreifen:&lt;br /&gt;
&lt;br /&gt;
 hostname setroubleshoot: SELinux is preventing httpd (httpd_t) &amp;quot;getattr&amp;quot; to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786&lt;br /&gt;
&lt;br /&gt;
; Vollständige Meldung anzuzeigen&lt;br /&gt;
 sealert -l 32eee32b-21ca-4846-a22f-0ba050206786&lt;br /&gt;
&lt;br /&gt;
Dieser Befehl funktioniert nur auf dem lokalen Rechner und zeigt dieselben Informationen an wie die &#039;&#039;&#039;sealert&#039;&#039;&#039; GUI:&lt;br /&gt;
 sealert -l 32eee32b-21ca-4846-a22f-0ba050206786&lt;br /&gt;
 SELinux verhindert, dass httpd mit getattr auf die Datei /var/www/html/file1 zugreift&lt;br /&gt;
 &lt;br /&gt;
 ***** Das Plugin restorecon (92,2 % Zuverlässigkeit) schlägt vor ************************&lt;br /&gt;
 Wenn Sie das Label korrigieren möchten&lt;br /&gt;
 &lt;br /&gt;
 Das Standard-Label für /var/www/html/file1 sollte httpd_sys_content_t lauten&lt;br /&gt;
 Dann können Sie restorecon ausführen&lt;br /&gt;
 Führen Sie&lt;br /&gt;
 sudo /sbin/restorecon -v /var/www/html/file1&lt;br /&gt;
 &lt;br /&gt;
 ***** Das Plugin public_content (Vertrauenswürdigkeit 7,83) schlägt vor ********************&lt;br /&gt;
 Wenn Sie file1 als öffentlichen Inhalt behandeln möchten, dann müssen Sie die Label von file1 in public_content_t oder public_content_rw_t ändern&lt;br /&gt;
 Führen Sie Folgendes aus&lt;br /&gt;
 sudo semanage fcontext -a -t public_content_t ‚/var/www/html/file1‘&lt;br /&gt;
 &lt;br /&gt;
 sudo restorecon -v ‚/var/www/html/file1‘&lt;br /&gt;
 ***** Das Plugin catchall (Vertrauenswürdigkeit 1,41) schlägt vor **************************&lt;br /&gt;
 &lt;br /&gt;
 Wenn Sie der Meinung sind, dass httpd standardmäßig getattr-Zugriff auf die Datei file1 erhalten sollte&lt;br /&gt;
* Dann sollten Sie dies als Fehler melden&lt;br /&gt;
&lt;br /&gt;
Sie können ein lokales Richtlinienmodul erstellen, um diesen Zugriff zuzulassen&lt;br /&gt;
 Erlauben&lt;br /&gt;
&lt;br /&gt;
Sie diesen Zugriff vorerst durch Ausführung von:&lt;br /&gt;
 sudo ausearch -c ‚httpd‘ --raw | audit2allow -M my-httpd&lt;br /&gt;
 sudo semodule -i my-httpd.pp&lt;br /&gt;
 &lt;br /&gt;
 Zusätzliche Informationen:&lt;br /&gt;
 Quellkontext system_u:system_r:httpd_t:s0&lt;br /&gt;
&lt;br /&gt;
Zielkontext unconfined_u:object_r:samba_share_t:s0&lt;br /&gt;
 Zielobjekte /var/www/html/file1 [ Datei ]&lt;br /&gt;
 Quelle httpd&lt;br /&gt;
 Quellpfad httpd&lt;br /&gt;
 Port &amp;lt;Unbekannt&amp;gt;&lt;br /&gt;
 Host hostname.redhat.com&lt;br /&gt;
 Quell-RPM-Pakete&lt;br /&gt;
 Ziel-RPM-Pakete&lt;br /&gt;
 Richtlinien-RPM selinux-policy-3.13.1-166.el7.noarch&lt;br /&gt;
&lt;br /&gt;
Selinux aktiviert True&lt;br /&gt;
 Richtlinientyp targeted&lt;br /&gt;
 Durchsetzungsmodus Enforcing&lt;br /&gt;
 Hostname hostname.redhat.com&lt;br /&gt;
 Plattform Linux hostname.redhat.com&lt;br /&gt;
                               3.10.0-693.el7.x86_64 #1 SMP Do, 6&lt;br /&gt;
* Juli 19:56:57&lt;br /&gt;
                               EDT 2017 x86_64 x86_64&lt;br /&gt;
&lt;br /&gt;
Anzahl der Warnmeldungen 2&lt;br /&gt;
 Erstmals gesehen 20.07.2017 02:52:11 EDT&lt;br /&gt;
 Zuletzt gesehen 20.07.2017 02:52:11 EDT&lt;br /&gt;
 Lokale ID 32eee32b-21ca-4846-a22f-0ba050206786&lt;br /&gt;
&lt;br /&gt;
Rohdaten der Audit-Meldungen&lt;br /&gt;
  type=AVC msg=audit(1500533531.140:295): avc: abgelehnt { getattr } für pid=24934 comm=&amp;quot;httpd&amp;quot; path=&amp;quot;/var/www/html/file1&amp;quot; dev=&amp;quot;vda1&amp;quot; ino=31457414 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file&lt;br /&gt;
&lt;br /&gt;
Hash: httpd,httpd_t,samba_share_t,file,getattr&lt;br /&gt;
&lt;br /&gt;
==== Zusammenfassung ====&lt;br /&gt;
&lt;br /&gt;
Eine kurze Zusammenfassung der abgelehnten Aktion&lt;br /&gt;
* Dies entspricht der Ablehnung in &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
* In diesem Beispiel wurde dem Prozess &#039;&#039;&#039;httpd&#039;&#039;&#039; der Zugriff auf eine Datei (&#039;&#039;&#039;file1&#039;&#039;&#039;) verweigert, die mit dem Typ &#039;&#039;&#039;samba_share_t&#039;&#039;&#039; gekennzeichnet ist&lt;br /&gt;
&amp;gt;Detaillierte Beschreibung&lt;br /&gt;
&lt;br /&gt;
==== Ausführliche Beschreibung ====&lt;br /&gt;
* In diesem Beispiel ist &#039;&#039;&#039;file1&#039;&#039;&#039; mit dem Typ &#039;&#039;&#039;samba_share_t&#039;&#039;&#039; gekennzeichnet&lt;br /&gt;
* Dieser Typ wird für Dateien und Verzeichnisse verwendet, die Sie über Samba exportieren möchten&lt;br /&gt;
* Die Beschreibung schlägt vor, den Typ in einen Typ zu ändern, auf den der Apache-HTTP-Server und Samba zugreifen können, falls ein solcher Zugriff erforderlich ist&lt;br /&gt;
&lt;br /&gt;
==== Zugriff gewähren ====&lt;br /&gt;
Ein Vorschlag, wie der Zugriff gewährt werden kann&lt;br /&gt;
* Dies kann das Umbenennen von Dateien, das Aktivieren eines booleschen Werts oder das Erstellen eines lokalen Richtlinienmoduls sein&lt;br /&gt;
* In diesem Fall lautet der Vorschlag, die Datei mit einem Typ zu kennzeichnen, auf den sowohl der Apache-HTTP-Server als auch Samba zugreifen können&lt;br /&gt;
&lt;br /&gt;
==== Befehl zur Behebung des Problems ====&lt;br /&gt;
Ein vorgeschlagener Befehl, um den Zugriff zu gewähren und die Zugriffsverweigerung zu beheben&lt;br /&gt;
* In diesem Beispiel wird der Befehl angegeben, den Typ von &#039;&#039;&#039;file1&#039;&#039;&#039; in &#039;&#039;&#039;public_content_t&#039;&#039;&#039; zu ändern, der sowohl für den Apache-HTTP-Server als auch für Samba zugänglich ist&lt;br /&gt;
&lt;br /&gt;
==== Zusätzliche Informationen ====&lt;br /&gt;
Informationen, die in Fehlerberichten nützlich sind, wie der Name und die Version des Richtlinienpakets (&#039;&#039;&#039;selinux-policy-3.13.1-166.el7.noarch&#039;&#039;&#039;), die jedoch möglicherweise nicht zur Klärung der Ursache für die Zugriffsverweigerung beitragen&lt;br /&gt;
&lt;br /&gt;
==== Rohdaten der Audit-Meldungen ====&lt;br /&gt;
Die Rohdaten der Audit-Meldungen aus &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;, die mit der Verweigerung in Verbindung stehen&lt;br /&gt;
* Informationen zu den einzelnen Elementen der AVC-Verweigerung finden Sie in Abschnitt&amp;amp;nbsp;11.3.6, „Rohdaten der Audit-Meldungen“&lt;br /&gt;
&lt;br /&gt;
=== Zugriff zulassen ===&lt;br /&gt;
[[audit2allow]]&lt;br /&gt;
; Warnung&lt;br /&gt;
: Verwenden Sie das Beispiel in diesem Abschnitt nicht in der Produktion&lt;br /&gt;
:* Es dient lediglich zur Veranschaulichung der Verwendung des Dienstprogramms &#039;&#039;&#039;[[audit2allow]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[audit2allow]]&#039;&#039;&#039; sammelt Informationen aus den Protokollen abgelehnter Vorgänge und generiert daraus SELinux-Policy-Zulassungsregeln.&lt;br /&gt;
&lt;br /&gt;
Nachdem Sie die Ablehnungsmeldungen gemäß Abschnitt&amp;amp;nbsp;„[[sealert-Meldungen]]“, analysiert haben und sofern keine Label-Änderungen oder Boolesche Werte den Zugriff erlaubt haben, verwenden Sie &#039;&#039;&#039;audit2allow&#039;&#039;&#039;, um ein lokales Policy-Modul zu erstellen&lt;br /&gt;
* Wenn der Zugriff von SELinux verweigert wird, generiert die Ausführung von &#039;&#039;&#039;audit2allow&#039;&#039;&#039; Type-Enforcement-Regeln, die den zuvor verweigerten Zugriff erlauben&lt;br /&gt;
&lt;br /&gt;
Sie sollten &#039;&#039;&#039;audit2allow&#039;&#039;&#039; nicht als erste Option zum Erstellen eines lokalen Richtlinienmoduls verwenden, wenn Sie eine SELinux-Ablehnung feststellen&lt;br /&gt;
* Die Fehlerbehebung sollte mit einer Überprüfung beginnen, ob ein Labeling-Problem vorliegt&lt;br /&gt;
* Der zweithäufigste Fall ist, dass Sie eine Prozesskonfiguration geändert und vergessen haben, SELinux darüber zu informieren&lt;br /&gt;
* Weitere Informationen finden Sie im Whitepaper „Die vier Hauptursachen für SELinux-Fehler“&lt;br /&gt;
&lt;br /&gt;
; Verwendung von &#039;&#039;&#039;audit2allow&#039;&#039;&#039; zum Erstellen eines Policy-Moduls&lt;br /&gt;
1.&amp;amp;nbsp;Eine Verweigerungsmeldung und der zugehörige Systemaufruf werden in der Datei &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039; protokolliert:&lt;br /&gt;
 type=AVC msg=audit(122627035.848:238): avc: denied { write } for pid=13349 comm=&amp;quot;certwatch&amp;quot; name=&amp;quot;cache&amp;quot; dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir&lt;br /&gt;
 type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid= 0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm=&amp;quot;certwatch&amp;quot; exe=&amp;quot;/usr/bin/certwatch&amp;quot; subj=system_u: system_r:certwatch_t:s0 key=(null)&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wurde &#039;&#039;&#039;certwatch&#039;&#039;&#039; der Schreibzugriff auf ein Verzeichnis verweigert, das mit dem Typ &#039;&#039;&#039;var_t&#039;&#039;&#039; gekennzeichnet ist&lt;br /&gt;
* Analysieren Sie die Ablehnungsmeldung gemäß Abschnitt 11.3.7, „sealert-Meldungen“&lt;br /&gt;
* Wenn keine Label-Änderungen vorgenommen wurden oder Booleane den Zugriff erlaubt haben, verwenden Sie &#039;&#039;&#039;audit2allow&#039;&#039;&#039;, um ein lokales Richtlinienmodul zu erstellen&lt;br /&gt;
&lt;br /&gt;
2.&amp;amp;nbsp;Geben Sie den folgenden Befehl ein, um eine für Menschen lesbare Beschreibung zu erstellen, warum der Zugriff verweigert wurde&lt;br /&gt;
&lt;br /&gt;
Das Dienstprogramm &#039;&#039;&#039;[[audit2allow]]&#039;&#039;&#039; liest die Datei &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039; und muss daher als Root-Benutzer ausgeführt werden:&lt;br /&gt;
 sudo audit2allow -w -a&lt;br /&gt;
 type=AVC msg=audit(1226270358.848:238): avc: verweigert { schreiben } für pid=13349 comm=&amp;quot;certwatch&amp;quot; name=&amp;quot;cache&amp;quot; dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir&lt;br /&gt;
        Ursache:&lt;br /&gt;
                Fehlende Type Enforcement (TE)-Zulassungsregel&lt;br /&gt;
&lt;br /&gt;
Sie können audit2allow verwenden, um ein ladbares Modul zu generieren, das diesen Zugriff erlaubt&lt;br /&gt;
&lt;br /&gt;
Die Befehlszeilenoption &#039;&#039;&#039;-a&#039;&#039;&#039; bewirkt, dass alle Audit-Protokolle gelesen werden&lt;br /&gt;
* Die Option &#039;&#039;&#039;-w&#039;&#039;&#039; erzeugt eine für Menschen lesbare Beschreibung&lt;br /&gt;
* Wie gezeigt, wurde der Zugriff aufgrund einer fehlenden Type Enforcement-Regel verweigert&lt;br /&gt;
# Geben Sie den folgenden Befehl ein, um die Type Enforcement-Regel anzuzeigen, die den verweigerten Zugriff erlaubt:&lt;br /&gt;
 sudo audit2allow -a&lt;br /&gt;
; certwatch_t&lt;br /&gt;
 allow certwatch_t var_t:dir write;&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Fehlende Type Enforcement-Regeln werden in der Regel durch Fehler in der SELinux-Richtlinie verursacht und sollten in Red Hat Bugzilla gemeldet werden&lt;br /&gt;
* Erstellen Sie für das Produkt &#039;&#039;&#039;Red&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Hat&amp;amp;nbsp;Enterprise&amp;amp;nbsp;Linux&#039;&#039;&#039; und wählen Sie die Komponente &#039;&#039;&#039;selinux-policy&#039;&#039;&#039; aus&lt;br /&gt;
* Fügen Sie die Ausgabe der Befehle &#039;&#039;&#039;audit2allow -w -a&#039;&#039;&#039; und &#039;&#039;&#039;audit2allow -a&#039;&#039;&#039; in solche Fehlerberichte ein&lt;br /&gt;
&lt;br /&gt;
# Um die von &#039;&#039;&#039;audit2allow -a&#039;&#039;&#039;&#039; angezeigte Regel zu verwenden, geben Sie als Root den folgenden Befehl ein, um ein benutzerdefiniertes Modul zu erstellen&lt;br /&gt;
* Die Option &#039;&#039;&#039;-M&#039;&#039;&#039; erstellt eine Type-Enforcement-Datei (&#039;&#039;&#039;.te&#039;&#039;&#039;) mit dem durch &#039;&#039;&#039;-M&#039;&#039;&#039; angegebenen Namen in Ihrem aktuellen Arbeitsverzeichnis:&lt;br /&gt;
 sudo audit2allow -a -M mycertwatch&lt;br /&gt;
 ******************** WICHTIG ********** *************&lt;br /&gt;
 Um dieses Richtlinienpaket zu aktivieren, führen Sie Folgendes aus:&lt;br /&gt;
&lt;br /&gt;
 semodule -i mycertwatch.pp&lt;br /&gt;
&lt;br /&gt;
 # Außerdem kompiliert &#039;&#039;&#039;audit2allow&#039;&#039;&#039; die Type Enforcement-Regel in ein Richtlinienpaket (&#039;&#039;&#039;.pp&#039;&#039;&#039;):&lt;br /&gt;
&lt;br /&gt;
 sudo ls&lt;br /&gt;
 mycertwatch.pp mycertwatch.te&lt;br /&gt;
 &lt;br /&gt;
Um das Modul zu installieren, geben Sie als Root den folgenden Befehl ein:&lt;br /&gt;
 sudo semodule -imycertwatch.pp&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Mit &#039;&#039;&#039;audit2allow&#039;&#039;&#039; erstellte Module gewähren möglicherweise mehr Zugriff als erforderlich&lt;br /&gt;
:* Es wird empfohlen, mit &#039;&#039;&#039;audit2allow&#039;&#039;&#039; erstellte Richtlinien zur Überprüfung an die Upstream-SELinux-Liste zu senden&lt;br /&gt;
:* Wenn Sie glauben, dass die Richtlinie einen Fehler enthält, melden Sie diesen bitte in Red Hat Bugzilla&lt;br /&gt;
&lt;br /&gt;
Wenn Sie mehrere Ablehnungsmeldungen von verschiedenen Prozessen erhalten, aber nur eine benutzerdefinierte Richtlinie für einen einzelnen Prozess erstellen möchten, verwenden Sie das Dienstprogramm &#039;&#039;&#039;grep&#039;&#039;&#039;, um die Eingabe für &#039;&#039;&#039;audit2allow&#039;&#039;&#039; einzugrenzen&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel zeigt, wie man mit &#039;&#039;&#039;grep&#039;&#039;&#039; nur Ablehnungsmeldungen im Zusammenhang mit &#039;&#039;&#039;certwatch&#039;&#039;&#039; an &#039;&#039;&#039;audit2allow&#039;&#039;&#039; sendet:&lt;br /&gt;
 sudo grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2&lt;br /&gt;
 ******************** WICHTIG ***************** ******&lt;br /&gt;
 Um dieses Richtlinienpaket zu aktivieren, führen Sie Folgendes aus:&lt;br /&gt;
  semodule -i mycertwatch2.pp&lt;br /&gt;
&lt;br /&gt;
== Eigene Policy-Module mit audit2allow ==&lt;br /&gt;
&lt;br /&gt;
;Prinzip&lt;br /&gt;
Wenn Standardlösungen (wie Booleans oder Dateikontexte) nicht ausreichen, analysiert &#039;&#039;audit2allow&#039;&#039; die Audit-Protokolle und generiert automatisch Regeln, um zuvor blockierte Aktionen systemweit zuzulassen.&lt;br /&gt;
&lt;br /&gt;
; Installation&lt;br /&gt;
Unter Debian ist das Tool Teil der Python-Utilities für SELinux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo apt install policycoreutils-python-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Analyse&lt;br /&gt;
Prüfen Sie zunächst die menschenlesbare Erklärung der Blockaden, um die Ursache zu verstehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo audit2allow -w -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Modul generieren&lt;br /&gt;
Filtern Sie die Logs gezielt nach dem betroffenen Dienst (z. B. &#039;&#039;nginx&#039;&#039;), um keine unerwünschten Rechte freizugeben, und erstellen Sie das Modul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo grep mein_prozess /var/log/audit/audit.log | audit2allow -M mein_modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies erzeugt eine Quellcode-Datei (&#039;&#039;.te&#039;&#039;) und das kompilierte Policy-Paket (&#039;&#039;.pp&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
; Modul aktivieren&lt;br /&gt;
Laden Sie das kompilierte Paket abschließend in den Kernel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semodule -i mein_modul.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Initiale Einrichtung&lt;br /&gt;
Nach einer frischen SELinux-Installation und der Deinstallation von AppArmor wird das System oft mit unklaren AVC-Meldungen geflutet. Um das System initial wieder nutzbar zu machen, können Sie alle bisherigen Blockaden pauschal erfassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo grep &amp;quot;AVC&amp;quot; /var/log/audit/audit.log | audit2allow -M my_custom_policy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Laden Sie auch dieses Modul anschließend mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semodule -i my_custom_policy.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Hinweis&lt;br /&gt;
Diese &amp;quot;Holzhammer-Methode&amp;quot; eignet sich nur für die allererste Stabilisierung des Systems. Im späteren Betrieb sollten Sie Ausnahmen immer strikt nach Diensten getrennt erstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/11]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung&amp;diff=163461</id>
		<title>Linux/SELinux/11 Fehlerbehebung</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung&amp;diff=163461"/>
		<updated>2026-03-29T17:15:07Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;SELinux/11 Fehlerbehebung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
* Vorgänge, bei einer Zugriffsverweigerung&lt;br /&gt;
* Häufige Ursachen für Probleme&lt;br /&gt;
* Informationen zur korrekten Kennzeichnung finden&lt;br /&gt;
* Analyse von SELinux-Verweigerungen&lt;br /&gt;
* Erstellen benutzerdefinierter Policy-Module&lt;br /&gt;
&lt;br /&gt;
; Vorgänge, bei einer Zugriffsverweigerung&lt;br /&gt;
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert&lt;br /&gt;
* Dieser Cache wird als Access Vector Cache (AVC) bezeichnet&lt;br /&gt;
* Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert&lt;br /&gt;
* Diese Verweigerungen werden auch als „[[AVC-Verweigerungen]]“ bezeichnet&lt;br /&gt;
&lt;br /&gt;
; Protokolle&lt;br /&gt;
... und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! | Daemon&lt;br /&gt;
! | Protokollort&lt;br /&gt;
|-&lt;br /&gt;
|| auditd aktiv&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| auditd aus; rsyslogd ein&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| setroubleshootd, rsyslogd und auditd ein&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
* Besser lesbare Verweigerungsmeldungen werden ebenfalls an &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039; gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das X Window System ausführen, die Pakete [[setroubleshoot]] und [[setroubleshoot-server]] installiert haben und die Daemons &#039;&#039;&#039;[[setroubleshootd]]&#039;&#039;&#039; und &#039;&#039;&#039;[[auditd]&#039;&#039;&#039; laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bild1.png|top]]&lt;br /&gt;
&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Anzeigen&#039;&#039;&#039; zeigt eine detaillierte Analyse der Gründe für die Zugriffsverweigerung durch SELinux sowie eine mögliche Lösung zur Gewährung des Zugriffs an&lt;br /&gt;
* Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird&lt;br /&gt;
&lt;br /&gt;
Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:&lt;br /&gt;
 Zugriff verweigert&lt;br /&gt;
&lt;br /&gt;
Sie haben keine Berechtigung, auf ‚&#039;Dateiname‘&#039; auf diesem Server zuzugreifen&lt;br /&gt;
&lt;br /&gt;
In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien &lt;br /&gt;
* &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
auf Fehlermeldungen wie &lt;br /&gt;
* &#039;&#039;&#039;„SELinux is preventing“&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;„denied“&#039;&#039;&#039;&lt;br /&gt;
überprüfen&lt;br /&gt;
&lt;br /&gt;
Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:&lt;br /&gt;
 sudo grep „SELinux is preventing“ /var/log/messages&lt;br /&gt;
 sudo grep „denied“ /var/log/audit/audit.log&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
[[Linux/SELinux/11 Fehlerbehebung/Analyse]]&lt;br /&gt;
&lt;br /&gt;
== Lösungen ==&lt;br /&gt;
[[Linux/SELinux/11 Fehlerbehebung/Lösungen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;{{BASEPAGENAME}}&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}&lt;br /&gt;
----&lt;br /&gt;
# Dateien in &#039;&#039;&#039;/etc/selinux/targeted/contexts/files/&#039;&#039;&#039; &lt;br /&gt;
#* definieren Kontexte für Dateien und Verzeichnisse&lt;br /&gt;
#* Dateien in diesem Verzeichnis werden von den Dienstprogrammen &#039;&#039;&#039;restorecon&#039;&#039;&#039; und &#039;&#039;&#039;setfiles&#039;&#039;&#039; gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen&lt;br /&gt;
# Der Befehl &#039;&#039;&#039;semanage port -a&#039;&#039;&#039; fügt einen Eintrag zur Datei &#039;&#039;&#039;/etc/selinux/targeted/modules/active/ports.local&#039;&#039;&#039; hinzu&lt;br /&gt;
#* Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/auditd/ausearch.8.en.html ausearch(8)]&lt;br /&gt;
# [https://manpages.debian.org/trixie/auditd/aureport.8.en.html aureport(8)]&lt;br /&gt;
# sealert(8)&lt;br /&gt;
# [https://manpages.debian.org/trixie/policycoreutils-python-utils/audit2allow.1.en.html audit2allow(1)]&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{DEFAULTSORT:new}}&lt;br /&gt;
{{DISPLAYTITLE:new}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/09_Dateisysteme&amp;diff=163457</id>
		<title>Linux/SELinux/04/09 Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/09_Dateisysteme&amp;diff=163457"/>
		<updated>2026-03-29T17:08:26Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Debian =&lt;br /&gt;
=== Mount-Optionen ===&lt;br /&gt;
Standardmäßig wird beim Einbinden eines Dateisystems der Sicherheitskontext für jede Datei aus dem erweiterten Attribut (xattr) der Datei gelesen. Wenn ein Dateisystem jedoch keine xattr unterstützt (wie FAT oder NFS) oder dem Datenträger nicht vertraut wird (z. B. USB-Sticks), kann der Sicherheitskontext direkt beim Mounten erzwungen oder angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== context= (Globale Überschreibung) ====&lt;br /&gt;
Die Option &#039;&#039;context=&#039;&#039; ist in zwei Hauptfällen nützlich:&lt;br /&gt;
* Das Dateisystem &#039;&#039;&#039;unterstützt keine&#039;&#039;&#039; xattr, sodass ein normales SELinux-Labeling darauf nicht möglich ist;&lt;br /&gt;
* Dem Dateisystem &#039;&#039;&#039;kann im Hinblick auf bereits vorhandene Attribute nicht vertraut werden&#039;&#039;&#039;, und beim Mounten muss vorübergehend ein einheitlicher sicherer Kontext erzwungen werden (z. B. Wechselmedien).&lt;br /&gt;
&lt;br /&gt;
Wenn &#039;&#039;context=&#039;&#039; gesetzt ist, versucht SELinux nicht mehr, xattr vom Datenträger zu lesen. Auch die Datenbank &#039;&#039;file_contexts&#039;&#039; wird für diesen Pfad ignoriert.&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Es ist nicht möglich, das Label einer einzelnen Datei innerhalb einer solchen Ressource mit &#039;&#039;chcon&#039;&#039; oder &#039;&#039;restorecon&#039;&#039; zu ändern — der Kernel gibt in diesem Fall einen Fehler zurück (&#039;&#039;Operation not supported&#039;&#039;). Die ursprünglichen Kontexte (falls auf der Festplatte vorhanden) bleiben erhalten und sind bei einem späteren Mounten ohne &#039;&#039;context=&#039;&#039; wieder sichtbar.&lt;br /&gt;
&lt;br /&gt;
; Befehlsbeispiele&lt;br /&gt;
Für Wechselmedien:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -o context=&amp;quot;system_u:object_r:removable_t:s0&amp;quot; /dev/sdb1 /mnt/usb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für eine Netzwerkressource, die vom Webserver gelesen werden soll:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount server:/export /srv/www -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== defcontext= (Standardkontext) ====&lt;br /&gt;
Die Option &#039;&#039;defcontext=&#039;&#039; dient einer anderen Aufgabe: Sie &#039;&#039;&#039;ändert den Kontext für unlabeled Dateien&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie wirkt nur dort, wo ein Objekt &#039;&#039;&#039;kein eigenes SELinux-Label auf dem Datenträger&#039;&#039;&#039; hat.&lt;br /&gt;
* Wenn eine Datei bereits ein Label hat, verwendet SELinux dieses.&lt;br /&gt;
* Wenn kein Label vorhanden ist (zum Beispiel, wenn eine Datei aus einem alten System ohne SELinux-Unterstützung kopiert wurde), wird ihr „on the fly“ der in &#039;&#039;defcontext=&#039;&#039; angegebene Kontext zugewiesen. Neue Dateien erben dieses Label und speichern es physisch ab (sofern das Dateisystem xattr unterstützt).&lt;br /&gt;
&lt;br /&gt;
; Befehlsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount /dev/sdb2 /test -o defcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== rootcontext= (Kontext des Mount-Punkts) ====&lt;br /&gt;
Die Option &#039;&#039;rootcontext=&#039;&#039; erlaubt es, den Kontext des &#039;&#039;&#039;Root-Inodes&#039;&#039;&#039; eines Dateisystems explizit festzulegen, &#039;&#039;&#039;bevor es im Userspace sichtbar wird&#039;&#039;&#039;.&lt;br /&gt;
* Sie bestimmt den Kontext ausschließlich für das &#039;&#039;&#039;Wurzelverzeichnis&#039;&#039;&#039; des eingehängten Dateisystems, ohne dessen Inhalt zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Das ist nützlich, wenn das korrekte Label für das Verzeichnis selbst (zum Beispiel /mnt/backup) gesetzt werden soll, damit Dienste es betreten können, während die individuellen Labels aller enthaltenen Dateien auf dem Datenträger erhalten bleiben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -t tmpfs none /srv/chroot -o rootcontext=&amp;quot;system_u:object_r:tmp_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fscontext= (Kontext des Superblocks) ====&lt;br /&gt;
Weist der abstrakten Dateisysteminstanz selbst einen Kontext als Objekt zu, nicht den darin enthaltenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Dies ist eine Low-Level-Option. Sie wird von SELinux selbst verwendet, um zu bestimmen, ob ein bestimmter Prozess das Recht hat, Dateisysteme dieses Typs einzuhängen. In der täglichen Administration wird sie manuell nur äußerst selten verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe: Verhalten von Mount-Optionen prüfen ===&lt;br /&gt;
Wir erstellen zwei Mount-Punkte:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir -p /mnt/lab_context&lt;br /&gt;
sudo mkdir -p /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir mounten tmpfs mit einem global erzwungenen Kontext (&#039;&#039;context=&#039;&#039;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mount -t tmpfs none /mnt/lab_context -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
ls -Zd /mnt/lab_context&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstellen wir einige Objekte darin und versuchen, den Kontext manuell zu ändern:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /mnt/lab_context/file1&lt;br /&gt;
mkdir /mnt/lab_context/dir1&lt;br /&gt;
chcon -t tmp_t /mnt/lab_context/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Der Kernel gibt einen Fehler zurück&#039;&#039;&#039;, da bei Verwendung des Mount-Parameters &#039;&#039;context=&#039;&#039; eine Kontextänderung für einzelne Dateien blockiert wird.&lt;br /&gt;
&lt;br /&gt;
Nun versuchen wir, ein anderes Dateisystem mit dem Parameter &#039;&#039;rootcontext=&#039;&#039; einzuhängen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -t tmpfs none /mnt/lab_rootcontext -o rootcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
touch /mnt/lab_rootcontext/file1&lt;br /&gt;
mkdir /mnt/lab_rootcontext/dir1&lt;br /&gt;
ls -lZ1 /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wie man sehen kann, wurde der Kontext der Dateien vom Root-Verzeichnis geerbt.&lt;br /&gt;
&lt;br /&gt;
Nun versuchen wir, den Kontext manuell zu ändern:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t tmp_t /mnt/lab_rootcontext/*&lt;br /&gt;
ls -lZ1 /mnt/lab_rootcontext/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Der Vorgang wird erfolgreich ausgeführt&#039;&#039;&#039;, da &#039;&#039;rootcontext=&#039;&#039; nur den Kontext des Wurzelverzeichnisses des eingehängten Dateisystems starr festlegt, die darin erstellten Dateien jedoch individuell anpassbar bleiben.&lt;br /&gt;
&lt;br /&gt;
=== Besonderheiten bei NFS und mehrfachen Mounts ===&lt;br /&gt;
Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet (meist &#039;&#039;nfs_t&#039;&#039;). Dienste wie der Apache-HTTP-Server oder MariaDB können oft nicht auf &#039;&#039;nfs_t&#039;&#039; zugreifen, weshalb der Kontext beim Mounten überschrieben werden muss.&lt;br /&gt;
* &#039;&#039;Hinweis:&#039;&#039; Alternativ zum Überschreiben des Kontexts können auch SELinux-Booleans (z. B. &#039;&#039;httpd_use_nfs&#039;&#039;) verwendet werden, um Diensten den Zugriff zu gestatten.&lt;br /&gt;
&lt;br /&gt;
Wenn jedoch &#039;&#039;&#039;mehrere Mounts aus demselben NFS-Export&#039;&#039;&#039; durchgeführt werden und versucht wird, den SELinux-Kontext jedes Mounts durch einen jeweils anderen Kontext zu überschreiben, blockiert das System mit einem Superblock-Fehler (&#039;&#039;&amp;quot;Same superblock, different security settings&amp;quot;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Um dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, muss zwingend die Option &#039;&#039;&#039;&#039;&#039;nosharecache&#039;&#039;&#039;&#039;&#039; verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mount server:/export/web /local/web -o nosharecache,context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
sudo mount server:/export/database /local/database -o nosharecache,context=&amp;quot;system_u:object_r:mysqld_db_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontext-Mounts dauerhaft machen (Persistenz) ===&lt;br /&gt;
Da Befehle wie &#039;&#039;mount -o context=...&#039;&#039; temporär sind und Systemneustarts nicht überleben, müssen die Optionen in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; oder in einer Automounter-Zuordnung eingetragen werden, um sie persistent zu machen.&lt;br /&gt;
&lt;br /&gt;
Beispiel für einen Eintrag in der &#039;&#039;/etc/fstab&#039;&#039; für eine NFS-Kontext-Einbindung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
server:/export /local/mount/ nfs context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot; 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellung korrekter Labels ==&lt;br /&gt;
; Relabeling mit restorecon&lt;br /&gt;
&lt;br /&gt;
Der Arbeitsablauf von restorecon lässt sich vereinfacht wie folgt beschreiben&lt;br /&gt;
# Das Werkzeug übernimmt einen Zielpfad und liest die aktive SELinux-Policy bzw.&amp;amp;nbsp;die zugehörige File-Context-Datenbasis&lt;br /&gt;
# Der Zielpfad wird gegen die regulären Ausdrücke aus der Policy-Datenbasis abgeglichen&lt;br /&gt;
# Das Werkzeug liest den tatsächlich gesetzten erweiterten Dateiattributwert (xattr) des Objekts direkt aus dem Dateisystem&lt;br /&gt;
# Anschließend erfolgt ein Vergleich zwischen dem laut Policy erwarteten Kontext und dem tatsächlich gesetzten Label (Attribut) des Objekts&lt;br /&gt;
# Falls die Prüfung rekursiv für ein Verzeichnis ausgeführt wurde, berechnet restorecon einen Hash über die dabei verwendeten regulären Ausdrücke und speichert ihn im versteckten Attribut des Verzeichnisses security.sehash&lt;br /&gt;
#* Beim nächsten Lauf beginnt Schritt 2 dann mit dem Vergleich dieses Hashes, um Zeit zu sparen&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
In der Praxis werden drei Betriebsarten verwendet&lt;br /&gt;
&lt;br /&gt;
; Passive Prüfung ohne Änderungen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -nv /var/www/html/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Option -n verhindert das Schreiben neuer Labels und versetzt das Werkzeug in den Prüfmodus&lt;br /&gt;
* Der Parameter -v zeigt Objekte an, deren Labels vom erwarteten Zustand abweichen&lt;br /&gt;
&lt;br /&gt;
; Korrektur eines einzelnen Objekts&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v /var/www/html/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Korrigiert den Kontext der angegebenen Datei&lt;br /&gt;
* Praktisch werden dabei genau die Änderungen angewendet, die im vorherigen Beispiel lediglich angezeigt wurden&lt;br /&gt;
&lt;br /&gt;
; Massenhafte rekursive Korrektur eines Verzeichnisbaums&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /var&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Optionen -R und -r aktivieren den rekursiven Verzeichnisdurchlauf&lt;br /&gt;
* Genau dieser Modus wird typischerweise nach dem Hinzufügen neuer Regeln mit semanage fcontext oder nach einer beschädigten Teil-Relabeling-Situation verwendet&lt;br /&gt;
&lt;br /&gt;
=== customizable types ===&lt;br /&gt;
In SELinux existiert ein Ausnahme-Mechanismus für Relabeling mit der Bezeichnung customizable types&lt;br /&gt;
&lt;br /&gt;
Dabei handelt es sich um eine vordefinierte Liste von Kontexten (Typen), die vom System als manuell administrierbar betrachtet werden&lt;br /&gt;
* Entsprechend werden solche Dateien bei der Prüfung und beim Relabeling durch SELinux-Werkzeuge und -Mechanismen (einschließlich restorecon, .autorelabel, setfiles, fixfiles) ignoriert&lt;br /&gt;
&lt;br /&gt;
Die Liste der customizable types wird aus folgender Datei gelesen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/etc/selinux/{SELINUXPOLICY}/contexts/customizable_types&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obwohl der Mechanismus der customizable types in modernen Distributionen weiterhin existiert und funktioniert, gilt er in der Administratoren-Community heute als &#039;&#039;&#039;veraltender Ansatz&#039;&#039;&#039;&lt;br /&gt;
* Der Grund ist, dass die Datei lediglich Informationen darüber enthält, welche Typen ignoriert werden, nicht jedoch, welchen konkreten Dateien diese Typen zugewiesen wurden&lt;br /&gt;
* In einer Störungssituation kann diese Information unwiederbringlich verloren gehen&lt;br /&gt;
* Die File-Context-Datenbank enthält dagegen alle erforderlichen Informationen, um den gewünschten Label-Zustand im Dateisystem reproduzierbar wiederherzustellen&lt;br /&gt;
&lt;br /&gt;
Um Dateien mit customizable types dennoch zwangsweise auf den vollständig erwarteten Kontext zurückzusetzen, muss restorecon mit dem Parameter -F (Force) ausgeführt werden&lt;br /&gt;
* In diesem Fall werden &#039;&#039;&#039;alle Felder des Kontexts wiederhergestellt&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -F -v /srv/custom_app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beschleunigung durch Digest-Prüfung ===&lt;br /&gt;
; Das Werkzeug restorecon_xattr&lt;br /&gt;
Beim rekursiven Relabeling mit restorecon -D durchläuft das Werkzeug den Verzeichnisbaum nicht nur und korrigiert Kontexte, sondern &#039;&#039;&#039;schreibt zusätzlich einen internen Digest in das xattr des Verzeichnisses&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
; Digest wird im erweiterten Attribut &#039;&#039;security.sehash&#039;&#039; gespeichert&lt;br /&gt;
&lt;br /&gt;
Die Aufgabe dieses Digests besteht darin festzuhalten, dass dieses Verzeichnis bereits gegen einen bestimmten Satz von file_contexts-Dateien geprüft wurde, die für die Zuordnung von Pfaden zu erwarteten Kontexten verwendet werden&lt;br /&gt;
* Beim nächsten Lauf von restorecon -D wird dieser Hash zur Prüfung herangezogen und bei Bedarf aktualisiert, falls er veraltet ist&lt;br /&gt;
In modernen RHEL-Versionen wird zur Berechnung dieses Werts &#039;&#039;&#039;der kryptographische Algorithmus SHA-256&#039;&#039;&#039; verwendet (in älteren Systemen kam SHA-1 zum Einsatz).&lt;br /&gt;
&#039;&#039;&#039;Red Hat/Fedora&#039;&#039;&#039; verwenden seit RHEL 9 bzw.&amp;amp;nbsp;Fedora 34+ beim Paket-Build einen eigenen Patch für den Quellcode&lt;br /&gt;
* In den Paketquellen findet sich dazu direkt eine Datei mit dem Namen 0001-Use-SHA-2-instead-of-SHA-1.patch&lt;br /&gt;
&lt;br /&gt;
Debian verwendet weiterhin SHA-1&lt;br /&gt;
* Das ist in diesem Kontext jedoch unkritisch, da der Hash im Verzeichnis-xattr nicht für Sicherheitsfunktionen oder Verschlüsselung verwendet wird&lt;br /&gt;
&lt;br /&gt;
==== restorecon_xattr ====&lt;br /&gt;
Für die Arbeit mit diesen internen Digest-Einträgen (Anzeigen/Bereinigen) stehen folgende Kommandos zur Verfügung&lt;br /&gt;
* restorecon -D (Hashes erzeugen / Dateien unter Verwendung vorhandener Hashes prüfen)&lt;br /&gt;
* restorecon -I (Hashes erzeugen / neu erzeugen, wobei vorhandene ignoriert werden)&lt;br /&gt;
* sowie das separate Werkzeug restorecon_xattr (Hashes anzeigen / löschen)&lt;br /&gt;
&lt;br /&gt;
; Funktionen von restorecon_xattr&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisse anzeigen&#039;&#039;&#039;, in denen security.sehash vorhanden ist&lt;br /&gt;
* &#039;&#039;&#039;Digest und dessen Status&#039;&#039;&#039; im Vergleich zum aktuellen Policy-Satz anzeigen&lt;br /&gt;
* &#039;&#039;&#039;nur veraltete Digest-Einträge löschen&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;alle Digest-Einträge&#039;&#039;&#039; in einem angegebenen Verzeichnisbaum löschen&lt;br /&gt;
&lt;br /&gt;
; Praxisbeispiel mit einigen Hashes&lt;br /&gt;
Start von restorecon mit dem Flag -D und rekursivem Modus -R&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -RDv /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige des Ergebnisses mit restorecon_xattr (zusätzlich mit -r für rekursive Ausgabe)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -r /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Entfernen von Hashes, die nicht mehr zum aktuellen Policy-Satz passen, wird der Parameter -d verwendet&lt;br /&gt;
&lt;br /&gt;
Das Werkzeug berechnet einen neuen Hash und entfernt den alten Hash bei Nichtübereinstimmung (neue Hashes werden dabei nicht geschrieben)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -d -r /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vollständiges Entfernen aller Digests&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -D -r /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden alle security.sehash-Einträge aus dem Verzeichnisbaum entfernt, unabhängig davon, ob sie noch aktuell sind oder nicht&lt;br /&gt;
* Der nächste Lauf von restorecon -D muss die Digests anschließend vollständig neu erzeugen&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass sich der Nutzen von restorecon -D erst bei &#039;&#039;&#039;rekursiver Verarbeitung&#039;&#039;&#039; (-R / -r) entfaltet&lt;br /&gt;
* Nach einem erfolgreichen rekursiven Relabeling wird beim erneuten Ausführen von restorecon -D (mit denselben Parametern und demselben Policy-Satz) der gespeicherte Digest zur Beschleunigung des Verzeichnisdurchlaufs verwendet&lt;br /&gt;
* Das ist insbesondere bei der Prüfung großer Verzeichnisbäume oder sogar des gesamten Dateisystems ab / nützlich&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: &#039;&#039;&#039;Wenn der Parameter&#039;&#039;&#039; -D &#039;&#039;&#039;gesetzt ist&#039;&#039;&#039;, wird für &#039;&#039;&#039;Verzeichnisse ohne vorhandenen Hash&#039;&#039;&#039; ein neuer Digest berechnet und in den Attributen gespeichert&lt;br /&gt;
* Falls &#039;&#039;&#039;für ein Verzeichnis bereits ein Hash existiert&#039;&#039;&#039;, prüft restorecon dessen Gültigkeit, indem es ihn mit dem neu aus der File-Context-Datenbank berechneten Wert vergleicht. &#039;&#039;&#039;Bei Übereinstimmung wird das Verzeichnis beschleunigt verarbeitet.&#039;&#039;&#039; &#039;&#039;&#039;Bei Nichtübereinstimmung erfolgt die Prüfung des aktuellen Verzeichnisses und aller Unterverzeichnisse im normalen Modus&#039;&#039;&#039;, also so, als wäre -D nicht gesetzt&lt;br /&gt;
&lt;br /&gt;
Wird der Parameter -D nicht verwendet, nutzt restorecon den Mechanismus security.sehash bei der Prüfung überhaupt nicht&lt;br /&gt;
&lt;br /&gt;
Wird restorecon -I verwendet, wird ein bereits gespeicherter Digest ignoriert&lt;br /&gt;
* Selbst wenn security.sehash formal übereinstimmt, vertraut restorecon diesem Eintrag nicht und &#039;&#039;&#039;führt im rekursiven Modus zwangsweise eine erneute vollständige Label-Prüfung durch; anschließend wird der Digest aktualisiert&#039;&#039;&#039;&lt;br /&gt;
* Voraussetzung ist, dass das Flag -n nicht gesetzt ist und während der Ausführung keine Fehler auftreten&lt;br /&gt;
&lt;br /&gt;
; Anwendungsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -RIv /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis wird rekursiv geprüft, und jeder Hash wird unabhängig davon, ob bereits ein Digest in den Attributen vorhanden ist, neu erzeugt&lt;br /&gt;
&lt;br /&gt;
== Relabeling-Werkzeuge ==&lt;br /&gt;
; Die Werkzeuge für Relabeling lassen sich in drei Ebenen unterteilen&lt;br /&gt;
&lt;br /&gt;
* setfiles&lt;br /&gt;
** Das grundlegende, low-level ausführbare Binärprogramm (in C geschrieben)&lt;br /&gt;
** Es bildet den Kernmechanismus zur Anwendung der Policy&lt;br /&gt;
** restorecon arbeitet auf Basis von setfiles&lt;br /&gt;
* restorecon&lt;br /&gt;
** Ein Werkzeug auf Benutzerebene, das für gezielte administrative Eingriffe vorgesehen ist&lt;br /&gt;
** restorecon findet, lädt und verwendet automatisch die &#039;&#039;&#039;aktuell aktive SELinux-Policy&#039;&#039;&#039;&lt;br /&gt;
** Das Werkzeug restorecon wird durch dieselbe ausführbare Datei implementiert wie setfiles&lt;br /&gt;
** Der Betriebsmodus wird über argv[0] gewählt, also über den Namen, unter dem das Programm aufgerufen wird&lt;br /&gt;
* fixfiles&lt;br /&gt;
** Dabei handelt es sich nicht um eine Binärdatei, sondern um ein Shell-Skript, das den Aufruf von setfiles und restorecon für globale Systemaufgaben automatisiert&lt;br /&gt;
** Es ist eine skriptbasierte Wrapper-Schicht für typische Wartungsoperationen wie check, verify, restore, relabel, onboot sowie für paketbezogene und inkrementelle Betriebsarten&lt;br /&gt;
** Das Werkzeug kann mit der Datenbank des Paketmanagers (RPM) arbeiten&lt;br /&gt;
** So kann es beispielsweise alle Dateien ermitteln, die zu einem bestimmten Paket gehören, und ausschließlich diese neu labeln&lt;br /&gt;
** Außerdem steuert es den Ablauf eines vollständigen System-Relabelings beim Booten&lt;br /&gt;
&lt;br /&gt;
=== Betriebsarten von fixfiles ===&lt;br /&gt;
==== fixfiles check / fixfiles verify ====&lt;br /&gt;
check und verify sind Betriebsarten ohne Änderung der Labels&lt;br /&gt;
* Sie geben alle inkorrekten Labels aus und zeigen dabei den alten sowie den neuen Kontext an, schreiben jedoch nichts zurück&lt;br /&gt;
* Das ist ein praktischer administrativer Audit-Modus vor einem Relabeling oder nach Änderungen an den Regeln&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t tmp_t /var/www&lt;br /&gt;
chcon -R -t shadow_t /srv&lt;br /&gt;
fixfiles check /var/www /srv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles restore ====&lt;br /&gt;
restore stellt inkorrekte Labels wieder her&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles restore /var/www /srv/app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles relabel ====&lt;br /&gt;
relabel ist für ein vollständiges Relabeling des gesamten Dateisystems vorgesehen&lt;br /&gt;
* Das Werkzeug schlägt vor, den Inhalt von /tmp zu löschen&lt;br /&gt;
* Anschließend werden alle inkorrekten Dateilabels so korrigiert, dass sie den installierten file_contexts entsprechen&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles relabel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles onboot ====&lt;br /&gt;
onboot führt das Relabeling nicht sofort aus, sondern bereitet das System so vor, dass das Relabeling beim nächsten Systemstart erfolgt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles onboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optionen ===&lt;br /&gt;
; Wichtige Optionen&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| -F || (Force) Setzt den Kontext auch bei Dateien mit customizable types zwangsweise zurück&lt;br /&gt;
|-&lt;br /&gt;
| -f || (force clear) Leert die temporären Verzeichnisse /tmp und /var/tmp automatisch vor Beginn der Ausführung, ohne interaktive Rückfragen&lt;br /&gt;
* Das ist besonders nützlich für Automatisierungsskripte&lt;br /&gt;
|-&lt;br /&gt;
| -C PREVIOUS_FILECONTEXT  || (Compare) Vergleicht einen alten file_contexts-Stand mit dem aktuellen und stellt Kontexte nur dort wieder her, wo dies erforderlich ist&lt;br /&gt;
|-&lt;br /&gt;
| -N &amp;quot;YYYY-MM-DD HH:MM&amp;quot;  || (Newer) Beschränkt die Verarbeitung auf Dateien, die nach dem angegebenen Zeitpunkt erstellt wurden&lt;br /&gt;
|-&lt;br /&gt;
| -B  ||  Im Modus restore werden nur Dateien berücksichtigt, die heute verändert wurden&lt;br /&gt;
* Im Modus onboot schreibt derselbe Schalter das aktuelle Datum in /.autorelabel, wodurch das Relabeling beschleunigt werden kann&lt;br /&gt;
|-&lt;br /&gt;
| -M  || (Mounts) Führt vor dem Relabeling Bind-Mounts für Dateisysteme aus, sodass auch Kontexte von Objekten korrekt repariert werden können, über denen etwas eingehängt ist&lt;br /&gt;
|-&lt;br /&gt;
| -T nthreads  || (Threads) Konfiguriert die parallele Verarbeitung mit mehreren Threads oder deaktiviert diese bei -T 1&lt;br /&gt;
|-&lt;br /&gt;
| -l LOGPATH  || (Log) Leitet die gesamte Ausgabe, also sowohl Standardausgabe als auch Fehlermeldungen, in die angegebene Logdatei statt auf den Bildschirm um&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{navigation|Linux/SELinux/04/09 Dateisysteme|Linux/SELinux/04/10 Labels beibehalten}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/09_Dateisysteme&amp;diff=163455</id>
		<title>Linux/SELinux/04/09 Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/09_Dateisysteme&amp;diff=163455"/>
		<updated>2026-03-29T17:05:05Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Debian =&lt;br /&gt;
=== Mount-Optionen ===&lt;br /&gt;
Standardmäßig wird beim Einbinden eines Dateisystems der Sicherheitskontext für jede Datei aus dem erweiterten Attribut (xattr) der Datei gelesen. Wenn ein Dateisystem jedoch keine xattr unterstützt (wie FAT oder NFS) oder dem Datenträger nicht vertraut wird (z. B. USB-Sticks), kann der Sicherheitskontext direkt beim Mounten erzwungen oder angepasst werden.&lt;br /&gt;
&lt;br /&gt;
==== context= (Globale Überschreibung) ====&lt;br /&gt;
Die Option &#039;&#039;context=&#039;&#039; ist in zwei Hauptfällen nützlich:&lt;br /&gt;
* Das Dateisystem &#039;&#039;&#039;unterstützt keine&#039;&#039;&#039; xattr, sodass ein normales SELinux-Labeling darauf nicht möglich ist;&lt;br /&gt;
* Dem Dateisystem &#039;&#039;&#039;kann im Hinblick auf bereits vorhandene Attribute nicht vertraut werden&#039;&#039;&#039;, und beim Mounten muss vorübergehend ein einheitlicher sicherer Kontext erzwungen werden (z. B. Wechselmedien).&lt;br /&gt;
&lt;br /&gt;
Wenn &#039;&#039;context=&#039;&#039; gesetzt ist, versucht SELinux nicht mehr, xattr vom Datenträger zu lesen. Auch die Datenbank &#039;&#039;file_contexts&#039;&#039; wird für diesen Pfad ignoriert.&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Es ist nicht möglich, das Label einer einzelnen Datei innerhalb einer solchen Ressource mit &#039;&#039;chcon&#039;&#039; oder &#039;&#039;restorecon&#039;&#039; zu ändern — der Kernel gibt in diesem Fall einen Fehler zurück (&#039;&#039;Operation not supported&#039;&#039;). Die ursprünglichen Kontexte (falls auf der Festplatte vorhanden) bleiben erhalten und sind bei einem späteren Mounten ohne &#039;&#039;context=&#039;&#039; wieder sichtbar.&lt;br /&gt;
&lt;br /&gt;
; Befehlsbeispiele&lt;br /&gt;
Für Wechselmedien:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -o context=&amp;quot;system_u:object_r:removable_t:s0&amp;quot; /dev/sdb1 /mnt/usb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für eine Netzwerkressource, die vom Webserver gelesen werden soll:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount server:/export /srv/www -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== defcontext= (Standardkontext) ====&lt;br /&gt;
Die Option &#039;&#039;defcontext=&#039;&#039; dient einer anderen Aufgabe: Sie &#039;&#039;&#039;ändert den Kontext für unlabeled Dateien&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Sie wirkt nur dort, wo ein Objekt &#039;&#039;&#039;kein eigenes SELinux-Label auf dem Datenträger&#039;&#039;&#039; hat.&lt;br /&gt;
* Wenn eine Datei bereits ein Label hat, verwendet SELinux dieses.&lt;br /&gt;
* Wenn kein Label vorhanden ist (zum Beispiel, wenn eine Datei aus einem alten System ohne SELinux-Unterstützung kopiert wurde), wird ihr „on the fly“ der in &#039;&#039;defcontext=&#039;&#039; angegebene Kontext zugewiesen. Neue Dateien erben dieses Label und speichern es physisch ab (sofern das Dateisystem xattr unterstützt).&lt;br /&gt;
&lt;br /&gt;
; Befehlsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount /dev/sdb2 /test -o defcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== rootcontext= (Kontext des Mount-Punkts) ====&lt;br /&gt;
Die Option &#039;&#039;rootcontext=&#039;&#039; erlaubt es, den Kontext des &#039;&#039;&#039;Root-Inodes&#039;&#039;&#039; eines Dateisystems explizit festzulegen, &#039;&#039;&#039;bevor es im Userspace sichtbar wird&#039;&#039;&#039;.&lt;br /&gt;
* Sie bestimmt den Kontext ausschließlich für das &#039;&#039;&#039;Wurzelverzeichnis&#039;&#039;&#039; des eingehängten Dateisystems, ohne dessen Inhalt zu beeinflussen.&lt;br /&gt;
&lt;br /&gt;
Das ist nützlich, wenn das korrekte Label für das Verzeichnis selbst (zum Beispiel /mnt/backup) gesetzt werden soll, damit Dienste es betreten können, während die individuellen Labels aller enthaltenen Dateien auf dem Datenträger erhalten bleiben.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -t tmpfs none /srv/chroot -o rootcontext=&amp;quot;system_u:object_r:tmp_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fscontext= (Kontext des Superblocks) ====&lt;br /&gt;
Weist der abstrakten Dateisysteminstanz selbst einen Kontext als Objekt zu, nicht den darin enthaltenen Dateien.&lt;br /&gt;
&lt;br /&gt;
Dies ist eine Low-Level-Option. Sie wird von SELinux selbst verwendet, um zu bestimmen, ob ein bestimmter Prozess das Recht hat, Dateisysteme dieses Typs einzuhängen. In der täglichen Administration wird sie manuell nur äußerst selten verwendet.&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe: Verhalten von Mount-Optionen prüfen ===&lt;br /&gt;
Wir erstellen zwei Mount-Punkte:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir -p /mnt/lab_context&lt;br /&gt;
sudo mkdir -p /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir mounten tmpfs mit einem global erzwungenen Kontext (&#039;&#039;context=&#039;&#039;):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mount -t tmpfs none /mnt/lab_context -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
ls -Zd /mnt/lab_context&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstellen wir einige Objekte darin und versuchen, den Kontext manuell zu ändern:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /mnt/lab_context/file1&lt;br /&gt;
mkdir /mnt/lab_context/dir1&lt;br /&gt;
chcon -t tmp_t /mnt/lab_context/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Der Kernel gibt einen Fehler zurück&#039;&#039;&#039;, da bei Verwendung des Mount-Parameters &#039;&#039;context=&#039;&#039; eine Kontextänderung für einzelne Dateien blockiert wird.&lt;br /&gt;
&lt;br /&gt;
Nun versuchen wir, ein anderes Dateisystem mit dem Parameter &#039;&#039;rootcontext=&#039;&#039; einzuhängen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -t tmpfs none /mnt/lab_rootcontext -o rootcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
touch /mnt/lab_rootcontext/file1&lt;br /&gt;
mkdir /mnt/lab_rootcontext/dir1&lt;br /&gt;
ls -lZ1 /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Wie man sehen kann, wurde der Kontext der Dateien vom Root-Verzeichnis geerbt.&lt;br /&gt;
&lt;br /&gt;
Nun versuchen wir, den Kontext manuell zu ändern:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t tmp_t /mnt/lab_rootcontext/*&lt;br /&gt;
ls -lZ1 /mnt/lab_rootcontext/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Der Vorgang wird erfolgreich ausgeführt&#039;&#039;&#039;, da &#039;&#039;rootcontext=&#039;&#039; nur den Kontext des Wurzelverzeichnisses des eingehängten Dateisystems starr festlegt, die darin erstellten Dateien jedoch individuell anpassbar bleiben.&lt;br /&gt;
&lt;br /&gt;
=== Besonderheiten bei NFS und mehrfachen Mounts ===&lt;br /&gt;
Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet (meist &#039;&#039;nfs_t&#039;&#039;). Dienste wie der Apache-HTTP-Server oder MariaDB können oft nicht auf &#039;&#039;nfs_t&#039;&#039; zugreifen, weshalb der Kontext beim Mounten überschrieben werden muss.&lt;br /&gt;
* &#039;&#039;Hinweis:&#039;&#039; Alternativ zum Überschreiben des Kontexts können auch SELinux-Booleans (z. B. &#039;&#039;httpd_use_nfs&#039;&#039;) verwendet werden, um Diensten den Zugriff zu gestatten.&lt;br /&gt;
&lt;br /&gt;
Wenn jedoch &#039;&#039;&#039;mehrere Mounts aus demselben NFS-Export&#039;&#039;&#039; durchgeführt werden und versucht wird, den SELinux-Kontext jedes Mounts durch einen jeweils anderen Kontext zu überschreiben, blockiert das System mit einem Superblock-Fehler (&#039;&#039;&amp;quot;Same superblock, different security settings&amp;quot;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Um dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, muss zwingend die Option &#039;&#039;&#039;&#039;&#039;nosharecache&#039;&#039;&#039;&#039;&#039; verwendet werden:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mount server:/export/web /local/web -o nosharecache,context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
sudo mount server:/export/database /local/database -o nosharecache,context=&amp;quot;system_u:object_r:mysqld_db_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontext-Mounts dauerhaft machen (Persistenz) ===&lt;br /&gt;
Da Befehle wie &#039;&#039;mount -o context=...&#039;&#039; temporär sind und Systemneustarts nicht überleben, müssen die Optionen in der Datei &#039;&#039;&#039;/etc/fstab&#039;&#039;&#039; oder in einer Automounter-Zuordnung eingetragen werden, um sie persistent zu machen.&lt;br /&gt;
&lt;br /&gt;
Beispiel für einen Eintrag in der &#039;&#039;/etc/fstab&#039;&#039; für eine NFS-Kontext-Einbindung:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
server:/export /local/mount/ nfs context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot; 0 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellung korrekter Labels ==&lt;br /&gt;
; Relabeling mit restorecon&lt;br /&gt;
&lt;br /&gt;
Der Arbeitsablauf von restorecon lässt sich vereinfacht wie folgt beschreiben&lt;br /&gt;
# Das Werkzeug übernimmt einen Zielpfad und liest die aktive SELinux-Policy bzw.&amp;amp;nbsp;die zugehörige File-Context-Datenbasis&lt;br /&gt;
# Der Zielpfad wird gegen die regulären Ausdrücke aus der Policy-Datenbasis abgeglichen&lt;br /&gt;
# Das Werkzeug liest den tatsächlich gesetzten erweiterten Dateiattributwert (xattr) des Objekts direkt aus dem Dateisystem&lt;br /&gt;
# Anschließend erfolgt ein Vergleich zwischen dem laut Policy erwarteten Kontext und dem tatsächlich gesetzten Label (Attribut) des Objekts&lt;br /&gt;
# Falls die Prüfung rekursiv für ein Verzeichnis ausgeführt wurde, berechnet restorecon einen Hash über die dabei verwendeten regulären Ausdrücke und speichert ihn im versteckten Attribut des Verzeichnisses security.sehash&lt;br /&gt;
#* Beim nächsten Lauf beginnt Schritt 2 dann mit dem Vergleich dieses Hashes, um Zeit zu sparen&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
In der Praxis werden drei Betriebsarten verwendet&lt;br /&gt;
&lt;br /&gt;
; Passive Prüfung ohne Änderungen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -nv /var/www/html/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Option -n verhindert das Schreiben neuer Labels und versetzt das Werkzeug in den Prüfmodus&lt;br /&gt;
* Der Parameter -v zeigt Objekte an, deren Labels vom erwarteten Zustand abweichen&lt;br /&gt;
&lt;br /&gt;
; Korrektur eines einzelnen Objekts&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v /var/www/html/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Korrigiert den Kontext der angegebenen Datei&lt;br /&gt;
* Praktisch werden dabei genau die Änderungen angewendet, die im vorherigen Beispiel lediglich angezeigt wurden&lt;br /&gt;
&lt;br /&gt;
; Massenhafte rekursive Korrektur eines Verzeichnisbaums&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /var&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Optionen -R und -r aktivieren den rekursiven Verzeichnisdurchlauf&lt;br /&gt;
* Genau dieser Modus wird typischerweise nach dem Hinzufügen neuer Regeln mit semanage fcontext oder nach einer beschädigten Teil-Relabeling-Situation verwendet&lt;br /&gt;
&lt;br /&gt;
=== customizable types ===&lt;br /&gt;
In SELinux existiert ein Ausnahme-Mechanismus für Relabeling mit der Bezeichnung customizable types&lt;br /&gt;
&lt;br /&gt;
Dabei handelt es sich um eine vordefinierte Liste von Kontexten (Typen), die vom System als manuell administrierbar betrachtet werden&lt;br /&gt;
* Entsprechend werden solche Dateien bei der Prüfung und beim Relabeling durch SELinux-Werkzeuge und -Mechanismen (einschließlich restorecon, .autorelabel, setfiles, fixfiles) ignoriert&lt;br /&gt;
&lt;br /&gt;
Die Liste der customizable types wird aus folgender Datei gelesen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/etc/selinux/{SELINUXPOLICY}/contexts/customizable_types&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obwohl der Mechanismus der customizable types in modernen Distributionen weiterhin existiert und funktioniert, gilt er in der Administratoren-Community heute als &#039;&#039;&#039;veraltender Ansatz&#039;&#039;&#039;&lt;br /&gt;
* Der Grund ist, dass die Datei lediglich Informationen darüber enthält, welche Typen ignoriert werden, nicht jedoch, welchen konkreten Dateien diese Typen zugewiesen wurden&lt;br /&gt;
* In einer Störungssituation kann diese Information unwiederbringlich verloren gehen&lt;br /&gt;
* Die File-Context-Datenbank enthält dagegen alle erforderlichen Informationen, um den gewünschten Label-Zustand im Dateisystem reproduzierbar wiederherzustellen&lt;br /&gt;
&lt;br /&gt;
Um Dateien mit customizable types dennoch zwangsweise auf den vollständig erwarteten Kontext zurückzusetzen, muss restorecon mit dem Parameter -F (Force) ausgeführt werden&lt;br /&gt;
* In diesem Fall werden &#039;&#039;&#039;alle Felder des Kontexts wiederhergestellt&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -F -v /srv/custom_app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beschleunigung durch Digest-Prüfung ===&lt;br /&gt;
; Das Werkzeug restorecon_xattr&lt;br /&gt;
Beim rekursiven Relabeling mit restorecon -D durchläuft das Werkzeug den Verzeichnisbaum nicht nur und korrigiert Kontexte, sondern &#039;&#039;&#039;schreibt zusätzlich einen internen Digest in das xattr des Verzeichnisses&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
; Digest wird im erweiterten Attribut &#039;&#039;security.sehash&#039;&#039; gespeichert&lt;br /&gt;
&lt;br /&gt;
Die Aufgabe dieses Digests besteht darin festzuhalten, dass dieses Verzeichnis bereits gegen einen bestimmten Satz von file_contexts-Dateien geprüft wurde, die für die Zuordnung von Pfaden zu erwarteten Kontexten verwendet werden&lt;br /&gt;
* Beim nächsten Lauf von restorecon -D wird dieser Hash zur Prüfung herangezogen und bei Bedarf aktualisiert, falls er veraltet ist&lt;br /&gt;
In modernen RHEL-Versionen wird zur Berechnung dieses Werts &#039;&#039;&#039;der kryptographische Algorithmus SHA-256&#039;&#039;&#039; verwendet (in älteren Systemen kam SHA-1 zum Einsatz).&lt;br /&gt;
&#039;&#039;&#039;Red Hat/Fedora&#039;&#039;&#039; verwenden seit RHEL 9 bzw.&amp;amp;nbsp;Fedora 34+ beim Paket-Build einen eigenen Patch für den Quellcode&lt;br /&gt;
* In den Paketquellen findet sich dazu direkt eine Datei mit dem Namen 0001-Use-SHA-2-instead-of-SHA-1.patch&lt;br /&gt;
&lt;br /&gt;
Debian verwendet weiterhin SHA-1&lt;br /&gt;
* Das ist in diesem Kontext jedoch unkritisch, da der Hash im Verzeichnis-xattr nicht für Sicherheitsfunktionen oder Verschlüsselung verwendet wird&lt;br /&gt;
&lt;br /&gt;
==== restorecon_xattr ====&lt;br /&gt;
Für die Arbeit mit diesen internen Digest-Einträgen (Anzeigen/Bereinigen) stehen folgende Kommandos zur Verfügung&lt;br /&gt;
* restorecon -D (Hashes erzeugen / Dateien unter Verwendung vorhandener Hashes prüfen)&lt;br /&gt;
* restorecon -I (Hashes erzeugen / neu erzeugen, wobei vorhandene ignoriert werden)&lt;br /&gt;
* sowie das separate Werkzeug restorecon_xattr (Hashes anzeigen / löschen)&lt;br /&gt;
&lt;br /&gt;
; Funktionen von restorecon_xattr&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisse anzeigen&#039;&#039;&#039;, in denen security.sehash vorhanden ist&lt;br /&gt;
* &#039;&#039;&#039;Digest und dessen Status&#039;&#039;&#039; im Vergleich zum aktuellen Policy-Satz anzeigen&lt;br /&gt;
* &#039;&#039;&#039;nur veraltete Digest-Einträge löschen&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;alle Digest-Einträge&#039;&#039;&#039; in einem angegebenen Verzeichnisbaum löschen&lt;br /&gt;
&lt;br /&gt;
; Praxisbeispiel mit einigen Hashes&lt;br /&gt;
Start von restorecon mit dem Flag -D und rekursivem Modus -R&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -RDv /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige des Ergebnisses mit restorecon_xattr (zusätzlich mit -r für rekursive Ausgabe)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -r /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Entfernen von Hashes, die nicht mehr zum aktuellen Policy-Satz passen, wird der Parameter -d verwendet&lt;br /&gt;
&lt;br /&gt;
Das Werkzeug berechnet einen neuen Hash und entfernt den alten Hash bei Nichtübereinstimmung (neue Hashes werden dabei nicht geschrieben)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -d -r /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vollständiges Entfernen aller Digests&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -D -r /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden alle security.sehash-Einträge aus dem Verzeichnisbaum entfernt, unabhängig davon, ob sie noch aktuell sind oder nicht&lt;br /&gt;
* Der nächste Lauf von restorecon -D muss die Digests anschließend vollständig neu erzeugen&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass sich der Nutzen von restorecon -D erst bei &#039;&#039;&#039;rekursiver Verarbeitung&#039;&#039;&#039; (-R / -r) entfaltet&lt;br /&gt;
* Nach einem erfolgreichen rekursiven Relabeling wird beim erneuten Ausführen von restorecon -D (mit denselben Parametern und demselben Policy-Satz) der gespeicherte Digest zur Beschleunigung des Verzeichnisdurchlaufs verwendet&lt;br /&gt;
* Das ist insbesondere bei der Prüfung großer Verzeichnisbäume oder sogar des gesamten Dateisystems ab / nützlich&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: &#039;&#039;&#039;Wenn der Parameter&#039;&#039;&#039; -D &#039;&#039;&#039;gesetzt ist&#039;&#039;&#039;, wird für &#039;&#039;&#039;Verzeichnisse ohne vorhandenen Hash&#039;&#039;&#039; ein neuer Digest berechnet und in den Attributen gespeichert&lt;br /&gt;
* Falls &#039;&#039;&#039;für ein Verzeichnis bereits ein Hash existiert&#039;&#039;&#039;, prüft restorecon dessen Gültigkeit, indem es ihn mit dem neu aus der File-Context-Datenbank berechneten Wert vergleicht. &#039;&#039;&#039;Bei Übereinstimmung wird das Verzeichnis beschleunigt verarbeitet.&#039;&#039;&#039; &#039;&#039;&#039;Bei Nichtübereinstimmung erfolgt die Prüfung des aktuellen Verzeichnisses und aller Unterverzeichnisse im normalen Modus&#039;&#039;&#039;, also so, als wäre -D nicht gesetzt&lt;br /&gt;
&lt;br /&gt;
Wird der Parameter -D nicht verwendet, nutzt restorecon den Mechanismus security.sehash bei der Prüfung überhaupt nicht&lt;br /&gt;
&lt;br /&gt;
Wird restorecon -I verwendet, wird ein bereits gespeicherter Digest ignoriert&lt;br /&gt;
* Selbst wenn security.sehash formal übereinstimmt, vertraut restorecon diesem Eintrag nicht und &#039;&#039;&#039;führt im rekursiven Modus zwangsweise eine erneute vollständige Label-Prüfung durch; anschließend wird der Digest aktualisiert&#039;&#039;&#039;&lt;br /&gt;
* Voraussetzung ist, dass das Flag -n nicht gesetzt ist und während der Ausführung keine Fehler auftreten&lt;br /&gt;
&lt;br /&gt;
; Anwendungsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -RIv /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis wird rekursiv geprüft, und jeder Hash wird unabhängig davon, ob bereits ein Digest in den Attributen vorhanden ist, neu erzeugt&lt;br /&gt;
&lt;br /&gt;
== Relabeling-Werkzeuge ==&lt;br /&gt;
; Die Werkzeuge für Relabeling lassen sich in drei Ebenen unterteilen&lt;br /&gt;
&lt;br /&gt;
* setfiles&lt;br /&gt;
** Das grundlegende, low-level ausführbare Binärprogramm (in C geschrieben)&lt;br /&gt;
** Es bildet den Kernmechanismus zur Anwendung der Policy&lt;br /&gt;
** restorecon arbeitet auf Basis von setfiles&lt;br /&gt;
* restorecon&lt;br /&gt;
** Ein Werkzeug auf Benutzerebene, das für gezielte administrative Eingriffe vorgesehen ist&lt;br /&gt;
** restorecon findet, lädt und verwendet automatisch die &#039;&#039;&#039;aktuell aktive SELinux-Policy&#039;&#039;&#039;&lt;br /&gt;
** Das Werkzeug restorecon wird durch dieselbe ausführbare Datei implementiert wie setfiles&lt;br /&gt;
** Der Betriebsmodus wird über argv[0] gewählt, also über den Namen, unter dem das Programm aufgerufen wird&lt;br /&gt;
* fixfiles&lt;br /&gt;
** Dabei handelt es sich nicht um eine Binärdatei, sondern um ein Shell-Skript, das den Aufruf von setfiles und restorecon für globale Systemaufgaben automatisiert&lt;br /&gt;
** Es ist eine skriptbasierte Wrapper-Schicht für typische Wartungsoperationen wie check, verify, restore, relabel, onboot sowie für paketbezogene und inkrementelle Betriebsarten&lt;br /&gt;
** Das Werkzeug kann mit der Datenbank des Paketmanagers (RPM) arbeiten&lt;br /&gt;
** So kann es beispielsweise alle Dateien ermitteln, die zu einem bestimmten Paket gehören, und ausschließlich diese neu labeln&lt;br /&gt;
** Außerdem steuert es den Ablauf eines vollständigen System-Relabelings beim Booten&lt;br /&gt;
&lt;br /&gt;
=== Betriebsarten von fixfiles ===&lt;br /&gt;
==== fixfiles check / fixfiles verify ====&lt;br /&gt;
check und verify sind Betriebsarten ohne Änderung der Labels&lt;br /&gt;
* Sie geben alle inkorrekten Labels aus und zeigen dabei den alten sowie den neuen Kontext an, schreiben jedoch nichts zurück&lt;br /&gt;
* Das ist ein praktischer administrativer Audit-Modus vor einem Relabeling oder nach Änderungen an den Regeln&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t tmp_t /var/www&lt;br /&gt;
chcon -R -t shadow_t /srv&lt;br /&gt;
fixfiles check /var/www /srv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles restore ====&lt;br /&gt;
restore stellt inkorrekte Labels wieder her&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles restore /var/www /srv/app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles relabel ====&lt;br /&gt;
relabel ist für ein vollständiges Relabeling des gesamten Dateisystems vorgesehen&lt;br /&gt;
* Das Werkzeug schlägt vor, den Inhalt von /tmp zu löschen&lt;br /&gt;
* Anschließend werden alle inkorrekten Dateilabels so korrigiert, dass sie den installierten file_contexts entsprechen&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles relabel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles onboot ====&lt;br /&gt;
onboot führt das Relabeling nicht sofort aus, sondern bereitet das System so vor, dass das Relabeling beim nächsten Systemstart erfolgt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles onboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optionen ===&lt;br /&gt;
; Wichtige Optionen&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| -F || (Force) Setzt den Kontext auch bei Dateien mit customizable types zwangsweise zurück&lt;br /&gt;
|-&lt;br /&gt;
| -f || (force clear) Leert die temporären Verzeichnisse /tmp und /var/tmp automatisch vor Beginn der Ausführung, ohne interaktive Rückfragen&lt;br /&gt;
* Das ist besonders nützlich für Automatisierungsskripte&lt;br /&gt;
|-&lt;br /&gt;
| -C PREVIOUS_FILECONTEXT  || (Compare) Vergleicht einen alten file_contexts-Stand mit dem aktuellen und stellt Kontexte nur dort wieder her, wo dies erforderlich ist&lt;br /&gt;
|-&lt;br /&gt;
| -N &amp;quot;YYYY-MM-DD HH:MM&amp;quot;  || (Newer) Beschränkt die Verarbeitung auf Dateien, die nach dem angegebenen Zeitpunkt erstellt wurden&lt;br /&gt;
|-&lt;br /&gt;
| -B  ||  Im Modus restore werden nur Dateien berücksichtigt, die heute verändert wurden&lt;br /&gt;
* Im Modus onboot schreibt derselbe Schalter das aktuelle Datum in /.autorelabel, wodurch das Relabeling beschleunigt werden kann&lt;br /&gt;
|-&lt;br /&gt;
| -M  || (Mounts) Führt vor dem Relabeling Bind-Mounts für Dateisysteme aus, sodass auch Kontexte von Objekten korrekt repariert werden können, über denen etwas eingehängt ist&lt;br /&gt;
|-&lt;br /&gt;
| -T nthreads  || (Threads) Konfiguriert die parallele Verarbeitung mit mehreren Threads oder deaktiviert diese bei -T 1&lt;br /&gt;
|-&lt;br /&gt;
| -l LOGPATH  || (Log) Leitet die gesamte Ausgabe, also sowohl Standardausgabe als auch Fehlermeldungen, in die angegebene Logdatei statt auf den Bildschirm um&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RHEL ==&lt;br /&gt;
&lt;br /&gt;
=== Einbinden von Dateisystemen ===&lt;br /&gt;
Standardmäßig wird beim Einbinden eines Dateisystems, das erweiterte Attribute unterstützt, der Sicherheitskontext für jede Datei aus dem ‚&#039;security.selinux‘&#039;&lt;br /&gt;
 &lt;br /&gt;
erweiterten Attribut der Datei&lt;br /&gt;
* Dateien in Dateisystemen, die keine erweiterten Attribute unterstützen, wird ein einziger Standard-Sicherheitskontext aus der Richtlinienkonfiguration zugewiesen, basierend auf dem Dateisystemtyp&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* 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&lt;br /&gt;
* 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&lt;br /&gt;
* Der mit der Option [[context]] angegebene Kontext wird nicht auf die Festplatte geschrieben&lt;br /&gt;
die ursprünglichen Kontexte bleiben erhalten und sind beim Einbinden ohne [[context]] sichtbar, sofern das Dateisystem ursprünglich über erweiterte Attribute verfügte&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur Dateisystem-Kennzeichnung finden Sie in James Morris&#039; Artikel „Filesystem Labeling in SELinux“&lt;br /&gt;
http://www.linuxjournal.com/article/7426&lt;br /&gt;
&lt;br /&gt;
==== Kontext-Mounts ====&lt;br /&gt;
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=‚&#039;SELinux_user:role:type:level‘&#039;]] beim Einhängen des gewünschten Dateisystems&lt;br /&gt;
* Kontextänderungen werden nicht auf die Festplatte geschrieben&lt;br /&gt;
* Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist&lt;br /&gt;
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]&lt;br /&gt;
* Ohne zusätzliche Mount-Optionen kann dies die Freigabe von NFS-Volumes über andere Dienste, wie den Apache-HTTP-Server, verhindern&lt;br /&gt;
* Das folgende Beispiel mountet ein NFS-Volume so, dass es über den Apache-HTTP-Server freigegeben werden kann&lt;br /&gt;
 sudo mount server:/export /local/mount/point -o \ context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Neu erstellte Dateien und Verzeichnisse auf diesem Dateisystem scheinen den mit [[-o context]] angegebenen SELinux-Kontext zu haben&lt;br /&gt;
* Da diese Änderungen jedoch nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Mountvorgängen nicht erhalten&lt;br /&gt;
* Daher muss diese Option bei jedem Mountvorgang mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten&lt;br /&gt;
* Informationen dazu, wie man Kontext-Mounts dauerhaft macht, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“&lt;br /&gt;
&lt;br /&gt;
Die Typen-Durchsetzung ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird&lt;br /&gt;
* 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&lt;br /&gt;
* Wenn Sie nicht die MLS-Policy oder die Multi-Kategorie-Sicherheit verwenden, verwenden Sie die [[s0]]-Ebene&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dateisystem mit einer [[context]]-Option eingebunden wird, sind Kontextänderungen durch Benutzer und Prozesse untersagt&lt;br /&gt;
* 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]]&lt;br /&gt;
&lt;br /&gt;
==== Ändern des Standardkontexts ====&lt;br /&gt;
Wie in Abschnitt&amp;amp;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&lt;br /&gt;
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[file_t]]&lt;br /&gt;
* Wenn ein anderer Standardkontext verwendet werden soll, mounten Sie das Dateisystem mit der Option [[defcontext]]&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel mountet ein neu erstelltes Dateisystem auf [[/ &lt;br /&gt;
dev/sda2]] in das neu erstellte Verzeichnis [[test/]] ein&lt;br /&gt;
* Dabei wird davon ausgegangen, dass es in [[/etc/selinux/targeted/contexts/files/]] keine Regeln gibt, die einen Kontext für das Verzeichnis [[test/]] definieren&lt;br /&gt;
 sudo mount /dev/sda2 /test/ -o defcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel&lt;br /&gt;
* definiert die Option [[defcontext]], dass [[system_u:object_r:samba_share_t:s0]] „der Standard-Sicherheitskontext für nicht gekennzeichnete Dateien“ ist[5]&lt;br /&gt;
* 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)&lt;br /&gt;
* Dies wirkt sich auf die Kennzeichnung von Dateien aus, die unter [[test/]] erstellt werden&lt;br /&gt;
neue Dateien erben den Typ [[samba_share_t]], und diese Kennzeichnungen werden auf der Festplatte gespeichert&lt;br /&gt;
* Dateien, die unter [[test/]] erstellt wurden, während das Dateisystem mit der Option [[defcontext]] eingebunden war, behalten ihre Kennzeichnungen&lt;br /&gt;
&lt;br /&gt;
==== Einbinden eines NFS-Volumes ====&lt;br /&gt;
Standardmäßig werden NFS-Einbindungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist&lt;br /&gt;
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]&lt;br /&gt;
* 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&lt;br /&gt;
* Dies kann verhindern, dass Dateisysteme, die mit diesem Typ gekennzeichnet sind, eingebunden und anschließend von anderen Diensten gelesen oder exportiert werden&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* Verwenden Sie die folgende context-Option, um NFS-Volumes so einzuhängen, dass sie über den Apache-HTTP-Server freigegeben werden können&lt;br /&gt;
 sudo mount server:/export /local/mount/point -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da diese Änderungen nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Einhängevorgängen nicht erhalten&lt;br /&gt;
* Daher muss diese Option bei jedem Einbinden mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten&lt;br /&gt;
* Informationen dazu, wie Kontext-Mounts dauerhaft gemacht werden können, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
==== Mehrere NFS-Mounts ====&lt;br /&gt;
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&lt;br /&gt;
* Im folgenden Beispiel verfügt der NFS-Server über einen einzigen Export, [[export/]], der zwei Unterverzeichnisse enthält: [ [web/]] und [[database/]]&lt;br /&gt;
* Die folgenden Befehle versuchen zwei Mounts von einem einzigen NFS-Export und versuchen, den Kontext für jeden einzelnen zu überschreiben&lt;br /&gt;
 sudo mount server:/export/web /local/web -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
 sudo mount server:/export/database /local/database -o context=&amp;quot;system_u:object_r:mysqld_db_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Der zweite Mount-Befehl schlägt fehl, und Folgendes wird in [[/var/log/messages]] protokolliert&lt;br /&gt;
kernel&lt;br /&gt;
SELinux&lt;br /&gt;
mount invalid&lt;br /&gt;
* Gleicher Superblock, unterschiedliche Sicherheitseinstellungen für (dev 0:15, Typ nfs)&lt;br /&gt;
&lt;br /&gt;
Um mehrere Mounts aus einem einzigen NFS-Export durchzuführen, wobei jeder Mount einen anderen Kontext hat, verwenden Sie die [[-o nosharecache,context]]-Optionen&lt;br /&gt;
* 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)&lt;br /&gt;
 sudo mount server:/export/web /local/web -o nosharecache,context=„system_u:object_r:httpd_sys_content_t:s0“&lt;br /&gt;
 sudo mount server:/export/database /local/database -o \ nosharecache,context=„system_u:object_r:mysqld_db_t:s0“&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* Diese Typänderungen werden nicht auf die Festplatte geschrieben&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
&lt;br /&gt;
Die Option [[nosharecache]] ermöglicht es Ihnen, dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, beispielsweise [[/export/web/]] mehrfach&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
==== Kontext-Einbindungen dauerhaft machen ====&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel fügt einen Eintrag in [[/etc/fstab]] für eine NFS-Kontext-Einbindung hinzu&lt;br /&gt;
 server:/export /local/mount/ nfs context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot; 0 0&lt;br /&gt;
&lt;br /&gt;
{{navigation|Linux/SELinux/04/09 Dateisysteme|Linux/SELinux/04/10 Labels beibehalten}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/07_Kontexte&amp;diff=163421</id>
		<title>Linux/SELinux/04/07 Kontexte</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/07_Kontexte&amp;diff=163421"/>
		<updated>2026-03-29T15:35:24Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Sicherheitskontext&#039;&#039;&#039; - Struktur und Auslesen des Sicherheitskontexts&lt;br /&gt;
&lt;br /&gt;
= Debian =&lt;br /&gt;
== Kontext und Label ==&lt;br /&gt;
Im SELinux-System (Security-Enhanced Linux) wird der Zugriff auf Ressourcen nicht auf Grundlage der Eigentümerrechte gesteuert (wie im klassischen DAC-Modell), sondern auf Grundlage von &#039;&#039;&#039;Sicherheitskontexten&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
:* SELinux-Richtlinienregeln (MAC) werden erst &#039;&#039;&#039;nach&#039;&#039;&#039; den klassischen Linux-Zugriffsrechten (DAC — Eigentümer, Gruppe, rwx) überprüft.&lt;br /&gt;
:* Wenn bereits die DAC-Regeln den Zugriff verweigern, blockiert das System sofort. SELinux wird in diesem Fall gar nicht erst angewendet und erzeugt folglich auch keine AVC-Meldungen im Audit-Log.&lt;br /&gt;
&lt;br /&gt;
Ein Kontext ist ein spezielles Label, das jedem Systemobjekt zugewiesen wird (Dateien, Prozessen, Netzwerkports)&lt;br /&gt;
&lt;br /&gt;
Datei-Labels werden direkt im Dateisystem als &#039;&#039;&#039;erweiterte Dateiattribute (Extended Attributes oder xattr)&#039;&#039;&#039; gespeichert&lt;br /&gt;
* SELinux verwendet dabei das Attribut mit dem Namen security.selinux&lt;br /&gt;
&lt;br /&gt;
Auf das Vorhandensein erweiterter Attribute weist ein Punkt am Ende der Attributanzeige bei Verwendung von ls -l hin&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
sudo ls -l /var/log/apt/&lt;br /&gt;
total 388&lt;br /&gt;
-rw-r--r--. 1 root root 43628 Mar 21 12:52 eipp.log.xz&lt;br /&gt;
-rw-r--r--. 1 root root 54225 Mar 21 12:52 history.log&lt;br /&gt;
-rw-r-. 1 root adm 283440 Mar 21 12:52 term.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontextzeichenfolge ===&lt;br /&gt;
; Anatomie der Kontextzeichenfolge&lt;br /&gt;
Das vollständige Label eines Sicherheitskontexts besteht aus vier (manchmal fünf) durch Doppelpunkte getrennten Elementen&lt;br /&gt;
&lt;br /&gt;
; Typische Struktur&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line&amp;gt;&lt;br /&gt;
user : role : type : level&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Typen ==&lt;br /&gt;
; Bedeutung des Typs (Type) in der Targeted Policy&lt;br /&gt;
In den meisten modernen Distributionen (RHEL, CentOS, Fedora, Debian) wird standardmäßig die Policy &#039;&#039;&#039;Targeted&#039;&#039;&#039; verwendet&lt;br /&gt;
* In diesem Modell liegt der Schwerpunkt auf &#039;&#039;&#039;Type Enforcement (TE)&#039;&#039;&#039; — der erzwungenen Zuweisung von Typen&lt;br /&gt;
&#039;&#039;&#039;Zur Analyse von Sicherheitslabels (Kontexten) werden Standard-Linux-Werkzeuge mit der zusätzlichen Option&#039;&#039;&#039; -Z &#039;&#039;&#039;verwendet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Option -Z wird von fast allen grundlegenden Befehlen unterstützt&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cp -Z&#039;&#039; — kopiert eine Datei und weist ihr sofort den korrekten Kontext des Zielverzeichnisses zu (den Standardkontext des Verzeichnisses)&lt;br /&gt;
:* Im Gegensatz dazu bewahrt der Parameter -a den ursprünglichen Kontext der Datei&lt;br /&gt;
* &#039;&#039;mkdir -Z&#039;&#039; — erstellt ein Verzeichnis, das sofort den Standardkontext erhält (ohne dass restorecon ausgeführt werden muss)&lt;br /&gt;
* Außerdem die Anzeigeprogramme: &#039;&#039;ls -Z&#039;&#039; (Dateien), &#039;&#039;ps -Z&#039;&#039; (Prozesse), &#039;&#039;id -Z&#039;&#039; (Benutzer)&lt;br /&gt;
&lt;br /&gt;
=== Kontext von Dateien und Verzeichnissen ===&lt;br /&gt;
; Vererbung (Inheritance)&lt;br /&gt;
: Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse. Wenn Sie beispielsweise eine neue Datei im Verzeichnis &#039;&#039;/etc&#039;&#039; erstellen, das mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet ist, erhält die neue Datei automatisch denselben Typ.&lt;br /&gt;
&lt;br /&gt;
Zum Anzeigen des Kontexts von Dateien wird der Befehl ls -Z verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
ls -Z /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line copy&amp;gt;&lt;br /&gt;
system_u:object_r:var_log_t:s0 README&lt;br /&gt;
system_u:object_r:var_log_t:s0 alternatives.log&lt;br /&gt;
system_u:object_r:httpd_log_t:s0 apache2&lt;br /&gt;
system_u:object_r:apt_var_log_t:s0 apt&lt;br /&gt;
system_u:object_r:auditd_log_t:s0 audit&lt;br /&gt;
system_u:object_r:faillog_t:s0 btmp&lt;br /&gt;
system_u:object_r:var_log_t:s0 cloud-init-output.log&lt;br /&gt;
system_u:object_r:var_log_t:s0 cloud-init.log&lt;br /&gt;
system_u:object_r:var_log_t:s0 dpkg.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interpretation der Typen ===&lt;br /&gt;
Bei der Analyse von Kontexten sollte man auf die Suffixe der Typen achten, da diese häufig auf ihren Zweck hinweisen&lt;br /&gt;
{| class=&amp;quot;wikitable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Kontext !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| _t || Allgemeines Suffix für Typen (type)&lt;br /&gt;
|-&lt;br /&gt;
| _exec_t || Typ, der ausführbaren Dateien (Binärdateien) zugewiesen wird&lt;br /&gt;
|-&lt;br /&gt;
| _conf_t || Typ für Konfigurationsdateien&lt;br /&gt;
|-&lt;br /&gt;
| _log_t || Typ für Logdateien&lt;br /&gt;
|-&lt;br /&gt;
| _tmp_t || Typ für temporäre Dateien&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extended Attributes ==&lt;br /&gt;
; Speicherung auf dem Datenträger&lt;br /&gt;
SELinux-Sicherheitskontexte werden nicht in einer separaten Datenbank oder einem zentralen Journal gespeichert&lt;br /&gt;
* Sie sind ein integraler Bestandteil des Dateisystems und werden zusammen mit den Dateien verschoben, wenn diese kopiert oder verschoben werden (sofern die verwendeten Werkzeuge die Beibehaltung der Attribute unterstützen)&lt;br /&gt;
&lt;br /&gt;
; Begriff Extended Attributes (xattr)&lt;br /&gt;
&#039;&#039;&#039;Erweiterte Attribute (xattr)&#039;&#039;&#039; sind eine Funktion von Dateisystemen (wie Ext4, XFS, Btrfs), die es ermöglichen, einer Datei oder einem Verzeichnis zusätzliche Metadaten im Format „Schlüssel=Wert“ zuzuordnen&lt;br /&gt;
&lt;br /&gt;
Während Standardattribute (Zugriffsrechte, Eigentümer, Zeitstempel) eine feste Struktur haben, ermöglichen erweiterte Attribute die Speicherung beliebiger Daten&lt;br /&gt;
&lt;br /&gt;
Hier speichert SELinux die Kontextzeichenfolge unter dem Schlüssel security.selinux&lt;br /&gt;
&lt;br /&gt;
== Namensräume ==&lt;br /&gt;
; Namensräume (Namespaces)&lt;br /&gt;
Zur Vermeidung von Konflikten und zur Gewährleistung der Sicherheit sind erweiterte Attribute in Namensräume unterteilt&lt;br /&gt;
&lt;br /&gt;
Jeder Namensraum hat eigene Zugriffsregeln&lt;br /&gt;
{| class=&amp;quot;wikitable big options&amp;quot;&lt;br /&gt;
!Namensraum&lt;br /&gt;
!Zweck&lt;br /&gt;
!Zugriff&lt;br /&gt;
|-&lt;br /&gt;
|security&lt;br /&gt;
|Wird von Sicherheitsmodulen verwendet (SELinux, AppArmor, IMA)&lt;br /&gt;
|Der Zugriff ist auf den Kernel und Prozesse mit besonderen Privilegien beschränkt&lt;br /&gt;
|-&lt;br /&gt;
|system&lt;br /&gt;
|Wird vom Kernel zur Speicherung von Systemdaten verwendet, zum Beispiel von Access Control Lists (ACL)&lt;br /&gt;
|In der Regel nur für den Kernel zugänglich&lt;br /&gt;
|-&lt;br /&gt;
|user&lt;br /&gt;
|Ist für Benutzeranwendungen und Dokumente vorgesehen&lt;br /&gt;
|Wird durch die standardmäßigen Zugriffsrechte (DAC) geregelt&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|Zur Speicherung von Daten, auf die nur Prozesse mit dem Privileg CAP_SYS_ADMIN zugreifen dürfen&lt;br /&gt;
|Für normale Benutzer unsichtbar, selbst wenn sie Eigentümer der Datei sind&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
; Arbeit mit Attributen&lt;br /&gt;
getfattr und setfattr&lt;br /&gt;
&lt;br /&gt;
Obwohl für die Verwaltung von SELinux häufiger spezialisierte Befehle (chcon, semanage) verwendet werden, ermöglichen Low-Level-Werkzeuge aus dem Paket attr, zu sehen, wie diese Daten aus Sicht des Dateisystems aussehen&lt;br /&gt;
&lt;br /&gt;
=== Attribute anzeigen ===&lt;br /&gt;
; Attribute anzeigen (getfattr)&lt;br /&gt;
Zum Lesen eines Attributs einer bestimmten Datei wird der Befehl getfattr verwendet&lt;br /&gt;
* Um den SELinux-Kontext anzuzeigen, muss der vollständige Schlüsselname im Namensraum security angegeben werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
getfattr -n security.selinux /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um alle vorhandenen Attribute einer Datei anzuzeigen, wird ein Befehl der Form &#039;&#039;getfattr -m . -d /etc/passwd&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
=== Attribute setzen ===&lt;br /&gt;
; Attribute setzen (setfattr)&lt;br /&gt;
Der Befehl setfattr ermöglicht es, den Kontextwert manuell zu ändern&lt;br /&gt;
* Diese Aktion erfordert Superuser-Rechte und wird in der Regel nur zu Debugging-Zwecken oder für ein tieferes Systemverständnis ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
touch testfile&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;unconfined_u:object_r:user_home_t:s0&amp;quot; testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von setfattr prüft das System die Korrektheit des eingegebenen Kontexts nicht so streng, wie es die SELinux-Werkzeuge tun&lt;br /&gt;
* Ein Fehler in der Zeichenfolge kann dazu führen, dass die Datei für Zielprozesse unzugänglich wird.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Modus prüfen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
getenforce&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der Befehl&#039;&#039; Enforcing &#039;&#039;zurückgibt, schalten Sie ihn vorübergehend mit dem Befehl&#039;&#039; setenforce 0 &#039;&#039;auf&#039;&#039; Permissive &#039;&#039;um.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Blockierende Situation ===&lt;br /&gt;
; Erzeugen einer blockierenden Situation&lt;br /&gt;
Sie haben eine Datei erstellt, ihr jedoch versehentlich (oder absichtlich) einen Kontext zugewiesen, der weder für einen normalen Benutzer noch für das aktuelle Verzeichnis vorgesehen ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
touch /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ls -Z /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:object_r:user_tmp_t:s0 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie an der Konsolenausgabe zu sehen ist, hat die Datei den Typ &#039;&#039;&#039;user_tmp_t&#039;&#039;&#039;, der typisch für Dateien im Verzeichnis /tmp ist&lt;br /&gt;
* Viele Programme haben Leserechte auf dieses Verzeichnis&lt;br /&gt;
* Weisen wir der Datei nun den &#039;&#039;&#039;Typ shadow_t&#039;&#039;&#039; zu&lt;br /&gt;
&lt;br /&gt;
Unter normalen Umständen haben nur Passwortdateien diesen Typ, und normalen Prozessen sowie Benutzern ist die Interaktion mit solchen Dateien untersagt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:shadow_t:s0&amp;quot; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen von Attributen kann auch das Werkzeug chcon verwendet werden; in diesem Fall sieht der Befehl wie folgt aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
chcon -t shadow_t /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das Werkzeug chcon sprechen wir etwas später noch genauer besprochen&lt;br /&gt;
&lt;br /&gt;
Prüfung, ob die Attribute korrekt gesetzt wurden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
sudo ls -Z /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:object_r:shadow_t:s0 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schließlich muss nun ein Verstoß provoziert werden; dazu versuchen wir, die Datei zu lesen oder zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; &amp;gt; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun betrachten wir die AVC-Ereignisse mit dem Werkzeug ausearch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und wir werden nichts sehen, denn standardmäßig gelangt ein Benutzer, der sich per SSH oder über die Konsole anmeldet, in den Standardrichtlinien (Targeted Policy) in die Domäne &#039;&#039;&#039;unconfined_t&#039;&#039;&#039; (uneingeschränkt)&lt;br /&gt;
&lt;br /&gt;
Das kann mit dem Befehl id -Z geprüft werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
sudo id -Z&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prozessen in der Domäne unconfined ist praktisch alles erlaubt&lt;br /&gt;
&lt;br /&gt;
SELinux sieht, dass ein „uneingeschränkter“ Prozess eine Datei liest, und auch wenn die Datei einen ungewöhnlichen Typ hat (wie &#039;&#039;&#039;shadow_t&#039;&#039;&#039;), betrachtet es dies für diesen konkreten Prozess nicht als Richtlinienverstoß&lt;br /&gt;
&lt;br /&gt;
Um die Funktionsweise von SELinux zu prüfen, muss das Lesen der Datei mit dem Kontext eines anderen Prozesses gestartet werden, zum Beispiel &#039;&#039;&#039; httpd_t&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da der Typ &#039;&#039;&#039;httpd_t&#039;&#039;&#039; keinen Zugriff auf ausführbare Dateien des Typs &#039;&#039;&#039;bin_t&#039;&#039;&#039; hat (dieser Typ ist für cat gesetzt), erstellen wir eine Kopie von cat und weisen ihr den Typ &#039;&#039;&#039;httpd_t&#039;&#039;&#039; zu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
cp /usr/bin/cat /tmp/fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:httpd_t:s0&amp;quot; /tmp/fake_httpd sudo oder chcon -t httpd_t /tmp/fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy&amp;gt;&lt;br /&gt;
systemd-run -p SELinuxContext=system_u:system_r:httpd_t:s0 /tmp/fake_httpd /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In SELinuxContext wird der Kontext für den Start angegeben&lt;br /&gt;
* Anschließend wird cat mit dem Sicherheitstyp httpd_t gestartet und versucht, /tmp/testfile zu lesen&lt;br /&gt;
&lt;br /&gt;
Wir betrachten die AVC-Einträge&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent -c fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1774103099.579:33834): avc: denied { getattr } for pid=38589 comm=&amp;quot;fake_httpd&amp;quot; path=&amp;quot;/tmp/testfile&amp;quot; dev=&amp;quot;tmpfs&amp;quot; ino=117 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:shadow_t:s0 tclass=file permissive=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* { getattr } zeigt, welche konkrete Aktion das Subjekt auszuführen versucht hat&lt;br /&gt;
* tcontext zeigt den Kontext des Objekts, auf das ein unbefugter Zugriff versucht wurde&lt;br /&gt;
* scontext zeigt den Kontext des Subjekts, das versucht hat, auf das Objekt mit tcontext zuzugreifen&lt;br /&gt;
* path zeigt den Pfad zur Datei&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie im Log zu sehen ist, wurde der Zugriff für fake_httpd bereits beim Lesen der Dateiattribute verweigert!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist zu erkennen, dass es für SELinux keine Rolle spielt, unter welchem Benutzer der Prozess gestartet wurde, der gegen die Regeln verstoßen wollte&lt;br /&gt;
* Auch Zugriffsrechte wie chmod 777 beeinflussen das Ergebnis nicht&lt;br /&gt;
&lt;br /&gt;
Versuchen wir dasselbe mit dem Typ &#039;&#039;&#039;user_home_t&#039;&#039;&#039;&lt;br /&gt;
* Dieser Typ wird für Dateien im Home-Verzeichnis eines Benutzers verwendet&lt;br /&gt;
* Der Prozess httpd darf keine Leserechte auf Dateien im Home-Verzeichnis eines Benutzers haben&lt;br /&gt;
&lt;br /&gt;
Zur Veranschaulichung geben wir der Datei zusätzlich Vollzugriff für alle&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:user_home_t:s0&amp;quot; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
chmod 777 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
systemd-run -p SELinuxContext=system_u:system_r:httpd_t:s0 /tmp/fake_httpd /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent -c fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und erneut erscheint im Log eine Meldung über einen Verstoß&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1774103685.752:33957): avc: denied { getattr } for pid=38729 comm=&amp;quot;fake_httpd&amp;quot; path=&amp;quot;/tmp/testfile&amp;quot; dev=&amp;quot;tmpfs&amp;quot; ino=117 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_t:s0 tclass=file permissive=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Wenn dieselbe verbotene Aktion mehrmals hintereinander ausgeführt wird, erscheint sie nicht jedes Mal im Log, um Spam zu vermeiden&lt;br /&gt;
&lt;br /&gt;
Um den SELinux-Cache zu leeren, kann ein Neustart des Betriebsmodus verwendet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
 setenforce 1 &amp;amp;&amp;amp; setenforce 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change context (chcon) ===&lt;br /&gt;
SELinux-Kontext einer Datei oder eines Verzeichnisses ändern&lt;br /&gt;
&lt;br /&gt;
; Funktionen&lt;br /&gt;
* vollständigen Kontext auf einmal setzen&lt;br /&gt;
* einzelne Kontextfelder (etwa den Typ) ändern&lt;br /&gt;
* Kontext einer anderen Datei übernehmen (--reference)&lt;br /&gt;
&lt;br /&gt;
Zuvor wurden setfattr und chcon verwendet&lt;br /&gt;
* Wie man sehen kann, ist chcon komfortabler, da sich damit einzelne Felder gezielt ändern lassen&lt;br /&gt;
* Außerdem wird chcon als primäres Werkzeug für die Arbeit mit SELinux-Kontexten empfohlen, während setfattr ein Low-Level-Werkzeug ist, das mit Nicht-SELinux-xattr arbeitet&lt;br /&gt;
&lt;br /&gt;
Die wichtigste Einschränkung von chcon (genauso wie von setfattr) besteht darin, dass die Änderungen &#039;&#039;&#039;nicht dauerhaft&#039;&#039;&#039; sind&lt;br /&gt;
* Sie können nach restorecon oder nach einem vollständigen Relabeling des Dateisystems verloren gehen&lt;br /&gt;
&lt;br /&gt;
Daher wird dieses Werkzeug hauptsächlich verwendet für&lt;br /&gt;
* Laborübungen&lt;br /&gt;
* schnelle Diagnose&lt;br /&gt;
* temporäre Überprüfung von Richtlinien&lt;br /&gt;
&lt;br /&gt;
Die dauerhafte Konfiguration von Labels erfolgt mit dem Werkzeug semanage und einem anschließenden Aufruf von restorecon&lt;br /&gt;
* Näheres zum Werkzeug semanage folgt in den nächsten Lektionen&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Zur Demonstration erstellen wir die erforderlichen Dateien und Verzeichnisse und prüfen den Kontext des Verzeichnisses sowie der Dateien&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /tmp/web_content/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
cd /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch test.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch images/image.png&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Zd /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1 /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diesem Verzeichnis wurde der Typ &#039;&#039;&#039;user_tmp_t&#039;&#039;&#039; vererbt, ebenso den darin enthaltenen Dateien&lt;br /&gt;
&lt;br /&gt;
Versuchen wir, den vollständigen Kontext manuell zu setzen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon system_u:object_r:httpd_sys_content_t:s0 manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird nur selten verwendet, da für SELinux in der Regel das Feld type am wichtigsten ist&lt;br /&gt;
&lt;br /&gt;
Um das Feld type zu ändern, wird der Parameter -t verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t shadow_t manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Ändern der Felder user und role werden entsprechend die Optionen &#039;&#039;&#039;-u&#039;&#039;&#039; und &#039;&#039;&#039;-r&#039;&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
Der Parameter -R erlaubt die rekursive Verarbeitung von Verzeichnissen&lt;br /&gt;
&lt;br /&gt;
Weisen wir dem gesamten Verzeichnis web_content den Typ httpd_sys_content_t zu und verwenden dabei den Parameter &#039;&#039;&#039;-v&#039;&#039;&#039;, um Details anzuzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -v -t httpd_sys_content_t /tmp/web_content&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kontext von einem bereits korrekt gelabelten Objekt zu kopieren, kann die Option &#039;&#039;&#039;--reference=RFILE&#039;&#039;&#039; verwendet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /tmp/ref&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R --reference=/tmp/ref /tmp/web_content&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Parameter für den Umgang mit Symlinks&lt;br /&gt;
{| class=&amp;quot;wikitable sortable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! GNU  !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || --dereference || (standardmäßig verwendet) wirkt nicht auf den symbolischen Link selbst, sondern auf das Objekt, auf das er verweist&lt;br /&gt;
|-&lt;br /&gt;
| -h || --no-dereference || ändert den symbolischen Link selbst und nicht das Zielobjekt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Woher kommt der „richtige“ Kontext (File Contexts) ==&lt;br /&gt;
In der ersten Phase wurden die tatsächlichen Dateilabels betrachtet: was in security.selinux gespeichert ist, wie dies in ls -Z aussieht und warum sich cp und mv unterschiedlich verhalten&lt;br /&gt;
&lt;br /&gt;
In dieser Lektion kommt die nächste Modellebene hinzu: &#039;&#039;&#039;SELinux speichert nicht nur das aktuelle Label eines Objekts, sondern auch die Vorstellung davon, welcher Kontext einem Pfad gemäß den Regeln der Policy zugewiesen sein soll&#039;&#039;&#039;&lt;br /&gt;
Für das Verständnis der Logik der SELinux-Labeling-Regeln müssen zwei Begriffe strikt voneinander getrennt werden&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Tatsächliches Label (Security Context).&#039;&#039;&#039; Das sind die Daten, die physisch in den erweiterten Attributen des Dateisystems (extended attributes — xattr) auf dem Datenträger gespeichert sind&lt;br /&gt;
#* Genau dieses Label sehen der Linux-Kernel und das SELinux-Modul beim Zugriff auf eine Datei und verwenden es für die Zugriffsentscheidung&lt;br /&gt;
# &#039;&#039;&#039;Erwarteter Kontext (File Context).&#039;&#039;&#039; Das ist eine Regel, die in der &#039;&#039;&#039;SELinux-Policy-Datenbank&#039;&#039;&#039; definiert ist&lt;br /&gt;
#* Sie legt fest, welches Label einer Datei oder einem Verzeichnis an einem bestimmten Pfad &#039;&#039;zugewiesen werden soll&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wo SELinux Informationen über erwartete Kontexte speichert ===&lt;br /&gt;
In der Default-Policy befinden sich die Änderungen im Zusammenhang mit File Contexts im Verzeichnis&lt;br /&gt;
 /etc/selinux/default/contexts/files/&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Policy kann mit dem Befehl sestatus angezeigt werden&lt;br /&gt;
&lt;br /&gt;
 # sestatus&lt;br /&gt;
 ..&lt;br /&gt;
 SELinux root directory:         /etc/selinux&lt;br /&gt;
 Loaded policy name:             default&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
==== Struktur der File-Context-Dateien ====&lt;br /&gt;
* file_contexts — Basistabelle der File Contexts der aktiven Policy&lt;br /&gt;
* file_contexts.local — lokale administrative Ergänzungen&lt;br /&gt;
* file_contexts.homedirs — separate Einstellungen für Home-Verzeichnisse&lt;br /&gt;
* .subs und .subs_dist — Dateien für Pfadsubstitutionen&lt;br /&gt;
&lt;br /&gt;
Um zu verstehen, wie das System Pfade und Labels einander zuordnet, öffnen wir die Datei /etc/selinux/default/contexts/file/file_contexts&lt;br /&gt;
 head /etc/selinux/default/contexts/files/file_contexts&lt;br /&gt;
&lt;br /&gt;
; Ausgabe&lt;br /&gt;
 /.*                               system_u:object_r:default_t:s0&lt;br /&gt;
 /a?quota\.(user|group)    --      system_u:object_r:quota_db_t:s0&lt;br /&gt;
 /sys(/.*)?                        system_u:object_r:sysfs_t:s0&lt;br /&gt;
 /xen(/.*)?                        system_u:object_r:xen_image_t:s0&lt;br /&gt;
 /mnt(/[^/]*)   			      -l      system_u:object_r:mnt_t:s0&lt;br /&gt;
 /mnt(/[^/]*)?   		        -d      system_u:object_r:mnt_t:s0&lt;br /&gt;
 /dev/.*                           system_u:object_r:device_t:s0&lt;br /&gt;
 /etc/.*                           system_u:object_r:etc_t:s0&lt;br /&gt;
 /opt/.*                           system_u:object_r:usr_t:s0&lt;br /&gt;
 /run/.* 						                &amp;lt;&amp;lt;none&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede Zeile in dieser Datei stellt eine feste Anweisung für SELinux dar und besteht aus zwei oder drei Spalten&lt;br /&gt;
# &#039;&#039;&#039;Regulärer Ausdruck (Regular Expression).&#039;&#039;&#039; Die erste Spalte beschreibt den Pfad&lt;br /&gt;
#* SELinux verwendet reguläre Ausdrücke im PCRE*-Format (Perl-compatible regular expression)&lt;br /&gt;
#* Beispielsweise bedeutet der Ausdruck /var/www(/.*)?: sowohl das Verzeichnis /var/www selbst als auch absolut jede Datei oder jedes Unterverzeichnis darin&lt;br /&gt;
#* Wichtig zur PCRE-Verarbeitung:&lt;br /&gt;
#*:* Das einzige verwendete Flag ist &#039;&#039;&#039;PCRE2_DOTALL&#039;&#039;&#039;. Dadurch stimmt der Platzhalter &#039;&#039;.&#039;&#039; (Punkt) mit jedem beliebigen Zeichen überein, &#039;&#039;&#039;einschließlich Zeilenumbrüchen&#039;&#039;&#039;&lt;br /&gt;
#*:* Zeichenfolgen, die Pfade darstellen, werden strikt als Bytes verarbeitet. Das bedeutet, dass Nicht-ASCII-Zeichen (wie z.B. deutsche Umlaute) unter Umständen nicht durch einen einzelnen Platzhalter abgeglichen werden können&lt;br /&gt;
# &#039;&#039;&#039;Objekttyp (optional).&#039;&#039;&#039; Die zweite Spalte kann präzisieren, für welchen Typ von Dateisystemobjekten die Regel gilt&lt;br /&gt;
#* -d — nur auf Verzeichnisse anwenden&lt;br /&gt;
#* -- — nur auf reguläre Dateien anwenden&lt;br /&gt;
#* &#039;&#039;Falls die Spalte fehlt, gilt die Regel für alle Objekte am angegebenen Pfad.&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Erwarteter Kontext (Security Context).&#039;&#039;&#039; Die letzte Spalte enthält das Referenzlabel, das dem Objekt zugewiesen werden soll&lt;br /&gt;
#* Das wichtigste Element hierbei ist &#039;&#039;&#039;Type&#039;&#039;&#039; (zum Beispiel httpd_sys_content_t), der die Zugriffsdomänen bestimmt&lt;br /&gt;
&lt;br /&gt;
(* PCRE - Perl-compatible regular expression)&lt;br /&gt;
&lt;br /&gt;
Bei der Initialisierung des Dateisystems oder beim erzwungenen Zurücksetzen der Labels (Relabeling) liest der Kernel diese Datei Zeile für Zeile von oben nach unten&lt;br /&gt;
* Wenn das Dienstprogramm eine Übereinstimmung zwischen dem Dateipfad und dem regulären Ausdruck findet, weist es dem Objekt den entsprechenden Kontext aus der dritten Spalte zu&lt;br /&gt;
&lt;br /&gt;
== Struktur von File-Context-Regeln und ihre Prioritäten ==&lt;br /&gt;
Im vorherigen Schritt wurde die Quelle der Dateikontexte analysiert — die Datenbank file_contexts&lt;br /&gt;
* In dieser Lektion gehen wir tiefer in die Funktionsweise dieser Datenbank: wie das System die Zuordnungstabelle path -&amp;gt; label genau liest und wie es entscheidet, welcher Kontext zugewiesen wird, wenn mehrere Regeln auf denselben Pfad passen&lt;br /&gt;
&lt;br /&gt;
=== Format einer File-Context-Regel ===&lt;br /&gt;
Jeder Eintrag in file_contexts, file_contexts.local und file_contexts.homedirs hat dieselbe Grundform&lt;br /&gt;
 pathname [file_type] context&lt;br /&gt;
&lt;br /&gt;
* pathname — vollständiger Pfad oder regulärer PCRE-Ausdruck, anhand dessen SELinux nach Übereinstimmungen sucht&lt;br /&gt;
* file_type — optionale Einschränkung auf einen Objekttyp&lt;br /&gt;
* context — der Kontext, der dem Objekt zugewiesen werden soll&lt;br /&gt;
&lt;br /&gt;
==== pathname ====&lt;br /&gt;
Betrachten wir ein Beispiel für eine Regel&lt;br /&gt;
 /var/www(/.*)?    system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&lt;br /&gt;
* Die Regel deckt den gesamten Teilbaum /var/www ab, also das Verzeichnis selbst und alle darin enthaltenen Objekte&lt;br /&gt;
&lt;br /&gt;
==== file_type ====&lt;br /&gt;
Die optionale zweite Spalte schränkt die Regel auf einen bestimmten Objekttyp ein&lt;br /&gt;
&lt;br /&gt;
In File Contexts werden folgende Bezeichnungen verwendet&lt;br /&gt;
{| class=&amp;quot;wikitable options big col1center&amp;quot;&lt;br /&gt;
! Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| d&lt;br /&gt;
|Verzeichnis&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|reguläre Datei&lt;br /&gt;
|-&lt;br /&gt;
| l&lt;br /&gt;
|symbolischer Link&lt;br /&gt;
|-&lt;br /&gt;
| s&lt;br /&gt;
|Socket&lt;br /&gt;
|-&lt;br /&gt;
| p&lt;br /&gt;
|Named Pipe&lt;br /&gt;
|-&lt;br /&gt;
| c&lt;br /&gt;
|Zeichengerätedatei&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
|Blockgerätedatei&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== context ====&lt;br /&gt;
Die letzte Spalte enthält genau den &#039;&#039;&#039;erwarteten Security Context&#039;&#039;&#039;, der für einen übereinstimmenden Pfad zurückgegeben werden soll&lt;br /&gt;
* Im Normalfall ist das ein vollständiges Label im Format user:role:type:range&lt;br /&gt;
&lt;br /&gt;
Zulässig ist auch der spezielle Wert &amp;lt;&amp;lt;none&amp;gt;&amp;gt;&lt;br /&gt;
* Er bedeutet, dass beim Relabeling für den übereinstimmenden Pfad kein Kontext gesetzt werden soll und dass ein Lookup kein Ergebnis zurückliefert&lt;br /&gt;
&lt;br /&gt;
=== Prioritäten der Regeln ===&lt;br /&gt;
&lt;br /&gt;
==== Basis- und modulare Policy-Definitionen ====&lt;br /&gt;
Um Konflikte zu vermeiden, verwendet der SELinux-Parser ein striktes Prioritätssystem&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Eine exakte Übereinstimmung hat die höchste Priorität.&#039;&#039;&#039; Eine Regel, die einen Pfad ohne Platzhalter regulärer Ausdrücke beschreibt (zum Beispiel genau /etc/passwd), gewinnt immer gegenüber allgemeineren Ausdrücken&lt;br /&gt;
# &#039;&#039;&#039;Die maximale Länge der Übereinstimmung bestimmt die Spezifität.&#039;&#039;&#039; Falls es keine exakte Übereinstimmung gibt, gewinnt die spezifischste Regel — also diejenige, bei der der übereinstimmende Teil des Pfads länger ist&lt;br /&gt;
#* Eine Regel für /var/www/html(/.*)? sticht eine allgemeinere Regel für /var/www(/.*)?&lt;br /&gt;
# &#039;&#039;&#039;Eine explizite Angabe der Objektklasse erhöht die Priorität.&#039;&#039;&#039; Bei gleicher Länge der Übereinstimmung hat eine Regel mit explizit angegebenem Klassifizierer (zum Beispiel -d für Verzeichnisse oder -- für reguläre Dateien) Vorrang vor einer Regel ohne Klassenangabe&lt;br /&gt;
&lt;br /&gt;
Dank dieser Hierarchie werden Basislabels auf der Ebene der Wurzel des Dateisystems gesetzt und dann beim tieferen Abstieg im Verzeichnisbaum weiter verfeinert und überschrieben&lt;br /&gt;
&lt;br /&gt;
==== Lokale Regeln in file_contexts.local ====&lt;br /&gt;
Für lokale SELinux-Regeln gilt eine andere Prioritätslogik als für Basis- und modulare Policy-Definitionen&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Lokale Regeln haben Vorrang vor der Policy.&#039;&#039;&#039; Jeder Eintrag aus file_contexts.local, der zum Beispiel über semanage fcontext hinzugefügt wurde, wird vor den entsprechenden Definitionen aus der Basis-Policy oder aus Modulen berücksichtigt&lt;br /&gt;
# &#039;&#039;&#039;Die Priorisierung erfolgt von neuen zu alten Einträgen.&#039;&#039;&#039; Lokale Regeln werden nicht nach dem Prinzip „am spezifischsten“ verarbeitet, sondern in umgekehrter Reihenfolge ihrer Hinzufügung: vom zuletzt hinzugefügten Eintrag bis zum frühesten&lt;br /&gt;
# &#039;&#039;&#039;Es wird die erste Übereinstimmung verwendet.&#039;&#039;&#039; Sobald eine passende lokale Regel gefunden wurde, wird die weitere Suche beendet&lt;br /&gt;
#* Das bedeutet, dass ein allgemeinerer, aber später hinzugefügter Ausdruck einen genaueren, aber früher erstellten Ausdruck überdecken kann&lt;br /&gt;
&lt;br /&gt;
Daher erfordern lokale Regeln besondere Sorgfalt: Ein zu weit gefasster Ausdruck, der über semanage fcontext hinzugefügt wurde, kann unerwartet genauere Basisdefinitionen der Policy überdecken&lt;br /&gt;
&lt;br /&gt;
Genau aus diesem Grund sollten lokale reguläre Ausdrücke möglichst eng gefasst und zielgerichtet sein, sodass sie nur den tatsächlich benötigten Abschnitt des Verzeichnisbaums überschreiben&lt;br /&gt;
&lt;br /&gt;
=== Befehl matchpathcon ===&lt;br /&gt;
matchpathcon fragt die System-Policy ab und gibt den &#039;&#039;&#039;Standardkontext&#039;&#039;&#039; aus, der mit dem angegebenen Pfad verknüpft ist&lt;br /&gt;
* Das Werkzeug ist speziell für die Analyse des erwarteten Kontexts nützlich und nicht für den aktuellen Inhalt von xattr&lt;br /&gt;
* Dieses Dienstprogramm &#039;&#039;&#039;verwaltet keine Regeln&#039;&#039;&#039;, sondern &#039;&#039;&#039;zeigt lediglich das Ergebnis der Pfadprüfung&#039;&#039;&#039; gegen die File-Context-Datenbank an&lt;br /&gt;
&lt;br /&gt;
; Hauptziele bei der Verwendung von matchpathcon&lt;br /&gt;
* verstehen, &#039;&#039;&#039;welches Label ein Pfad haben sollte&#039;&#039;&#039;&lt;br /&gt;
* das &#039;&#039;&#039;tatsächliche Label&#039;&#039;&#039; mit der &#039;&#039;&#039;Policy-Erwartung&#039;&#039;&#039; vergleichen&lt;br /&gt;
* im Voraus prüfen, welchen Kontext ein neuer Pfad nach dem Ausführen von restorecon erhält&lt;br /&gt;
&lt;br /&gt;
===== Prüfschichten  =====&lt;br /&gt;
Prüfschichten entsprechend der Priorität der Regeln (von der niedrigsten zur höchsten Priorität)&lt;br /&gt;
* Basisregeln der Policy (file_contexts)&lt;br /&gt;
* Regeln für Home-Verzeichnisse (file_contexts.homedirs)&lt;br /&gt;
* Systemweite Pfad-Aliase der Distribution (file_contexts.subs_dist)&lt;br /&gt;
* Lokale Äquivalenzregeln (file_contexts.subs)&lt;br /&gt;
* lokale administrative Änderungen (file_contexts.local)&lt;br /&gt;
&lt;br /&gt;
===== Optionen =====&lt;br /&gt;
Zunächst verwenden wir den Befehl ohne Parameter, um das erwartete Label für die Datei /etc/resolv.conf anzusehen&lt;br /&gt;
* Anschließend vergleichen wir es mit dem tatsächlichen Label mittels ls&lt;br /&gt;
&lt;br /&gt;
 matchpathcon /etc/resolv.conf&lt;br /&gt;
 ls -Z /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
* Für die Problemdiagnose — insbesondere um zu prüfen, ob der auf dem Datenträger vorhandene Kontext mit dem Standardkontext aus der Policy übereinstimmt — ist auch der Parameter -V (Verify) praktisch&lt;br /&gt;
* Zur Veranschaulichung erzeugen wir eine Situation, in der das aktuelle Label nicht mit dem erwarteten übereinstimmt&lt;br /&gt;
&lt;br /&gt;
 cp -a /etc/hosts /var/log/hosts&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -V /var/log/hosts&lt;br /&gt;
 /var/log/hosts has context system_u:object_r:net_conf_t:s0, should be system_u:object_r:var_log_t:s0&lt;br /&gt;
&lt;br /&gt;
Wichtig ist zu beachten, dass das Dienstprogramm matchpathcon für manche Pfade &amp;lt;&amp;lt;none&amp;gt;&amp;gt; zurückgeben kann (zum Beispiel für Dateien in tmp)&lt;br /&gt;
* Das ist ein spezieller interner Wert in der Datenbank file_contexts: Er bedeutet, dass für diesen Pfad und Objekttyp &#039;&#039;&#039;kein erwarteter Standardkontext gefunden wurde&#039;&#039;&#039; oder dass dieser Pfad &#039;&#039;&#039;kein Label über File Context erhalten soll&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Der Objekttyp kann mit dem Parameter -m (mode) erzwungen angegeben werden&lt;br /&gt;
* Das ist besonders wichtig für Pfade, die noch nicht existieren, oder wenn ein konkretes Szenario geprüft werden soll: „Was wäre, wenn dies ein Verzeichnis wäre?“ oder „Was wäre, wenn dies eine Datei wäre?“&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -m dir /etc/dir&lt;br /&gt;
 matchpathcon -m file /var/log/mylog.log&lt;br /&gt;
&lt;br /&gt;
Zuordnung der Objekttypen in file_contexts und der ausgeschriebenen Werte für den Parameter -m&lt;br /&gt;
{| class=&amp;quot;wikitable big options&amp;quot;&lt;br /&gt;
!matchpathcon -m&lt;br /&gt;
!file_contexts&lt;br /&gt;
|-&lt;br /&gt;
|file&lt;br /&gt;
|--&lt;br /&gt;
|-&lt;br /&gt;
|dir&lt;br /&gt;
|-d&lt;br /&gt;
|-&lt;br /&gt;
|lnk_file&lt;br /&gt;
|-l&lt;br /&gt;
|-&lt;br /&gt;
|sock_file&lt;br /&gt;
|-s&lt;br /&gt;
|-&lt;br /&gt;
|pipe&lt;br /&gt;
|-p&lt;br /&gt;
|-&lt;br /&gt;
|chr_file&lt;br /&gt;
|-c&lt;br /&gt;
|-&lt;br /&gt;
|blk_file&lt;br /&gt;
|-b&lt;br /&gt;
|}&lt;br /&gt;
Am häufigsten werden die Typen file, dir, lnk_file verwendet&lt;br /&gt;
&lt;br /&gt;
Für Skripte und Automatisierung ist der Parameter -n (no path) praktisch&lt;br /&gt;
 matchpathcon -n /etc/hosts&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe enthält dann nicht den Pfad, sondern nur das Ergebnis der Prüfung des erwarteten File Context&lt;br /&gt;
* Schließlich kann statt der aktuellen auch eine alternative Datei file_contexts verwendet werden&lt;br /&gt;
* Das kann für Testzwecke nützlich sein; dafür dient der Parameter -f (file contexts)&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -f /tmp/test_file_contexts /srv/myapp&lt;br /&gt;
&lt;br /&gt;
Außerdem kann mit dem Parameter -P (Policy) ein alternativer Pfad für einen vollständigen Policy-Satz verwendet werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von Kontexten mit semanage ==&lt;br /&gt;
Nun ist es endlich an der Zeit, die Verwaltung der File-Context-Datenbank zu betrachten&lt;br /&gt;
&lt;br /&gt;
Wie bereits zuvor besprochen, überschreibt chcon direkt die erweiterten Attribute (xattr) auf dem Datenträger, teilt der SELinux-Policy-Datenbank (file_contexts) jedoch absolut nichts darüber mit&lt;br /&gt;
&lt;br /&gt;
Änderungen, die mit chcon vorgenommen werden, sind im Maßstab des Systemlebenszyklus nur temporär&lt;br /&gt;
&lt;br /&gt;
Sie werden bei jedem der folgenden Ereignisse unwiderruflich zerstört (durch Referenzwerte aus der Datenbank überschrieben)&lt;br /&gt;
* der Administrator startet das Dienstprogramm restorecon manuell für dieses Verzeichnis;&lt;br /&gt;
* es erfolgt ein Systemupdate eines Pakets (zum Beispiel des Webservers), dessen Installer eine Prüfung der Kontexte auslöst;&lt;br /&gt;
* beim Booten wird ein vollständiges Relabeling des Dateisystems initiiert (durch Erzeugen der Datei /.autorelabel)&lt;br /&gt;
&lt;br /&gt;
=== semanage fcontext ===&lt;br /&gt;
Damit ein Kontext alle Updates und Relabeling-Vorgänge übersteht, muss man dem SELinux-System selbst beibringen, dass ein nicht standardmäßiger Pfad nun ein bestimmtes Label haben soll&lt;br /&gt;
&lt;br /&gt;
Dafür wird das Werkzeug semanage (SELinux Policy Management Tool) verwendet&lt;br /&gt;
* Es ist das allgemeine Werkzeug zur lokalen Verwaltung von Elementen der SELinux-Policy, darunter: login mappings, SELinux users, ports, interfaces, modules, booleans, permissive types und file contexts&lt;br /&gt;
* Für den aktuellen Schritt ist insbesondere der Bereich fcontext relevant&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Zur Demonstration versuchen wir, ein nicht standardmäßiges Verzeichnis mit hochsensiblen Daten zu schützen&lt;br /&gt;
&lt;br /&gt;
Stellen wir uns folgende Situation vor: Entwickler haben ein internes Authentifizierungssystem ausgerollt, das Sicherungskopien der Passwort-Hashes von Benutzern in einem nicht standardmäßigen Verzeichnis speichert — /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /opt/app_auth/vault&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir uns an die Analyse der Datei file_contexts aus den vorherigen Schritten erinnern, erhalten das Verzeichnis /opt/ und sein gesamter Inhalt standardmäßig den Kontext usr_t&lt;br /&gt;
&lt;br /&gt;
; Das ist ein öffentlicher Kontext&lt;br /&gt;
* &#039;&#039;&#039;Die meisten laufenden Dienste und Benutzer dürfen Dateien mit diesem Label lesen.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Passwörter dort zu speichern ist unzulässig.&#039;&#039;&#039;&lt;br /&gt;
* Daher muss für dieses Verzeichnis eine grundlegende Regel erstellt werden&lt;br /&gt;
&lt;br /&gt;
Verwenden wir dazu die Parameter -a (add) und -t (Feld type)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -a -t shadow_t &amp;quot;/opt/app_auth/vault(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/opt/app_auth/vault(/.*)?&amp;quot; — ein regulärer Ausdruck, der das Verzeichnis selbst und absolut alle darin enthaltenen Dateien umfasst&lt;br /&gt;
&lt;br /&gt;
Nun prüfen wir den Kontext des Verzeichnisses&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
...und sehen, dass sich nichts geändert hat&lt;br /&gt;
* Das liegt daran, dass wir zwar einen Eintrag in die Datenbank hinzugefügt haben, das bloße Hinzufügen eines Eintrags jedoch kein Relabeling auslöst&lt;br /&gt;
* Um die Änderungen anzuwenden, wird das uns bereits bekannte Werkzeug restorecon verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /opt/app_auth/vault/&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
# ls -Zd /opt/app_auth/vault/&lt;br /&gt;
unconfined_u:object_r:shadow_t:s0 /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen wir, ob der Eintrag in der File-Context-Datenbank vorhanden ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
cat /etc/selinux/default/contexts/files/file_contexts.local&lt;br /&gt;
&lt;br /&gt;
# This file is auto-generated by libsemanage&lt;br /&gt;
# Do not edit directly&lt;br /&gt;
&lt;br /&gt;
/opt/app_auth/vault(/.*)?    system_u:object_r:shadow_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Jetzt sind die vertraulichen Daten zuverlässig geschützt!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Optionen ====&lt;br /&gt;
Das Werkzeug semanage verfügt über verschiedene nützliche Optionen; konzentrieren wir uns auf die wichtigsten&lt;br /&gt;
&lt;br /&gt;
Welche nicht standardmäßigen Regeln manuell hinzugefügt wurden, kann mit der Option -l (list) zusammen mit dem Modifikator -C (Custom) angezeigt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -lC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Kontexttyp für den bereits in der lokalen Datenbank registrierten Pfad /srv/myweb(/.*)? kann man mit der Option -m (modify) aktualisieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -m -t httpd_sys_rw_content_t &amp;quot;/srv/myweb(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass der reguläre Ausdruck genau mit dem Eintrag in der Datenbank übereinstimmt, dessen Kontext wir ändern wollen&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst außer Betrieb genommen wurde und das nicht standardmäßige Verzeichnis nicht mehr benötigt wird, kann die Regel mit der Option -d gelöscht werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -d &amp;quot;/opt/app_auth/vault(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Äquivalente Pfade (Equivalence Rules) ===&lt;br /&gt;
Bei der Arbeit mit mehreren Verzeichnissen entsteht häufig die Situation, dass&lt;br /&gt;
* bereits eine korrekt gekennzeichnete Struktur existiert&lt;br /&gt;
* eine Kopie dieser Struktur an einem anderen Ort erstellt werden muss&lt;br /&gt;
&lt;br /&gt;
==== Beispielaufgabe ====&lt;br /&gt;
Es gibt den Standardpfad des Webservers /var/www, wir haben jedoch beschlossen, die Dateien unserer neuen Website in einem nicht standardmäßigen Verzeichnis abzulegen, zum Beispiel auf einer separaten Festplatte, die unter /srv/myweb eingehängt ist&lt;br /&gt;
&lt;br /&gt;
Wir erstellen zur Veranschaulichung mehrere Ordner im ursprünglichen Verzeichnis /var/www und bereiten das neue Verzeichnis /srv/myweb vor&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /var/www/sessions &amp;amp;&amp;amp; mkdir -p /var/www/cgi-bin&lt;br /&gt;
restorecon -v -R /var/www&lt;br /&gt;
ls -Z1 /var/www&lt;br /&gt;
mkdir -p /srv/myweb&lt;br /&gt;
cp -r /var/www/* /srv/myweb/&lt;br /&gt;
ls -Z1 /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig sind für das Verzeichnis /var/www und alle seine Unterverzeichnisse (html, cgi-bin usw.) im System bereits Dutzende komplexer regulärer Ausdrücke definiert, die die korrekten Kontexte zuweisen (zum Beispiel httpd_cache_t für /var/www/uploads(/.*)?)&lt;br /&gt;
* Alle regulären Ausdrücke aus /var/www manuell für das neue Verzeichnis /srv/myweb umzuschreiben, wäre aufwendig, unhandlich und fehleranfällig&lt;br /&gt;
&lt;br /&gt;
Für die Lösung solcher Aufgaben werden Äquivalenzregeln verwendet (Parameter -e des Befehls semanage fcontext)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -a -e /var/www /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Änderungen anwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v -R /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sehen wir uns an, wie das in der Datenbank aussieht&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
# semanage fcontext -lC&lt;br /&gt;
SELinux fcontext                                   type               Context&lt;br /&gt;
/opt/app_auth/vault(/.*)?                          all files          system_u:object_r:shadow_t:s0&lt;br /&gt;
&lt;br /&gt;
SELinux Local fcontext Equivalence&lt;br /&gt;
/srv/myweb = /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Äquivalenzregel funktioniert wie ein transparenter Alias: Wenn SELinux irgendeine Datei innerhalb von /srv/myweb/ prüft, ersetzt es in deren Pfad virtuell /srv/myweb durch /var/www und sucht erst danach Übereinstimmungen in seiner umfangreichen Datenbank regulärer Ausdrücke&lt;br /&gt;
&lt;br /&gt;
Wenn es erforderlich ist, die Äquivalenzregel zu entfernen, geschieht dies mit dem bereits bekannten Parameter -d; man muss ihn lediglich anstelle des Parameters -a aus dem ursprünglichen Befehl verwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -d -e /var/www /srv/myweb&lt;br /&gt;
semanage fcontext -lC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Export und Import lokaler Policies ===&lt;br /&gt;
Das Dienstprogramm semanage kann Policies mit den Befehlen semanage export und semanage import in eine Datei exportieren beziehungsweise aus einer Datei importieren&lt;br /&gt;
* In der Praxis wird das zum Beispiel verwendet, wenn ein Administrator plant, Policies von einem Testserver auf die Produktionsumgebung zu übertragen&lt;br /&gt;
&lt;br /&gt;
==== Export ====&lt;br /&gt;
Verwendungsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage export -f /tmp/selinux_local_rules.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen wir, was sich darin befindet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
cat /tmp/selinux_local_rules.txt&lt;br /&gt;
boolean -D&lt;br /&gt;
login -D&lt;br /&gt;
interface -D&lt;br /&gt;
...&lt;br /&gt;
fcontext -a -f a -t shadow_t -r &#039;s0&#039; &#039;/opt/app_auth/vault(/.*)?&#039;&lt;br /&gt;
module -d acpi&lt;br /&gt;
module -d aisexec&lt;br /&gt;
module -d amtu&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man sehen kann, ist die Datei logisch in drei Teile gegliedert&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bereinigungsblock&#039;&#039;&#039; (Einträge mit dem Schlüssel -D) – beim Import der Datei auf einem neuen Server (über semanage import) soll das Policy-System zu einer &#039;&#039;exakten Kopie&#039;&#039; des Quellservers werden&lt;br /&gt;
* Daher müssen alle lokalen Einstellungen gelöscht werden&lt;br /&gt;
* Der Schlüssel -D wird als Delete interpretiert&lt;br /&gt;
* &#039;&#039;&#039;Lokale Regeln&#039;&#039;&#039; (im Beispiel die einzige Regel fcontext)&lt;br /&gt;
* &#039;&#039;&#039;Block deaktivierter Policy-Module&#039;&#039;&#039; (Einträge mit dem Schlüssel -d) – das Policy-Set default policy in Debian ist gehärtet (hardened) und deaktiviert ungenutzte Module&lt;br /&gt;
* In RHEL macht die Policy targeted genau das Gegenteil: Dort sind standardmäßig von Anfang an alle Module aktiviert, unabhängig davon, ob die entsprechende Software installiert ist oder nicht&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Für den Import wird der Befehl semanage import verwendet; seine Syntax sieht identisch zum Export aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage import -f /tmp/selinux_local_rules.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn uns die importierten Policies zusagen und alles Erforderliche mit matchpathcon -V geprüft wurde, wenden wir die Änderungen an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/Praxis]]&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/07_Kontexte&amp;diff=163420</id>
		<title>Linux/SELinux/04/07 Kontexte</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/07_Kontexte&amp;diff=163420"/>
		<updated>2026-03-29T15:34:53Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Sicherheitskontext&#039;&#039;&#039; - Struktur und Auslesen des Sicherheitskontexts&lt;br /&gt;
&lt;br /&gt;
= Debian =&lt;br /&gt;
== Kontext und Label ==&lt;br /&gt;
Im SELinux-System (Security-Enhanced Linux) wird der Zugriff auf Ressourcen nicht auf Grundlage der Eigentümerrechte gesteuert (wie im klassischen DAC-Modell), sondern auf Grundlage von &#039;&#039;&#039;Sicherheitskontexten&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
:* SELinux-Richtlinienregeln (MAC) werden erst &#039;&#039;&#039;nach&#039;&#039;&#039; den klassischen Linux-Zugriffsrechten (DAC — Eigentümer, Gruppe, rwx) überprüft.&lt;br /&gt;
:* Wenn bereits die DAC-Regeln den Zugriff verweigern, blockiert das System sofort. SELinux wird in diesem Fall gar nicht erst angewendet und erzeugt folglich auch keine AVC-Meldungen im Audit-Log.&lt;br /&gt;
&lt;br /&gt;
Ein Kontext ist ein spezielles Label, das jedem Systemobjekt zugewiesen wird (Dateien, Prozessen, Netzwerkports)&lt;br /&gt;
&lt;br /&gt;
Datei-Labels werden direkt im Dateisystem als &#039;&#039;&#039;erweiterte Dateiattribute (Extended Attributes oder xattr)&#039;&#039;&#039; gespeichert&lt;br /&gt;
* SELinux verwendet dabei das Attribut mit dem Namen security.selinux&lt;br /&gt;
&lt;br /&gt;
Auf das Vorhandensein erweiterter Attribute weist ein Punkt am Ende der Attributanzeige bei Verwendung von ls -l hin&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
sudo ls -l /var/log/apt/&lt;br /&gt;
total 388&lt;br /&gt;
-rw-r--r--. 1 root root 43628 Mar 21 12:52 eipp.log.xz&lt;br /&gt;
-rw-r--r--. 1 root root 54225 Mar 21 12:52 history.log&lt;br /&gt;
-rw-r-. 1 root adm 283440 Mar 21 12:52 term.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontextzeichenfolge ===&lt;br /&gt;
; Anatomie der Kontextzeichenfolge&lt;br /&gt;
Das vollständige Label eines Sicherheitskontexts besteht aus vier (manchmal fünf) durch Doppelpunkte getrennten Elementen&lt;br /&gt;
&lt;br /&gt;
; Typische Struktur&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line&amp;gt;&lt;br /&gt;
user : role : type : level&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Typen ==&lt;br /&gt;
; Bedeutung des Typs (Type) in der Targeted Policy&lt;br /&gt;
In den meisten modernen Distributionen (RHEL, CentOS, Fedora, Debian) wird standardmäßig die Policy &#039;&#039;&#039;Targeted&#039;&#039;&#039; verwendet&lt;br /&gt;
* In diesem Modell liegt der Schwerpunkt auf &#039;&#039;&#039;Type Enforcement (TE)&#039;&#039;&#039; — der erzwungenen Zuweisung von Typen&lt;br /&gt;
&#039;&#039;&#039;Zur Analyse von Sicherheitslabels (Kontexten) werden Standard-Linux-Werkzeuge mit der zusätzlichen Option&#039;&#039;&#039; -Z &#039;&#039;&#039;verwendet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Option -Z wird von fast allen grundlegenden Befehlen unterstützt&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cp -Z&#039;&#039; — kopiert eine Datei und weist ihr sofort den korrekten Kontext des Zielverzeichnisses zu (den Standardkontext des Verzeichnisses)&lt;br /&gt;
:* Im Gegensatz dazu bewahrt der Parameter -a den ursprünglichen Kontext der Datei&lt;br /&gt;
* &#039;&#039;mkdir -Z&#039;&#039; — erstellt ein Verzeichnis, das sofort den Standardkontext erhält (ohne dass restorecon ausgeführt werden muss)&lt;br /&gt;
* Außerdem die Anzeigeprogramme: &#039;&#039;ls -Z&#039;&#039; (Dateien), &#039;&#039;ps -Z&#039;&#039; (Prozesse), &#039;&#039;id -Z&#039;&#039; (Benutzer)&lt;br /&gt;
&lt;br /&gt;
=== Kontext von Dateien und Verzeichnissen ===&lt;br /&gt;
; Vererbung (Inheritance)&lt;br /&gt;
: Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse. Wenn Sie beispielsweise eine neue Datei im Verzeichnis &#039;&#039;/etc&#039;&#039; erstellen, das mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet ist, erhält die neue Datei automatisch denselben Typ.&lt;br /&gt;
&lt;br /&gt;
Zum Anzeigen des Kontexts von Dateien wird der Befehl ls -Z verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
ls -Z /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line copy&amp;gt;&lt;br /&gt;
system_u:object_r:var_log_t:s0 README&lt;br /&gt;
system_u:object_r:var_log_t:s0 alternatives.log&lt;br /&gt;
system_u:object_r:httpd_log_t:s0 apache2&lt;br /&gt;
system_u:object_r:apt_var_log_t:s0 apt&lt;br /&gt;
system_u:object_r:auditd_log_t:s0 audit&lt;br /&gt;
system_u:object_r:faillog_t:s0 btmp&lt;br /&gt;
system_u:object_r:var_log_t:s0 cloud-init-output.log&lt;br /&gt;
system_u:object_r:var_log_t:s0 cloud-init.log&lt;br /&gt;
system_u:object_r:var_log_t:s0 dpkg.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interpretation der Typen ===&lt;br /&gt;
Bei der Analyse von Kontexten sollte man auf die Suffixe der Typen achten, da diese häufig auf ihren Zweck hinweisen&lt;br /&gt;
{| class=&amp;quot;wikitable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Kontext !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| _t || Allgemeines Suffix für Typen (type)&lt;br /&gt;
|-&lt;br /&gt;
| _exec_t || Typ, der ausführbaren Dateien (Binärdateien) zugewiesen wird&lt;br /&gt;
|-&lt;br /&gt;
| _conf_t || Typ für Konfigurationsdateien&lt;br /&gt;
|-&lt;br /&gt;
| _log_t || Typ für Logdateien&lt;br /&gt;
|-&lt;br /&gt;
| _tmp_t || Typ für temporäre Dateien&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extended Attributes ==&lt;br /&gt;
; Speicherung auf dem Datenträger&lt;br /&gt;
SELinux-Sicherheitskontexte werden nicht in einer separaten Datenbank oder einem zentralen Journal gespeichert&lt;br /&gt;
* Sie sind ein integraler Bestandteil des Dateisystems und werden zusammen mit den Dateien verschoben, wenn diese kopiert oder verschoben werden (sofern die verwendeten Werkzeuge die Beibehaltung der Attribute unterstützen)&lt;br /&gt;
&lt;br /&gt;
; Begriff Extended Attributes (xattr)&lt;br /&gt;
&#039;&#039;&#039;Erweiterte Attribute (xattr)&#039;&#039;&#039; sind eine Funktion von Dateisystemen (wie Ext4, XFS, Btrfs), die es ermöglichen, einer Datei oder einem Verzeichnis zusätzliche Metadaten im Format „Schlüssel=Wert“ zuzuordnen&lt;br /&gt;
&lt;br /&gt;
Während Standardattribute (Zugriffsrechte, Eigentümer, Zeitstempel) eine feste Struktur haben, ermöglichen erweiterte Attribute die Speicherung beliebiger Daten&lt;br /&gt;
&lt;br /&gt;
Hier speichert SELinux die Kontextzeichenfolge unter dem Schlüssel security.selinux&lt;br /&gt;
&lt;br /&gt;
== Namensräume ==&lt;br /&gt;
; Namensräume (Namespaces)&lt;br /&gt;
Zur Vermeidung von Konflikten und zur Gewährleistung der Sicherheit sind erweiterte Attribute in Namensräume unterteilt&lt;br /&gt;
&lt;br /&gt;
Jeder Namensraum hat eigene Zugriffsregeln&lt;br /&gt;
{| class=&amp;quot;wikitable big options&amp;quot;&lt;br /&gt;
!Namensraum&lt;br /&gt;
!Zweck&lt;br /&gt;
!Zugriff&lt;br /&gt;
|-&lt;br /&gt;
|security&lt;br /&gt;
|Wird von Sicherheitsmodulen verwendet (SELinux, AppArmor, IMA)&lt;br /&gt;
|Der Zugriff ist auf den Kernel und Prozesse mit besonderen Privilegien beschränkt&lt;br /&gt;
|-&lt;br /&gt;
|system&lt;br /&gt;
|Wird vom Kernel zur Speicherung von Systemdaten verwendet, zum Beispiel von Access Control Lists (ACL)&lt;br /&gt;
|In der Regel nur für den Kernel zugänglich&lt;br /&gt;
|-&lt;br /&gt;
|user&lt;br /&gt;
|Ist für Benutzeranwendungen und Dokumente vorgesehen&lt;br /&gt;
|Wird durch die standardmäßigen Zugriffsrechte (DAC) geregelt&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|Zur Speicherung von Daten, auf die nur Prozesse mit dem Privileg CAP_SYS_ADMIN zugreifen dürfen&lt;br /&gt;
|Für normale Benutzer unsichtbar, selbst wenn sie Eigentümer der Datei sind&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
; Arbeit mit Attributen&lt;br /&gt;
getfattr und setfattr&lt;br /&gt;
&lt;br /&gt;
Obwohl für die Verwaltung von SELinux häufiger spezialisierte Befehle (chcon, semanage) verwendet werden, ermöglichen Low-Level-Werkzeuge aus dem Paket attr, zu sehen, wie diese Daten aus Sicht des Dateisystems aussehen&lt;br /&gt;
&lt;br /&gt;
=== Attribute anzeigen ===&lt;br /&gt;
; Attribute anzeigen (getfattr)&lt;br /&gt;
Zum Lesen eines Attributs einer bestimmten Datei wird der Befehl getfattr verwendet&lt;br /&gt;
* Um den SELinux-Kontext anzuzeigen, muss der vollständige Schlüsselname im Namensraum security angegeben werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
getfattr -n security.selinux /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um alle vorhandenen Attribute einer Datei anzuzeigen, wird ein Befehl der Form &#039;&#039;getfattr -m . -d /etc/passwd&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
=== Attribute setzen ===&lt;br /&gt;
; Attribute setzen (setfattr)&lt;br /&gt;
Der Befehl setfattr ermöglicht es, den Kontextwert manuell zu ändern&lt;br /&gt;
* Diese Aktion erfordert Superuser-Rechte und wird in der Regel nur zu Debugging-Zwecken oder für ein tieferes Systemverständnis ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
touch testfile&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;unconfined_u:object_r:user_home_t:s0&amp;quot; testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von setfattr prüft das System die Korrektheit des eingegebenen Kontexts nicht so streng, wie es die SELinux-Werkzeuge tun&lt;br /&gt;
* Ein Fehler in der Zeichenfolge kann dazu führen, dass die Datei für Zielprozesse unzugänglich wird.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Modus prüfen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
getenforce&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der Befehl&#039;&#039; Enforcing &#039;&#039;zurückgibt, schalten Sie ihn vorübergehend mit dem Befehl&#039;&#039; setenforce 0 &#039;&#039;auf&#039;&#039; Permissive &#039;&#039;um.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Blockierende Situation ===&lt;br /&gt;
; Erzeugen einer blockierenden Situation&lt;br /&gt;
Sie haben eine Datei erstellt, ihr jedoch versehentlich (oder absichtlich) einen Kontext zugewiesen, der weder für einen normalen Benutzer noch für das aktuelle Verzeichnis vorgesehen ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
touch /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ls -Z /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:object_r:user_tmp_t:s0 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie an der Konsolenausgabe zu sehen ist, hat die Datei den Typ &#039;&#039;&#039;user_tmp_t&#039;&#039;&#039;, der typisch für Dateien im Verzeichnis /tmp ist&lt;br /&gt;
* Viele Programme haben Leserechte auf dieses Verzeichnis&lt;br /&gt;
* Weisen wir der Datei nun den &#039;&#039;&#039;Typ shadow_t&#039;&#039;&#039; zu&lt;br /&gt;
&lt;br /&gt;
Unter normalen Umständen haben nur Passwortdateien diesen Typ, und normalen Prozessen sowie Benutzern ist die Interaktion mit solchen Dateien untersagt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:shadow_t:s0&amp;quot; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen von Attributen kann auch das Werkzeug chcon verwendet werden; in diesem Fall sieht der Befehl wie folgt aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
chcon -t shadow_t /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das Werkzeug chcon sprechen wir etwas später noch genauer besprochen&lt;br /&gt;
&lt;br /&gt;
Prüfung, ob die Attribute korrekt gesetzt wurden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
sudo ls -Z /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:object_r:shadow_t:s0 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schließlich muss nun ein Verstoß provoziert werden; dazu versuchen wir, die Datei zu lesen oder zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; &amp;gt; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun betrachten wir die AVC-Ereignisse mit dem Werkzeug ausearch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und wir werden nichts sehen, denn standardmäßig gelangt ein Benutzer, der sich per SSH oder über die Konsole anmeldet, in den Standardrichtlinien (Targeted Policy) in die Domäne &#039;&#039;&#039;unconfined_t&#039;&#039;&#039; (uneingeschränkt)&lt;br /&gt;
&lt;br /&gt;
Das kann mit dem Befehl id -Z geprüft werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
sudo id -Z&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prozessen in der Domäne unconfined ist praktisch alles erlaubt&lt;br /&gt;
&lt;br /&gt;
SELinux sieht, dass ein „uneingeschränkter“ Prozess eine Datei liest, und auch wenn die Datei einen ungewöhnlichen Typ hat (wie &#039;&#039;&#039;shadow_t&#039;&#039;&#039;), betrachtet es dies für diesen konkreten Prozess nicht als Richtlinienverstoß&lt;br /&gt;
&lt;br /&gt;
Um die Funktionsweise von SELinux zu prüfen, muss das Lesen der Datei mit dem Kontext eines anderen Prozesses gestartet werden, zum Beispiel &#039;&#039;&#039; httpd_t&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da der Typ &#039;&#039;&#039;httpd_t&#039;&#039;&#039; keinen Zugriff auf ausführbare Dateien des Typs &#039;&#039;&#039;bin_t&#039;&#039;&#039; hat (dieser Typ ist für cat gesetzt), erstellen wir eine Kopie von cat und weisen ihr den Typ &#039;&#039;&#039;httpd_t&#039;&#039;&#039; zu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
cp /usr/bin/cat /tmp/fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:httpd_t:s0&amp;quot; /tmp/fake_httpd sudo oder chcon -t httpd_t /tmp/fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy&amp;gt;&lt;br /&gt;
systemd-run -p SELinuxContext=system_u:system_r:httpd_t:s0 /tmp/fake_httpd /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In SELinuxContext wird der Kontext für den Start angegeben&lt;br /&gt;
* Anschließend wird cat mit dem Sicherheitstyp httpd_t gestartet und versucht, /tmp/testfile zu lesen&lt;br /&gt;
&lt;br /&gt;
Wir betrachten die AVC-Einträge&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent -c fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1774103099.579:33834): avc: denied { getattr } for pid=38589 comm=&amp;quot;fake_httpd&amp;quot; path=&amp;quot;/tmp/testfile&amp;quot; dev=&amp;quot;tmpfs&amp;quot; ino=117 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:shadow_t:s0 tclass=file permissive=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* { getattr } zeigt, welche konkrete Aktion das Subjekt auszuführen versucht hat&lt;br /&gt;
* tcontext zeigt den Kontext des Objekts, auf das ein unbefugter Zugriff versucht wurde&lt;br /&gt;
* scontext zeigt den Kontext des Subjekts, das versucht hat, auf das Objekt mit tcontext zuzugreifen&lt;br /&gt;
* path zeigt den Pfad zur Datei&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie im Log zu sehen ist, wurde der Zugriff für fake_httpd bereits beim Lesen der Dateiattribute verweigert!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist zu erkennen, dass es für SELinux keine Rolle spielt, unter welchem Benutzer der Prozess gestartet wurde, der gegen die Regeln verstoßen wollte&lt;br /&gt;
* Auch Zugriffsrechte wie chmod 777 beeinflussen das Ergebnis nicht&lt;br /&gt;
&lt;br /&gt;
Versuchen wir dasselbe mit dem Typ &#039;&#039;&#039;user_home_t&#039;&#039;&#039;&lt;br /&gt;
* Dieser Typ wird für Dateien im Home-Verzeichnis eines Benutzers verwendet&lt;br /&gt;
* Der Prozess httpd darf keine Leserechte auf Dateien im Home-Verzeichnis eines Benutzers haben&lt;br /&gt;
&lt;br /&gt;
Zur Veranschaulichung geben wir der Datei zusätzlich Vollzugriff für alle&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:user_home_t:s0&amp;quot; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
chmod 777 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
systemd-run -p SELinuxContext=system_u:system_r:httpd_t:s0 /tmp/fake_httpd /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent -c fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und erneut erscheint im Log eine Meldung über einen Verstoß&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1774103685.752:33957): avc: denied { getattr } for pid=38729 comm=&amp;quot;fake_httpd&amp;quot; path=&amp;quot;/tmp/testfile&amp;quot; dev=&amp;quot;tmpfs&amp;quot; ino=117 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_t:s0 tclass=file permissive=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Wenn dieselbe verbotene Aktion mehrmals hintereinander ausgeführt wird, erscheint sie nicht jedes Mal im Log, um Spam zu vermeiden&lt;br /&gt;
&lt;br /&gt;
Um den SELinux-Cache zu leeren, kann ein Neustart des Betriebsmodus verwendet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
 setenforce 1 &amp;amp;&amp;amp; setenforce 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change context (chcon) ===&lt;br /&gt;
SELinux-Kontext einer Datei oder eines Verzeichnisses ändern&lt;br /&gt;
&lt;br /&gt;
; Funktionen&lt;br /&gt;
* vollständigen Kontext auf einmal setzen&lt;br /&gt;
* einzelne Kontextfelder (etwa den Typ) ändern&lt;br /&gt;
* Kontext einer anderen Datei übernehmen (--reference)&lt;br /&gt;
&lt;br /&gt;
Zuvor wurden setfattr und chcon verwendet&lt;br /&gt;
* Wie man sehen kann, ist chcon komfortabler, da sich damit einzelne Felder gezielt ändern lassen&lt;br /&gt;
* Außerdem wird chcon als primäres Werkzeug für die Arbeit mit SELinux-Kontexten empfohlen, während setfattr ein Low-Level-Werkzeug ist, das mit Nicht-SELinux-xattr arbeitet&lt;br /&gt;
&lt;br /&gt;
Die wichtigste Einschränkung von chcon (genauso wie von setfattr) besteht darin, dass die Änderungen &#039;&#039;&#039;nicht dauerhaft&#039;&#039;&#039; sind&lt;br /&gt;
* Sie können nach restorecon oder nach einem vollständigen Relabeling des Dateisystems verloren gehen&lt;br /&gt;
&lt;br /&gt;
Daher wird dieses Werkzeug hauptsächlich verwendet für&lt;br /&gt;
* Laborübungen&lt;br /&gt;
* schnelle Diagnose&lt;br /&gt;
* temporäre Überprüfung von Richtlinien&lt;br /&gt;
&lt;br /&gt;
Die dauerhafte Konfiguration von Labels erfolgt mit dem Werkzeug semanage und einem anschließenden Aufruf von restorecon&lt;br /&gt;
* Näheres zum Werkzeug semanage folgt in den nächsten Lektionen&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Zur Demonstration erstellen wir die erforderlichen Dateien und Verzeichnisse und prüfen den Kontext des Verzeichnisses sowie der Dateien&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /tmp/web_content/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
cd /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch test.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch images/image.png&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Zd /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1 /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diesem Verzeichnis wurde der Typ &#039;&#039;&#039;user_tmp_t&#039;&#039;&#039; vererbt, ebenso den darin enthaltenen Dateien&lt;br /&gt;
&lt;br /&gt;
Versuchen wir, den vollständigen Kontext manuell zu setzen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon system_u:object_r:httpd_sys_content_t:s0 manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird nur selten verwendet, da für SELinux in der Regel das Feld type am wichtigsten ist&lt;br /&gt;
&lt;br /&gt;
Um das Feld type zu ändern, wird der Parameter -t verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t shadow_t manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Ändern der Felder user und role werden entsprechend die Optionen &#039;&#039;&#039;-u&#039;&#039;&#039; und &#039;&#039;&#039;-r&#039;&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
Der Parameter -R erlaubt die rekursive Verarbeitung von Verzeichnissen&lt;br /&gt;
&lt;br /&gt;
Weisen wir dem gesamten Verzeichnis web_content den Typ httpd_sys_content_t zu und verwenden dabei den Parameter &#039;&#039;&#039;-v&#039;&#039;&#039;, um Details anzuzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -v -t httpd_sys_content_t /tmp/web_content&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kontext von einem bereits korrekt gelabelten Objekt zu kopieren, kann die Option &#039;&#039;&#039;--reference=RFILE&#039;&#039;&#039; verwendet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /tmp/ref&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R --reference=/tmp/ref /tmp/web_content&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Parameter für den Umgang mit Symlinks&lt;br /&gt;
{| class=&amp;quot;wikitable sortable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! GNU  !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || --dereference || (standardmäßig verwendet) wirkt nicht auf den symbolischen Link selbst, sondern auf das Objekt, auf das er verweist&lt;br /&gt;
|-&lt;br /&gt;
| -h || --no-dereference || ändert den symbolischen Link selbst und nicht das Zielobjekt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Woher kommt der „richtige“ Kontext (File Contexts) ==&lt;br /&gt;
In der ersten Phase wurden die tatsächlichen Dateilabels betrachtet: was in security.selinux gespeichert ist, wie dies in ls -Z aussieht und warum sich cp und mv unterschiedlich verhalten&lt;br /&gt;
&lt;br /&gt;
In dieser Lektion kommt die nächste Modellebene hinzu: &#039;&#039;&#039;SELinux speichert nicht nur das aktuelle Label eines Objekts, sondern auch die Vorstellung davon, welcher Kontext einem Pfad gemäß den Regeln der Policy zugewiesen sein soll&#039;&#039;&#039;&lt;br /&gt;
Für das Verständnis der Logik der SELinux-Labeling-Regeln müssen zwei Begriffe strikt voneinander getrennt werden&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Tatsächliches Label (Security Context).&#039;&#039;&#039; Das sind die Daten, die physisch in den erweiterten Attributen des Dateisystems (extended attributes — xattr) auf dem Datenträger gespeichert sind&lt;br /&gt;
#* Genau dieses Label sehen der Linux-Kernel und das SELinux-Modul beim Zugriff auf eine Datei und verwenden es für die Zugriffsentscheidung&lt;br /&gt;
# &#039;&#039;&#039;Erwarteter Kontext (File Context).&#039;&#039;&#039; Das ist eine Regel, die in der &#039;&#039;&#039;SELinux-Policy-Datenbank&#039;&#039;&#039; definiert ist&lt;br /&gt;
#* Sie legt fest, welches Label einer Datei oder einem Verzeichnis an einem bestimmten Pfad &#039;&#039;zugewiesen werden soll&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wo SELinux Informationen über erwartete Kontexte speichert ===&lt;br /&gt;
In der Default-Policy befinden sich die Änderungen im Zusammenhang mit File Contexts im Verzeichnis&lt;br /&gt;
 /etc/selinux/default/contexts/files/&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Policy kann mit dem Befehl sestatus angezeigt werden&lt;br /&gt;
&lt;br /&gt;
 # sestatus&lt;br /&gt;
 ..&lt;br /&gt;
 SELinux root directory:         /etc/selinux&lt;br /&gt;
 Loaded policy name:             default&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
==== Struktur der File-Context-Dateien ====&lt;br /&gt;
* file_contexts — Basistabelle der File Contexts der aktiven Policy&lt;br /&gt;
* file_contexts.local — lokale administrative Ergänzungen&lt;br /&gt;
* file_contexts.homedirs — separate Einstellungen für Home-Verzeichnisse&lt;br /&gt;
* .subs und .subs_dist — Dateien für Pfadsubstitutionen&lt;br /&gt;
&lt;br /&gt;
Um zu verstehen, wie das System Pfade und Labels einander zuordnet, öffnen wir die Datei /etc/selinux/default/contexts/file/file_contexts&lt;br /&gt;
 head /etc/selinux/default/contexts/files/file_contexts&lt;br /&gt;
&lt;br /&gt;
; Ausgabe&lt;br /&gt;
 /.*                               system_u:object_r:default_t:s0&lt;br /&gt;
 /a?quota\.(user|group)    --      system_u:object_r:quota_db_t:s0&lt;br /&gt;
 /sys(/.*)?                        system_u:object_r:sysfs_t:s0&lt;br /&gt;
 /xen(/.*)?                        system_u:object_r:xen_image_t:s0&lt;br /&gt;
 /mnt(/[^/]*)   			      -l      system_u:object_r:mnt_t:s0&lt;br /&gt;
 /mnt(/[^/]*)?   		        -d      system_u:object_r:mnt_t:s0&lt;br /&gt;
 /dev/.*                           system_u:object_r:device_t:s0&lt;br /&gt;
 /etc/.*                           system_u:object_r:etc_t:s0&lt;br /&gt;
 /opt/.*                           system_u:object_r:usr_t:s0&lt;br /&gt;
 /run/.* 						                &amp;lt;&amp;lt;none&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede Zeile in dieser Datei stellt eine feste Anweisung für SELinux dar und besteht aus zwei oder drei Spalten&lt;br /&gt;
# &#039;&#039;&#039;Regulärer Ausdruck (Regular Expression).&#039;&#039;&#039; Die erste Spalte beschreibt den Pfad&lt;br /&gt;
#* SELinux verwendet reguläre Ausdrücke im PCRE*-Format (Perl-compatible regular expression)&lt;br /&gt;
#* Beispielsweise bedeutet der Ausdruck /var/www(/.*)?: sowohl das Verzeichnis /var/www selbst als auch absolut jede Datei oder jedes Unterverzeichnis darin&lt;br /&gt;
#* Wichtig zur PCRE-Verarbeitung:&lt;br /&gt;
#*:* Das einzige verwendete Flag ist &#039;&#039;&#039;PCRE2_DOTALL&#039;&#039;&#039;. Dadurch stimmt der Platzhalter &#039;&#039;.&#039;&#039; (Punkt) mit jedem beliebigen Zeichen überein, &#039;&#039;&#039;einschließlich Zeilenumbrüchen&#039;&#039;&#039;&lt;br /&gt;
#*:* Zeichenfolgen, die Pfade darstellen, werden strikt als Bytes verarbeitet. Das bedeutet, dass Nicht-ASCII-Zeichen (wie z.B. deutsche Umlaute) unter Umständen nicht durch einen einzelnen Platzhalter abgeglichen werden können&lt;br /&gt;
# &#039;&#039;&#039;Objekttyp (optional).&#039;&#039;&#039; Die zweite Spalte kann präzisieren, für welchen Typ von Dateisystemobjekten die Regel gilt&lt;br /&gt;
#* -d — nur auf Verzeichnisse anwenden&lt;br /&gt;
#* -- — nur auf reguläre Dateien anwenden&lt;br /&gt;
#* &#039;&#039;Falls die Spalte fehlt, gilt die Regel für alle Objekte am angegebenen Pfad.&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Erwarteter Kontext (Security Context).&#039;&#039;&#039; Die letzte Spalte enthält das Referenzlabel, das dem Objekt zugewiesen werden soll&lt;br /&gt;
#* Das wichtigste Element hierbei ist &#039;&#039;&#039;Type&#039;&#039;&#039; (zum Beispiel httpd_sys_content_t), der die Zugriffsdomänen bestimmt&lt;br /&gt;
&lt;br /&gt;
(* PCRE - Perl-compatible regular expression)&lt;br /&gt;
&lt;br /&gt;
Bei der Initialisierung des Dateisystems oder beim erzwungenen Zurücksetzen der Labels (Relabeling) liest der Kernel diese Datei Zeile für Zeile von oben nach unten&lt;br /&gt;
* Wenn das Dienstprogramm eine Übereinstimmung zwischen dem Dateipfad und dem regulären Ausdruck findet, weist es dem Objekt den entsprechenden Kontext aus der dritten Spalte zu&lt;br /&gt;
&lt;br /&gt;
== Struktur von File-Context-Regeln und ihre Prioritäten ==&lt;br /&gt;
Im vorherigen Schritt wurde die Quelle der Dateikontexte analysiert — die Datenbank file_contexts&lt;br /&gt;
* In dieser Lektion gehen wir tiefer in die Funktionsweise dieser Datenbank: wie das System die Zuordnungstabelle path -&amp;gt; label genau liest und wie es entscheidet, welcher Kontext zugewiesen wird, wenn mehrere Regeln auf denselben Pfad passen&lt;br /&gt;
&lt;br /&gt;
=== Format einer File-Context-Regel ===&lt;br /&gt;
Jeder Eintrag in file_contexts, file_contexts.local und file_contexts.homedirs hat dieselbe Grundform&lt;br /&gt;
 pathname [file_type] context&lt;br /&gt;
&lt;br /&gt;
* pathname — vollständiger Pfad oder regulärer PCRE-Ausdruck, anhand dessen SELinux nach Übereinstimmungen sucht&lt;br /&gt;
* file_type — optionale Einschränkung auf einen Objekttyp&lt;br /&gt;
* context — der Kontext, der dem Objekt zugewiesen werden soll&lt;br /&gt;
&lt;br /&gt;
==== pathname ====&lt;br /&gt;
Betrachten wir ein Beispiel für eine Regel&lt;br /&gt;
 /var/www(/.*)?    system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&lt;br /&gt;
* Die Regel deckt den gesamten Teilbaum /var/www ab, also das Verzeichnis selbst und alle darin enthaltenen Objekte&lt;br /&gt;
&lt;br /&gt;
==== file_type ====&lt;br /&gt;
Die optionale zweite Spalte schränkt die Regel auf einen bestimmten Objekttyp ein&lt;br /&gt;
&lt;br /&gt;
In File Contexts werden folgende Bezeichnungen verwendet&lt;br /&gt;
{| class=&amp;quot;wikitable options big col1center&amp;quot;&lt;br /&gt;
! Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| d&lt;br /&gt;
|Verzeichnis&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|reguläre Datei&lt;br /&gt;
|-&lt;br /&gt;
| l&lt;br /&gt;
|symbolischer Link&lt;br /&gt;
|-&lt;br /&gt;
| s&lt;br /&gt;
|Socket&lt;br /&gt;
|-&lt;br /&gt;
| p&lt;br /&gt;
|Named Pipe&lt;br /&gt;
|-&lt;br /&gt;
| c&lt;br /&gt;
|Zeichengerätedatei&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
|Blockgerätedatei&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== context ====&lt;br /&gt;
Die letzte Spalte enthält genau den &#039;&#039;&#039;erwarteten Security Context&#039;&#039;&#039;, der für einen übereinstimmenden Pfad zurückgegeben werden soll&lt;br /&gt;
* Im Normalfall ist das ein vollständiges Label im Format user:role:type:range&lt;br /&gt;
&lt;br /&gt;
Zulässig ist auch der spezielle Wert &amp;lt;&amp;lt;none&amp;gt;&amp;gt;&lt;br /&gt;
* Er bedeutet, dass beim Relabeling für den übereinstimmenden Pfad kein Kontext gesetzt werden soll und dass ein Lookup kein Ergebnis zurückliefert&lt;br /&gt;
&lt;br /&gt;
=== Prioritäten der Regeln ===&lt;br /&gt;
&lt;br /&gt;
==== Basis- und modulare Policy-Definitionen ====&lt;br /&gt;
Um Konflikte zu vermeiden, verwendet der SELinux-Parser ein striktes Prioritätssystem&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Eine exakte Übereinstimmung hat die höchste Priorität.&#039;&#039;&#039; Eine Regel, die einen Pfad ohne Platzhalter regulärer Ausdrücke beschreibt (zum Beispiel genau /etc/passwd), gewinnt immer gegenüber allgemeineren Ausdrücken&lt;br /&gt;
# &#039;&#039;&#039;Die maximale Länge der Übereinstimmung bestimmt die Spezifität.&#039;&#039;&#039; Falls es keine exakte Übereinstimmung gibt, gewinnt die spezifischste Regel — also diejenige, bei der der übereinstimmende Teil des Pfads länger ist&lt;br /&gt;
#* Eine Regel für /var/www/html(/.*)? sticht eine allgemeinere Regel für /var/www(/.*)?&lt;br /&gt;
# &#039;&#039;&#039;Eine explizite Angabe der Objektklasse erhöht die Priorität.&#039;&#039;&#039; Bei gleicher Länge der Übereinstimmung hat eine Regel mit explizit angegebenem Klassifizierer (zum Beispiel -d für Verzeichnisse oder -- für reguläre Dateien) Vorrang vor einer Regel ohne Klassenangabe&lt;br /&gt;
&lt;br /&gt;
Dank dieser Hierarchie werden Basislabels auf der Ebene der Wurzel des Dateisystems gesetzt und dann beim tieferen Abstieg im Verzeichnisbaum weiter verfeinert und überschrieben&lt;br /&gt;
&lt;br /&gt;
==== Lokale Regeln in file_contexts.local ====&lt;br /&gt;
Für lokale SELinux-Regeln gilt eine andere Prioritätslogik als für Basis- und modulare Policy-Definitionen&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Lokale Regeln haben Vorrang vor der Policy.&#039;&#039;&#039; Jeder Eintrag aus file_contexts.local, der zum Beispiel über semanage fcontext hinzugefügt wurde, wird vor den entsprechenden Definitionen aus der Basis-Policy oder aus Modulen berücksichtigt&lt;br /&gt;
# &#039;&#039;&#039;Die Priorisierung erfolgt von neuen zu alten Einträgen.&#039;&#039;&#039; Lokale Regeln werden nicht nach dem Prinzip „am spezifischsten“ verarbeitet, sondern in umgekehrter Reihenfolge ihrer Hinzufügung: vom zuletzt hinzugefügten Eintrag bis zum frühesten&lt;br /&gt;
# &#039;&#039;&#039;Es wird die erste Übereinstimmung verwendet.&#039;&#039;&#039; Sobald eine passende lokale Regel gefunden wurde, wird die weitere Suche beendet&lt;br /&gt;
#* Das bedeutet, dass ein allgemeinerer, aber später hinzugefügter Ausdruck einen genaueren, aber früher erstellten Ausdruck überdecken kann&lt;br /&gt;
&lt;br /&gt;
Daher erfordern lokale Regeln besondere Sorgfalt: Ein zu weit gefasster Ausdruck, der über semanage fcontext hinzugefügt wurde, kann unerwartet genauere Basisdefinitionen der Policy überdecken&lt;br /&gt;
&lt;br /&gt;
Genau aus diesem Grund sollten lokale reguläre Ausdrücke möglichst eng gefasst und zielgerichtet sein, sodass sie nur den tatsächlich benötigten Abschnitt des Verzeichnisbaums überschreiben&lt;br /&gt;
&lt;br /&gt;
=== Befehl matchpathcon ===&lt;br /&gt;
matchpathcon fragt die System-Policy ab und gibt den &#039;&#039;&#039;Standardkontext&#039;&#039;&#039; aus, der mit dem angegebenen Pfad verknüpft ist&lt;br /&gt;
* Das Werkzeug ist speziell für die Analyse des erwarteten Kontexts nützlich und nicht für den aktuellen Inhalt von xattr&lt;br /&gt;
* Dieses Dienstprogramm &#039;&#039;&#039;verwaltet keine Regeln&#039;&#039;&#039;, sondern &#039;&#039;&#039;zeigt lediglich das Ergebnis der Pfadprüfung&#039;&#039;&#039; gegen die File-Context-Datenbank an&lt;br /&gt;
&lt;br /&gt;
; Hauptziele bei der Verwendung von matchpathcon&lt;br /&gt;
* verstehen, &#039;&#039;&#039;welches Label ein Pfad haben sollte&#039;&#039;&#039;&lt;br /&gt;
* das &#039;&#039;&#039;tatsächliche Label&#039;&#039;&#039; mit der &#039;&#039;&#039;Policy-Erwartung&#039;&#039;&#039; vergleichen&lt;br /&gt;
* im Voraus prüfen, welchen Kontext ein neuer Pfad nach dem Ausführen von restorecon erhält&lt;br /&gt;
&lt;br /&gt;
===== Prüfschichten  =====&lt;br /&gt;
Prüfschichten entsprechend der Priorität der Regeln (von der niedrigsten zur höchsten Priorität)&lt;br /&gt;
* Basisregeln der Policy (file_contexts)&lt;br /&gt;
* Regeln für Home-Verzeichnisse (file_contexts.homedirs)&lt;br /&gt;
* Systemweite Pfad-Aliase der Distribution (file_contexts.subs_dist)&lt;br /&gt;
* Lokale Äquivalenzregeln (file_contexts.subs)&lt;br /&gt;
* lokale administrative Änderungen (file_contexts.local)&lt;br /&gt;
&lt;br /&gt;
===== Optionen =====&lt;br /&gt;
Zunächst verwenden wir den Befehl ohne Parameter, um das erwartete Label für die Datei /etc/resolv.conf anzusehen&lt;br /&gt;
* Anschließend vergleichen wir es mit dem tatsächlichen Label mittels ls&lt;br /&gt;
&lt;br /&gt;
 matchpathcon /etc/resolv.conf&lt;br /&gt;
 ls -Z /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
* Für die Problemdiagnose — insbesondere um zu prüfen, ob der auf dem Datenträger vorhandene Kontext mit dem Standardkontext aus der Policy übereinstimmt — ist auch der Parameter -V (Verify) praktisch&lt;br /&gt;
* Zur Veranschaulichung erzeugen wir eine Situation, in der das aktuelle Label nicht mit dem erwarteten übereinstimmt&lt;br /&gt;
&lt;br /&gt;
 cp -a /etc/hosts /var/log/hosts&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -V /var/log/hosts&lt;br /&gt;
 /var/log/hosts has context system_u:object_r:net_conf_t:s0, should be system_u:object_r:var_log_t:s0&lt;br /&gt;
&lt;br /&gt;
Wichtig ist zu beachten, dass das Dienstprogramm matchpathcon für manche Pfade &amp;lt;&amp;lt;none&amp;gt;&amp;gt; zurückgeben kann (zum Beispiel für Dateien in tmp)&lt;br /&gt;
* Das ist ein spezieller interner Wert in der Datenbank file_contexts: Er bedeutet, dass für diesen Pfad und Objekttyp &#039;&#039;&#039;kein erwarteter Standardkontext gefunden wurde&#039;&#039;&#039; oder dass dieser Pfad &#039;&#039;&#039;kein Label über File Context erhalten soll&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Der Objekttyp kann mit dem Parameter -m (mode) erzwungen angegeben werden&lt;br /&gt;
* Das ist besonders wichtig für Pfade, die noch nicht existieren, oder wenn ein konkretes Szenario geprüft werden soll: „Was wäre, wenn dies ein Verzeichnis wäre?“ oder „Was wäre, wenn dies eine Datei wäre?“&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -m dir /etc/dir&lt;br /&gt;
 matchpathcon -m file /var/log/mylog.log&lt;br /&gt;
&lt;br /&gt;
Zuordnung der Objekttypen in file_contexts und der ausgeschriebenen Werte für den Parameter -m&lt;br /&gt;
{| class=&amp;quot;wikitable big options&amp;quot;&lt;br /&gt;
!matchpathcon -m&lt;br /&gt;
!file_contexts&lt;br /&gt;
|-&lt;br /&gt;
|file&lt;br /&gt;
|--&lt;br /&gt;
|-&lt;br /&gt;
|dir&lt;br /&gt;
|-d&lt;br /&gt;
|-&lt;br /&gt;
|lnk_file&lt;br /&gt;
|-l&lt;br /&gt;
|-&lt;br /&gt;
|sock_file&lt;br /&gt;
|-s&lt;br /&gt;
|-&lt;br /&gt;
|pipe&lt;br /&gt;
|-p&lt;br /&gt;
|-&lt;br /&gt;
|chr_file&lt;br /&gt;
|-c&lt;br /&gt;
|-&lt;br /&gt;
|blk_file&lt;br /&gt;
|-b&lt;br /&gt;
|}&lt;br /&gt;
Am häufigsten werden die Typen file, dir, lnk_file verwendet&lt;br /&gt;
&lt;br /&gt;
Für Skripte und Automatisierung ist der Parameter -n (no path) praktisch&lt;br /&gt;
 matchpathcon -n /etc/hosts&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe enthält dann nicht den Pfad, sondern nur das Ergebnis der Prüfung des erwarteten File Context&lt;br /&gt;
* Schließlich kann statt der aktuellen auch eine alternative Datei file_contexts verwendet werden&lt;br /&gt;
* Das kann für Testzwecke nützlich sein; dafür dient der Parameter -f (file contexts)&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -f /tmp/test_file_contexts /srv/myapp&lt;br /&gt;
&lt;br /&gt;
Außerdem kann mit dem Parameter -P (Policy) ein alternativer Pfad für einen vollständigen Policy-Satz verwendet werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von Kontexten mit semanage ==&lt;br /&gt;
Nun ist es endlich an der Zeit, die Verwaltung der File-Context-Datenbank zu betrachten&lt;br /&gt;
&lt;br /&gt;
Wie bereits zuvor besprochen, überschreibt chcon direkt die erweiterten Attribute (xattr) auf dem Datenträger, teilt der SELinux-Policy-Datenbank (file_contexts) jedoch absolut nichts darüber mit&lt;br /&gt;
&lt;br /&gt;
Änderungen, die mit chcon vorgenommen werden, sind im Maßstab des Systemlebenszyklus nur temporär&lt;br /&gt;
&lt;br /&gt;
Sie werden bei jedem der folgenden Ereignisse unwiderruflich zerstört (durch Referenzwerte aus der Datenbank überschrieben)&lt;br /&gt;
* der Administrator startet das Dienstprogramm restorecon manuell für dieses Verzeichnis;&lt;br /&gt;
* es erfolgt ein Systemupdate eines Pakets (zum Beispiel des Webservers), dessen Installer eine Prüfung der Kontexte auslöst;&lt;br /&gt;
* beim Booten wird ein vollständiges Relabeling des Dateisystems initiiert (durch Erzeugen der Datei /.autorelabel)&lt;br /&gt;
&lt;br /&gt;
=== semanage fcontext ===&lt;br /&gt;
Damit ein Kontext alle Updates und Relabeling-Vorgänge übersteht, muss man dem SELinux-System selbst beibringen, dass ein nicht standardmäßiger Pfad nun ein bestimmtes Label haben soll&lt;br /&gt;
&lt;br /&gt;
Dafür wird das Werkzeug semanage (SELinux Policy Management Tool) verwendet&lt;br /&gt;
* Es ist das allgemeine Werkzeug zur lokalen Verwaltung von Elementen der SELinux-Policy, darunter: login mappings, SELinux users, ports, interfaces, modules, booleans, permissive types und file contexts&lt;br /&gt;
* Für den aktuellen Schritt ist insbesondere der Bereich fcontext relevant&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Zur Demonstration versuchen wir, ein nicht standardmäßiges Verzeichnis mit hochsensiblen Daten zu schützen&lt;br /&gt;
&lt;br /&gt;
Stellen wir uns folgende Situation vor: Entwickler haben ein internes Authentifizierungssystem ausgerollt, das Sicherungskopien der Passwort-Hashes von Benutzern in einem nicht standardmäßigen Verzeichnis speichert — /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /opt/app_auth/vault&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir uns an die Analyse der Datei file_contexts aus den vorherigen Schritten erinnern, erhalten das Verzeichnis /opt/ und sein gesamter Inhalt standardmäßig den Kontext usr_t&lt;br /&gt;
&lt;br /&gt;
; Das ist ein öffentlicher Kontext&lt;br /&gt;
* &#039;&#039;&#039;Die meisten laufenden Dienste und Benutzer dürfen Dateien mit diesem Label lesen.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Passwörter dort zu speichern ist unzulässig.&#039;&#039;&#039;&lt;br /&gt;
* Daher muss für dieses Verzeichnis eine grundlegende Regel erstellt werden&lt;br /&gt;
&lt;br /&gt;
Verwenden wir dazu die Parameter -a (add) und -t (Feld type)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -a -t shadow_t &amp;quot;/opt/app_auth/vault(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/opt/app_auth/vault(/.*)?&amp;quot; — ein regulärer Ausdruck, der das Verzeichnis selbst und absolut alle darin enthaltenen Dateien umfasst&lt;br /&gt;
&lt;br /&gt;
Nun prüfen wir den Kontext des Verzeichnisses&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
...und sehen, dass sich nichts geändert hat&lt;br /&gt;
* Das liegt daran, dass wir zwar einen Eintrag in die Datenbank hinzugefügt haben, das bloße Hinzufügen eines Eintrags jedoch kein Relabeling auslöst&lt;br /&gt;
* Um die Änderungen anzuwenden, wird das uns bereits bekannte Werkzeug restorecon verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /opt/app_auth/vault/&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
# ls -Zd /opt/app_auth/vault/&lt;br /&gt;
unconfined_u:object_r:shadow_t:s0 /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen wir, ob der Eintrag in der File-Context-Datenbank vorhanden ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
cat /etc/selinux/default/contexts/files/file_contexts.local&lt;br /&gt;
&lt;br /&gt;
# This file is auto-generated by libsemanage&lt;br /&gt;
# Do not edit directly&lt;br /&gt;
&lt;br /&gt;
/opt/app_auth/vault(/.*)?    system_u:object_r:shadow_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Jetzt sind die vertraulichen Daten zuverlässig geschützt!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Optionen ====&lt;br /&gt;
Das Werkzeug semanage verfügt über verschiedene nützliche Optionen; konzentrieren wir uns auf die wichtigsten&lt;br /&gt;
&lt;br /&gt;
Welche nicht standardmäßigen Regeln manuell hinzugefügt wurden, kann mit der Option -l (list) zusammen mit dem Modifikator -C (Custom) angezeigt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -lC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Kontexttyp für den bereits in der lokalen Datenbank registrierten Pfad /srv/myweb(/.*)? kann man mit der Option -m (modify) aktualisieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -m -t httpd_sys_rw_content_t &amp;quot;/srv/myweb(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass der reguläre Ausdruck genau mit dem Eintrag in der Datenbank übereinstimmt, dessen Kontext wir ändern wollen&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst außer Betrieb genommen wurde und das nicht standardmäßige Verzeichnis nicht mehr benötigt wird, kann die Regel mit der Option -d gelöscht werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -d &amp;quot;/opt/app_auth/vault(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Äquivalente Pfade (Equivalence Rules) ===&lt;br /&gt;
Bei der Arbeit mit mehreren Verzeichnissen entsteht häufig die Situation, dass&lt;br /&gt;
* bereits eine korrekt gekennzeichnete Struktur existiert&lt;br /&gt;
* eine Kopie dieser Struktur an einem anderen Ort erstellt werden muss&lt;br /&gt;
&lt;br /&gt;
==== Beispielaufgabe ====&lt;br /&gt;
Es gibt den Standardpfad des Webservers /var/www, wir haben jedoch beschlossen, die Dateien unserer neuen Website in einem nicht standardmäßigen Verzeichnis abzulegen, zum Beispiel auf einer separaten Festplatte, die unter /srv/myweb eingehängt ist&lt;br /&gt;
&lt;br /&gt;
Wir erstellen zur Veranschaulichung mehrere Ordner im ursprünglichen Verzeichnis /var/www und bereiten das neue Verzeichnis /srv/myweb vor&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /var/www/sessions &amp;amp;&amp;amp; mkdir -p /var/www/cgi-bin&lt;br /&gt;
restorecon -v -R /var/www&lt;br /&gt;
ls -Z1 /var/www&lt;br /&gt;
mkdir -p /srv/myweb&lt;br /&gt;
cp -r /var/www/* /srv/myweb/&lt;br /&gt;
ls -Z1 /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig sind für das Verzeichnis /var/www und alle seine Unterverzeichnisse (html, cgi-bin usw.) im System bereits Dutzende komplexer regulärer Ausdrücke definiert, die die korrekten Kontexte zuweisen (zum Beispiel httpd_cache_t für /var/www/uploads(/.*)?)&lt;br /&gt;
* Alle regulären Ausdrücke aus /var/www manuell für das neue Verzeichnis /srv/myweb umzuschreiben, wäre aufwendig, unhandlich und fehleranfällig&lt;br /&gt;
&lt;br /&gt;
Für die Lösung solcher Aufgaben werden Äquivalenzregeln verwendet (Parameter -e des Befehls semanage fcontext)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -a -e /var/www /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Änderungen anwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v -R /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sehen wir uns an, wie das in der Datenbank aussieht&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
# semanage fcontext -lC&lt;br /&gt;
SELinux fcontext                                   type               Context&lt;br /&gt;
/opt/app_auth/vault(/.*)?                          all files          system_u:object_r:shadow_t:s0&lt;br /&gt;
&lt;br /&gt;
SELinux Local fcontext Equivalence&lt;br /&gt;
/srv/myweb = /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Äquivalenzregel funktioniert wie ein transparenter Alias: Wenn SELinux irgendeine Datei innerhalb von /srv/myweb/ prüft, ersetzt es in deren Pfad virtuell /srv/myweb durch /var/www und sucht erst danach Übereinstimmungen in seiner umfangreichen Datenbank regulärer Ausdrücke&lt;br /&gt;
&lt;br /&gt;
Wenn es erforderlich ist, die Äquivalenzregel zu entfernen, geschieht dies mit dem bereits bekannten Parameter -d; man muss ihn lediglich anstelle des Parameters -a aus dem ursprünglichen Befehl verwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -d -e /var/www /srv/myweb&lt;br /&gt;
semanage fcontext -lC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Export und Import lokaler Policies ===&lt;br /&gt;
Das Dienstprogramm semanage kann Policies mit den Befehlen semanage export und semanage import in eine Datei exportieren beziehungsweise aus einer Datei importieren&lt;br /&gt;
* In der Praxis wird das zum Beispiel verwendet, wenn ein Administrator plant, Policies von einem Testserver auf die Produktionsumgebung zu übertragen&lt;br /&gt;
&lt;br /&gt;
==== Export ====&lt;br /&gt;
Verwendungsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage export -f /tmp/selinux_local_rules.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen wir, was sich darin befindet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
cat /tmp/selinux_local_rules.txt&lt;br /&gt;
boolean -D&lt;br /&gt;
login -D&lt;br /&gt;
interface -D&lt;br /&gt;
...&lt;br /&gt;
fcontext -a -f a -t shadow_t -r &#039;s0&#039; &#039;/opt/app_auth/vault(/.*)?&#039;&lt;br /&gt;
module -d acpi&lt;br /&gt;
module -d aisexec&lt;br /&gt;
module -d amtu&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man sehen kann, ist die Datei logisch in drei Teile gegliedert&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bereinigungsblock&#039;&#039;&#039; (Einträge mit dem Schlüssel -D) – beim Import der Datei auf einem neuen Server (über semanage import) soll das Policy-System zu einer &#039;&#039;exakten Kopie&#039;&#039; des Quellservers werden&lt;br /&gt;
* Daher müssen alle lokalen Einstellungen gelöscht werden&lt;br /&gt;
* Der Schlüssel -D wird als Delete interpretiert&lt;br /&gt;
* &#039;&#039;&#039;Lokale Regeln&#039;&#039;&#039; (im Beispiel die einzige Regel fcontext)&lt;br /&gt;
* &#039;&#039;&#039;Block deaktivierter Policy-Module&#039;&#039;&#039; (Einträge mit dem Schlüssel -d) – das Policy-Set default policy in Debian ist gehärtet (hardened) und deaktiviert ungenutzte Module&lt;br /&gt;
* In RHEL macht die Policy targeted genau das Gegenteil: Dort sind standardmäßig von Anfang an alle Module aktiviert, unabhängig davon, ob die entsprechende Software installiert ist oder nicht&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Für den Import wird der Befehl semanage import verwendet; seine Syntax sieht identisch zum Export aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage import -f /tmp/selinux_local_rules.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn uns die importierten Policies zusagen und alles Erforderliche mit matchpathcon -V geprüft wurde, wenden wir die Änderungen an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/Praxis]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= RHEL =&lt;br /&gt;
=== SELinux-Kontexte – Dateien kennzeichnen ===&lt;br /&gt;
Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien so gekennzeichnet, dass sie sicherheitsrelevante Informationen darstellen&lt;br /&gt;
* Diese Informationen werden als SELinux-Kontext bezeichnet&lt;br /&gt;
* Bei Dateien kann dies mit dem Befehl &#039;&#039;ls -Z&#039;&#039; angezeigt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel stellt SELinux einen Benutzer (&#039;&#039;unconfined_u&#039;&#039;), eine Rolle (&#039;&#039;object_r&#039;&#039;), einen Typ (&#039;&#039;user_home_t&#039;&#039;) und eine Stufe (&#039;&#039;s0&#039;&#039;) bereit&lt;br /&gt;
* Diese Informationen werden verwendet, um Entscheidungen zur Zugriffskontrolle zu treffen&lt;br /&gt;
* Auf DAC-Systemen wird der Zugriff auf Basis der Linux-Benutzer- und Gruppen-IDs kontrolliert&lt;br /&gt;
* SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft&lt;br /&gt;
* SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuvor verweigern&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
: Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse&lt;br /&gt;
* Wenn Sie beispielsweise eine neue Datei im Verzeichnis &#039;&#039;/etc&#039;&#039; erstellen, das mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet ist, erbt die neue Datei denselben Typ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -dZ - /etc&lt;br /&gt;
drwxr-xr-x root root system_u:object_r:‚&#039;etc_t‘&#039;:s0 /etc&lt;br /&gt;
&lt;br /&gt;
sudo touch /etc/file1&lt;br /&gt;
&lt;br /&gt;
sudo ls -lZ /etc/file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:‚&#039;etc_t‘&#039;:s0 /etc/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELinux bietet mehrere Befehle zur Verwaltung der Dateisystem-Kennzeichnung, wie beispielsweise &#039;&#039;chcon&#039;&#039;, &#039;&#039;semanage fcontext&#039;&#039;, &#039;&#039;restorecon&#039;&#039; und &#039;&#039;matchpathcon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Temporäre Änderungen: chcon ====&lt;br /&gt;
Der Befehl &#039;&#039;chcon&#039;&#039; ändert den SELinux-Kontext für Dateien&lt;br /&gt;
* Änderungen, die mit dem Befehl &#039;&#039;chcon&#039;&#039; vorgenommen werden, bleiben jedoch nicht bestehen, wenn das Dateisystem neu gekennzeichnet wird oder der Befehl &#039;&#039;restorecon&#039;&#039; &lt;br /&gt;
* Die SELinux-Richtlinie legt fest, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern dürfen&lt;br /&gt;
* Bei der Verwendung von &#039;&#039;chcon&#039;&#039; geben Benutzer den gesamten oder einen Teil des SELinux-Kontexts an, der geändert werden soll&lt;br /&gt;
* Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert&lt;br /&gt;
&lt;br /&gt;
==== Kurzreferenz ====&lt;br /&gt;
* Führen Sie den Befehl &#039;&#039;chcon -t ‚&#039;type‘&#039; ‚&#039;file-name‘&#039; &#039;&#039; aus, um den Dateityp zu ändern, wobei ‚&#039;type‘&#039; ein SELinux-Typ ist, wie z. B. &#039;&#039;httpd_sys_content_t&#039;&#039;, und ‚&#039;file-name‘&#039; ein Datei- oder Verzeichnisname ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t httpd_sys_content_t ‚&#039;file-name‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Führen Sie den Befehl &#039;&#039;chcon -R -t ‚&#039;type‘&#039; ‚&#039;directory-name‘&#039;&#039;&#039; aus, um den Typ des Verzeichnisses und dessen Inhalt zu ändern, wobei ‚&#039;type‘&#039; ein SELinux-Typ ist, wie beispielsweise &#039;&#039;httpd_sys_content_t&#039;&#039;, und ‚&#039;Verzeichnisname‘&#039; ein Verzeichnisname ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t httpd_sys_content_t ‚&#039;Verzeichnisname‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Ändern des Typs einer Datei oder eines Verzeichnisses&lt;br /&gt;
Das folgende Verfahren zeigt, wie der Typ und keine anderen Attribute des SELinux-Kontexts geändert werden&lt;br /&gt;
* Das Beispiel in diesem Abschnitt funktioniert genauso für Verzeichnisse, beispielsweise wenn &#039;&#039;file1&#039;&#039; ein Verzeichnis wäre. # Wechseln Sie in Ihr Home-Verzeichnis&lt;br /&gt;
# Erstellen Sie eine neue Datei und zeigen Sie deren SELinux-Kontext an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch file1&lt;br /&gt;
&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rw -rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel umfasst der SELinux-Kontext für &#039;&#039;file1&#039;&#039; den SELinux-Benutzer &#039;&#039;unconfined_u&#039;&#039;, die Rolle &#039;&#039;object_r&#039;&#039;, den Typ &#039;&#039;user_home_t&#039;&#039; und die &#039;&#039;s0&#039;&#039; Ebene&lt;br /&gt;
* Eine Beschreibung der einzelnen Bestandteile des SELinux-Kontexts finden Sie in Kapitel 2, ‚&#039;SELinux-Kontexte‘&#039;&lt;br /&gt;
# Geben Sie den folgenden Befehl ein, um den Typ in &#039;&#039;samba_share_t&#039;&#039; zu ändern&lt;br /&gt;
* Die Option &#039;&#039;-t&#039;&#039; ändert nur den Typ&lt;br /&gt;
* Zeigen Sie anschließend die Änderung an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t samba_share_t file1&lt;br /&gt;
&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie den folgenden Befehl, um den SELinux-Kontext für die Datei &#039;&#039;file1&#039;&#039; wiederherzustellen&lt;br /&gt;
* Verwenden Sie die Option &#039;&#039;-v&#039;&#039;, um die Änderungen anzuzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v file1&lt;br /&gt;
restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0-&amp;gt;system_u:object_r:user_home_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der vorherige Typ, &#039;&#039;samba_share_t&#039;&#039;, auf den korrekten Typ, &#039;&#039;user_home_t&#039;&#039;, zurückgesetzt&lt;br /&gt;
* Bei Verwendung der Targeted-Richtlinie (der Standard-SELinux-Richtlinie in Red Hat Enterprise Linux) liest der Befehl &#039;&#039;restorecon&#039;&#039; die Dateien im Verzeichnis &#039;&#039;/etc/selinux/targeted/contexts/files/&#039;&#039; aus, um festzustellen, welchen SELinux-Kontext die Dateien haben sollten&lt;br /&gt;
&lt;br /&gt;
; Ändern der Typen eines Verzeichnisses und seines Inhalts&lt;br /&gt;
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&lt;br /&gt;
* Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server ein anderes Dokumentstammverzeichnis (anstelle von &#039;&#039;/var/www/html/&#039;&#039;) verwendet&lt;br /&gt;
# Erstellen Sie als Root-Benutzer ein neues &#039;&#039;web/&#039;&#039;-Verzeichnis und anschließend 3 leere Dateien (&#039;&#039;file1&#039;&#039;, &#039;&#039;file2&#039;&#039; und &#039;&#039;file3&#039;&#039;) in diesem Verzeichnis&lt;br /&gt;
* Das &#039;&#039;web/&#039;&#039;-Verzeichnis und die darin enthaltenen Dateien sind mit dem Typ &#039;&#039;default_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir /web&lt;br /&gt;
&lt;br /&gt;
sudo touch /web/file{1,2,3}&lt;br /&gt;
sudo ls -dZ /web&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web&lt;br /&gt;
&lt;br /&gt;
sudo ls -lZ /web&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Geben Sie als root den folgenden Befehl ein, um den Typ des Verzeichnisses &#039;&#039;web/&#039;&#039; (und dessen Inhalt) in &#039;&#039;httpd_sys_content_t&#039;&#039; zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo chcon -R -t httpd_sys_content_t /web/&lt;br /&gt;
&lt;br /&gt;
sudo ls -dZ /web/&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/&lt;br /&gt;
&lt;br /&gt;
sudo ls -lZ /web/&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r: httpd_sys_content_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Um die Standard-SELinux-Kontexte wiederherzustellen, verwenden Sie das Dienstprogramm &#039;&#039;restorecon&#039;&#039; als root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -R -v /web/&lt;br /&gt;
restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t:s0&lt;br /&gt;
&lt;br /&gt;
restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t:s0&lt;br /&gt;
restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t: s0&lt;br /&gt;
restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu &#039;&#039;chcon&#039;&#039; finden Sie auf der chcon(1)-Manpage&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
: Typen-Enforcement ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird&lt;br /&gt;
* In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden&lt;br /&gt;
&lt;br /&gt;
==== Dauerhafte Änderungen: semanage fcontext ====&lt;br /&gt;
Der Befehl &#039;&#039;semanage fcontext&#039;&#039; wird verwendet, um den SELinux-Kontext von Dateien zu ändern&lt;br /&gt;
* Um die Kontexte neu erstellter Dateien und Verzeichnisse anzuzeigen, geben Sie als root den folgenden Befehl ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -C -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Änderungen, die mit &#039;&#039;semanage fcontext&#039;&#039; vorgenommen wurden, werden von den folgenden Dienstprogrammen verwendet&lt;br /&gt;
* Das Dienstprogramm &#039;&#039;setfiles&#039;&#039; wird verwendet, wenn ein Dateisystem neu gekennzeichnet wird, und das Dienstprogramm &#039;&#039;restorecon&#039;&#039; stellt die Standard-SELinux-Kontexte wieder her&lt;br /&gt;
* Das bedeutet, dass durch &#039;&#039;semanage fcontext&#039;&#039; vorgenommene Änderungen dauerhaft sind, selbst wenn das Dateisystem neu gekennzeichnet wird&lt;br /&gt;
* Die SELinux-Richtlinie steuert, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern können&lt;br /&gt;
&lt;br /&gt;
==== Kurzübersicht ====&lt;br /&gt;
Um SELinux-Kontextänderungen vorzunehmen, die eine Neukennzeichnung des Dateisystems überdauern&lt;br /&gt;
# Geben Sie den folgenden Befehl ein und achten Sie darauf, den vollständigen Pfad zur Datei oder zum Verzeichnis zu verwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -a ‚&#039;Optionen‘&#039; ‚&#039;Dateiname‘ ‚|‘&#039;Verzeichnisname&#039;‚&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um die Kontextänderungen anzuwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -v ‘&#039;Dateiname&#039;‚|‘&#039;Verzeichnisname&#039;‚&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Verwendung regulärer Ausdrücke mit semanage fcontext =====&lt;br /&gt;
Damit der Befehl &#039;&#039;semanage fcontext&#039;&#039; korrekt funktioniert, können Sie entweder einen vollqualifizierten Pfad oder ‘&#039;&#039; Perl-kompatible reguläre Ausdrücke ()‚‘&#039;&lt;br /&gt;
* Das einzige verwendete ‚&#039;PCRE‘&#039;-Flag ist &#039;&#039;PCRE2_DOTALL&#039;&#039;, wodurch der Platzhalter &#039;&#039;.&#039;&#039; mit allem übereinstimmt, einschließlich einer neuen Zeile&lt;br /&gt;
* Zeichenfolgen, die Pfade darstellen, werden als Bytes verarbeitet, was bedeutet, dass Nicht-ASCII-Zeichen nicht durch einen einzelnen Platzhalter abgeglichen werden&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass mit &#039;&#039;semanage fcontext&#039;&#039; angegebene Dateikontextdefinitionen in umgekehrter Reihenfolge zu ihrer Definition ausgewertet werden&lt;br /&gt;
der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet&lt;br /&gt;
* Lokale Dateikontextänderungen, die in &#039;&#039;file_contexts.local&#039;&#039; gespeichert sind, haben eine höhere Priorität als die in Policy-Modulen angegebenen&lt;br /&gt;
* Das bedeutet, dass immer dann, wenn in &#039;&#039;file_contexts.local&#039;&#039; gefunden wird, werden keine anderen Dateikontextdefinitionen berücksichtigt&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Mit dem Befehl &#039;&#039;semanage fcontext&#039;&#039; festgelegte Dateikontextdefinitionen überschreiben effektiv alle anderen Dateikontextdefinitionen&lt;br /&gt;
* Alle regulären Ausdrücke sollten daher so spezifisch wie möglich sein, um unbeabsichtigte Auswirkungen auf andere Teile des Dateisystems zu vermeiden&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu den in Dateikontextdefinitionen verwendeten regulären Ausdrücken und den geltenden Flags finden Sie in der &#039;&#039;semanage-fcontext(8) &#039;&#039; Man-Seite&lt;br /&gt;
&lt;br /&gt;
; Ändern des Typs einer Datei oder eines Verzeichnisses&lt;br /&gt;
Das folgende Beispiel zeigt, wie der Typ einer Datei geändert wird, ohne andere Attribute des SELinux-Kontexts zu beeinflussen&lt;br /&gt;
* Dieses Beispiel funktioniert genauso für Verzeichnisse, beispielsweise wenn &#039;&#039;file1&#039;&#039; ein Verzeichnis wäre. # Erstellen Sie als Root-Benutzer eine neue Datei im Verzeichnis &#039;&#039;/etc&#039;&#039;&lt;br /&gt;
* Standardmäßig werden neu erstellte Dateien in &#039;&#039;/etc&#039;&#039; mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo touch /etc/file1&lt;br /&gt;
&lt;br /&gt;
ls -Z /etc/file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Informationen zu einem Verzeichnis aufzulisten, verwenden Sie den folgenden Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -dZ ‚&#039;Verzeichnisname‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Geben Sie als root den folgenden Befehl ein, um den Typ von &#039;&#039;file1&#039;&#039; in &#039;&#039;samba_share_t&#039;&#039; zu ändern&lt;br /&gt;
* Die Option &#039;&#039;-a&#039;&#039; fügt einen neuen Eintrag hinzu, und die Option &#039;&#039;-t&#039;&#039; definiert einen Typ (&#039;&#039;samba_share_t&#039;&#039;)&lt;br /&gt;
* Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; &#039;&#039;file1&#039;&#039; ist weiterhin mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -a -t samba_share_t /etc/file1&lt;br /&gt;
&lt;br /&gt;
sudo ls -Z /etc/file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1&lt;br /&gt;
&lt;br /&gt;
semanage fcontext -C -l&lt;br /&gt;
&lt;br /&gt;
/etc/file1 unconfined_u:object_r:samba_share_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie als root das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um den Typ zu ändern&lt;br /&gt;
* Da &#039;&#039;semanage&#039;&#039; einen Eintrag für &#039;&#039;/etc/file1&#039;&#039; in &#039;&#039;file_contexts.local&#039;&#039; hinzugefügt hat, ändert &#039;&#039;restorecon&#039;&#039; den Typ in &#039;&#039;samba_share_t&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -v /etc/file1&lt;br /&gt;
restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0-&amp;gt;system_u:object_r:samba_share_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Ändern der Typen eines Verzeichnisses und seines Inhalts&lt;br /&gt;
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&lt;br /&gt;
* Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server anstelle von &#039;&#039;/var/www/html/&#039;&#039; einen anderen Dokumentenstamm verwendet &lt;br /&gt;
# Erstellen Sie als Root-Benutzer ein neues Verzeichnis &#039;&#039;web/&#039;&#039; und anschließend 3 leere Dateien (&#039;&#039;file1&#039;&#039;, &#039;&#039;file2&#039;&#039; und &#039;&#039;file3&#039;&#039;) in diesem Verzeichnis&lt;br /&gt;
* Das Verzeichnis &#039;&#039;web/ &#039;&#039; und die darin enthaltenen Dateien sind mit dem Typ &#039;&#039;default_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir /web&lt;br /&gt;
sudo touch /web/file{1,2,3}&lt;br /&gt;
sudo ls -dZ /web&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web&lt;br /&gt;
sudo ls -lZ /web&lt;br /&gt;
-rw-r--r-- root root unconfined_ u:object_r:default_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Geben Sie als root den folgenden Befehl ein, um den Typ des &#039;&#039;web/&#039;&#039;-Verzeichnisses und der darin enthaltenen Dateien in &#039;&#039;httpd_sys_content_t&#039;&#039; zu ändern&lt;br /&gt;
* Die Option &#039;&#039;-a&#039;&#039; fügt einen neuen Eintrag hinzu, und die Option &#039;&#039;-t&#039;&#039; definiert einen Typ (&#039;&#039;httpd_sys_content_t&#039;&#039;)&lt;br /&gt;
* Der reguläre Ausdruck &#039;&#039;„/web(/.*)?“&#039;&#039; bewirkt, dass &#039;&#039;semanage&#039;&#039; die Änderungen auf &#039;&#039;web/&#039;&#039; sowie die darin enthaltenen Dateien anwendet&lt;br /&gt;
* Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; &#039;&#039;web/&#039;&#039; und die darin enthaltenen Dateien sind weiterhin mit dem Typ &#039;&#039;default_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“&lt;br /&gt;
ls -dZ /web&lt;br /&gt;
&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web&lt;br /&gt;
ls -lZ /web&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl &#039;&#039;semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“&#039;&#039; fügt den folgenden Eintrag zu &#039;&#039;/etc/selinux/targeted/contexts/files/file_contexts.local&#039;&#039; hinzu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie als root das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um den Typ von &#039;&#039;web/&#039;&#039; sowie aller darin enthaltenen Dateien zu ändern&lt;br /&gt;
* Der Parameter &#039;&#039;-R&#039;&#039; steht für rekursiv, was bedeutet, dass alle Dateien und Verzeichnisse unter &#039;&#039;web/&#039;&#039; mit dem Typ &#039;&#039;httpd_sys_content_t&#039;&#039; gekennzeichnet werden&lt;br /&gt;
* Da &#039;&#039;semanage&#039;&#039; einen Eintrag für &#039;&#039;/web(/.*)?&#039;&#039; in &#039;&#039;file.contexts.local&#039;&#039; hinzugefügt hat, ändert &#039;&#039;restorecon&#039;&#039; die Typen in &#039;&#039;httpd_sys_content_t&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -R -v /web&lt;br /&gt;
restorecon reset /web context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r: httpd_sys_content_t:s0&lt;br /&gt;
restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&lt;br /&gt;
restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass neu erstellte Dateien und Verzeichnisse standardmäßig den SELinux-Typ ihrer übergeordneten Verzeichnisse erben&lt;br /&gt;
&lt;br /&gt;
; Einen hinzugefügten Kontext löschen&lt;br /&gt;
Das folgende Beispiel zeigt das Hinzufügen und Entfernen eines SELinux-Kontexts&lt;br /&gt;
* Wenn der Kontext Teil eines regulären Ausdrucks ist, zum Beispiel &#039;&#039;/web(/.*)?&#039;&#039;, setzen Sie den regulären Ausdruck in Anführungszeichen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -d „/web(/.*)?“&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Um den Kontext zu entfernen, geben Sie als Root den folgenden Befehl ein, wobei ‚&#039;Dateiname‘&#039;|‚&#039;Verzeichnisname‘&#039; der erste Teil in &#039;&#039;file_contexts.local&#039;&#039; ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -d ‚&#039;Dateiname‘&#039;|‚&#039;Verzeichnisname‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Folgende ist ein Beispiel für einen Kontext in &#039;&#039;file_contexts. local&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/test system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei der erste Teil &#039;&#039;test&#039;&#039; ist&lt;br /&gt;
* Um zu verhindern, dass das Verzeichnis &#039;&#039;test/&#039;&#039; nach dem Ausführen von &#039;&#039;restorecon&#039;&#039; oder nach einer Neulabelung des Dateisystems mit dem &#039;&#039;httpd_sys_content_t&#039;&#039;-Label versehen wird, geben Sie als Root den folgenden Befehl ein, um den Kontext aus &#039;&#039;file_contexts.local&#039;&#039; zu löschen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -d /test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie als root das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um den Standard-SELinux-Kontext wiederherzustellen&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu &#039;&#039;semanage&#039;&#039; finden Sie in den Handbuchseiten semanage(8) und semanage-fcontext(8)&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Wenn Sie den SELinux-Kontext mit &#039;&#039;semanage fcontext -a&#039;&#039; ä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 &#039;&#039;restorecon&#039;&#039;-Befehls&lt;br /&gt;
&lt;br /&gt;
==== Wie der Dateikontext bestimmt wird ====&lt;br /&gt;
Die Bestimmung des Dateikontexts basiert auf Dateikontextdefinitionen, die in der Systemsicherheitsrichtlinie (den &#039;&#039;.fc&#039;&#039;-Dateien) festgelegt sind&lt;br /&gt;
* Basierend auf der Systemrichtlinie generiert &#039;&#039;semanage&#039;&#039; die Dateien &#039;&#039;file_contexts.homedirs&#039;&#039; und &#039;&#039;file_contexts&#039;&#039;-Dateien&lt;br /&gt;
&lt;br /&gt;
Systemadministratoren können Dateikontextdefinitionen mit dem Befehl &#039;&#039;semanage fcontext&#039;&#039; anpassen&lt;br /&gt;
* Solche Anpassungen werden in der Datei &#039;&#039;file_contexts.local&#039;&#039; gespeichert&lt;br /&gt;
&lt;br /&gt;
Wenn ein Kennzeichnungsprogramm wie &#039;&#039;matchpathcon&#039;&#039; oder &#039;&#039;restorecon&#039;&#039; die richtige Kennzeichnung für einen bestimmten Pfad ermittelt, sucht es zunächst nach lokalen Änderungen (&#039;&#039;file_contexts.local&#039;&#039;)&lt;br /&gt;
* Findet das Dienstprogramm kein passendes Muster, durchsucht es die Datei &#039;&#039;file_contexts.homedirs&#039;&#039; und schließlich die Datei &#039;&#039;file_contexts&#039;&#039;&lt;br /&gt;
* Sobald jedoch eine Übereinstimmung für einen bestimmten Dateipfad gefunden wird, endet die Suche, sucht das Dienstprogramm nicht nach weiteren Dateikontext-Definitionen&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
Dateikontext-Definitionen, die durch die &#039;&#039;Systemrichtlinie&#039;&#039; festgelegt sind (Inhalt der Dateien &#039;&#039;file_contexts.homedirs&#039;&#039; und &#039;&#039;file_contexts&#039;&#039;), werden vor der Auswertung nach der Länge des Stamms (Präfix des Pfads vor etwaigen Platzhaltern) sortiert&lt;br /&gt;
* Das bedeutet, dass der spezifischste Pfad ausgewählt wird&lt;br /&gt;
* Mit &#039;&#039;semanage fcontext&#039;&#039; festgelegte Dateikontextdefinitionen werden jedoch in umgekehrter Reihenfolge zu ihrer Definition ausgewertet&lt;br /&gt;
der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu&lt;br /&gt;
* der Änderung des Dateikontexts mit &#039;&#039;chcon&#039;&#039; finden Sie im Abschnitt „Temporäre Änderungen&lt;br /&gt;
chcon“&lt;br /&gt;
* das Ändern und Hinzufügen einer Dateikontextdefinition mit &#039;&#039;semanage fcontext&#039;&#039; finden Sie im Abschnitt „ Dauerhafte Änderungen&lt;br /&gt;
semanage fcontext“&lt;br /&gt;
* das Ändern und Hinzufügen einer Dateikontextdefinition durch eine Systemrichtlinienoperation, siehe Abschnitt „&#039;&#039;Pflege von SELinux-Labels&#039;&#039;“ oder Abschnitt „&#039;&#039;Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen&#039;&#039;“&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung&amp;diff=163400</id>
		<title>Linux/SELinux/11 Fehlerbehebung</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung&amp;diff=163400"/>
		<updated>2026-03-29T14:39:24Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: /* Eigene Policy-Module mit audit2allow */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;SELinux/11 Fehlerbehebung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
* Vorgänge, bei einer Zugriffsverweigerung&lt;br /&gt;
* Häufige Ursachen für Probleme&lt;br /&gt;
* Informationen zur korrekten Kennzeichnung finden&lt;br /&gt;
* Analyse von SELinux-Verweigerungen&lt;br /&gt;
* Erstellen benutzerdefinierter Policy-Module&lt;br /&gt;
&lt;br /&gt;
; Vorgänge, bei einer Zugriffsverweigerung&lt;br /&gt;
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert&lt;br /&gt;
* Dieser Cache wird als Access Vector Cache (AVC) bezeichnet&lt;br /&gt;
* Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert&lt;br /&gt;
* Diese Verweigerungen werden auch als „[[AVC-Verweigerungen]]“ bezeichnet&lt;br /&gt;
&lt;br /&gt;
; Protokolle&lt;br /&gt;
... und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! | Daemon&lt;br /&gt;
! | Protokollort&lt;br /&gt;
|-&lt;br /&gt;
|| auditd aktiv&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| auditd aus; rsyslogd ein&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| setroubleshootd, rsyslogd und auditd ein&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
* Besser lesbare Verweigerungsmeldungen werden ebenfalls an &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039; gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das X Window System ausführen, die Pakete [[setroubleshoot]] und [[setroubleshoot-server]] installiert haben und die Daemons &#039;&#039;&#039;[[setroubleshootd]]&#039;&#039;&#039; und &#039;&#039;&#039;[[auditd]&#039;&#039;&#039; laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bild1.png|top]]&lt;br /&gt;
&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Anzeigen&#039;&#039;&#039; zeigt eine detaillierte Analyse der Gründe für die Zugriffsverweigerung durch SELinux sowie eine mögliche Lösung zur Gewährung des Zugriffs an&lt;br /&gt;
* Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird&lt;br /&gt;
&lt;br /&gt;
Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:&lt;br /&gt;
 Zugriff verweigert&lt;br /&gt;
&lt;br /&gt;
Sie haben keine Berechtigung, auf ‚&#039;Dateiname‘&#039; auf diesem Server zuzugreifen&lt;br /&gt;
&lt;br /&gt;
In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien &lt;br /&gt;
* &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
auf Fehlermeldungen wie &lt;br /&gt;
* &#039;&#039;&#039;„SELinux is preventing“&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;„denied“&#039;&#039;&#039;&lt;br /&gt;
überprüfen&lt;br /&gt;
&lt;br /&gt;
Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:&lt;br /&gt;
 sudo grep „SELinux is preventing“ /var/log/messages&lt;br /&gt;
 sudo grep „denied“ /var/log/audit/audit.log&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
[[Linux/SELinux/11 Fehlerbehebung/Analyse]]&lt;br /&gt;
&lt;br /&gt;
== Lösungen ==&lt;br /&gt;
[[Linux/SELinux/11 Fehlerbehebung/Lösungen]]&lt;br /&gt;
&lt;br /&gt;
== Eigene Policy-Module mit audit2allow ==&lt;br /&gt;
&lt;br /&gt;
;Prinzip&lt;br /&gt;
Wenn Standardlösungen (wie Booleans oder Dateikontexte) nicht ausreichen, analysiert &#039;&#039;audit2allow&#039;&#039; die Audit-Protokolle und generiert automatisch Regeln, um zuvor blockierte Aktionen systemweit zuzulassen.&lt;br /&gt;
&lt;br /&gt;
; Installation&lt;br /&gt;
Unter Debian ist das Tool Teil der Python-Utilities für SELinux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo apt install policycoreutils-python-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Analyse&lt;br /&gt;
Prüfen Sie zunächst die menschenlesbare Erklärung der Blockaden, um die Ursache zu verstehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo audit2allow -w -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Modul generieren&lt;br /&gt;
Filtern Sie die Logs gezielt nach dem betroffenen Dienst (z. B. &#039;&#039;nginx&#039;&#039;), um keine unerwünschten Rechte freizugeben, und erstellen Sie das Modul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo grep mein_prozess /var/log/audit/audit.log | audit2allow -M mein_modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies erzeugt eine Quellcode-Datei (&#039;&#039;.te&#039;&#039;) und das kompilierte Policy-Paket (&#039;&#039;.pp&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
; Modul aktivieren&lt;br /&gt;
Laden Sie das kompilierte Paket abschließend in den Kernel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semodule -i mein_modul.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Initiale Einrichtung&lt;br /&gt;
Nach einer frischen SELinux-Installation und der Deinstallation von AppArmor wird das System oft mit unklaren AVC-Meldungen geflutet. Um das System initial wieder nutzbar zu machen, können Sie alle bisherigen Blockaden pauschal erfassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo grep &amp;quot;AVC&amp;quot; /var/log/audit/audit.log | audit2allow -M my_custom_policy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Laden Sie auch dieses Modul anschließend mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semodule -i my_custom_policy.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
;Hinweis&lt;br /&gt;
Diese &amp;quot;Holzhammer-Methode&amp;quot; eignet sich nur für die allererste Stabilisierung des Systems. Im späteren Betrieb sollten Sie Ausnahmen immer strikt nach Diensten getrennt erstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;{{BASEPAGENAME}}&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}&lt;br /&gt;
----&lt;br /&gt;
# Dateien in &#039;&#039;&#039;/etc/selinux/targeted/contexts/files/&#039;&#039;&#039; &lt;br /&gt;
#* definieren Kontexte für Dateien und Verzeichnisse&lt;br /&gt;
#* Dateien in diesem Verzeichnis werden von den Dienstprogrammen &#039;&#039;&#039;restorecon&#039;&#039;&#039; und &#039;&#039;&#039;setfiles&#039;&#039;&#039; gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen&lt;br /&gt;
# Der Befehl &#039;&#039;&#039;semanage port -a&#039;&#039;&#039; fügt einen Eintrag zur Datei &#039;&#039;&#039;/etc/selinux/targeted/modules/active/ports.local&#039;&#039;&#039; hinzu&lt;br /&gt;
#* Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/auditd/ausearch.8.en.html ausearch(8)]&lt;br /&gt;
# [https://manpages.debian.org/trixie/auditd/aureport.8.en.html aureport(8)]&lt;br /&gt;
# sealert(8)&lt;br /&gt;
# [https://manpages.debian.org/trixie/policycoreutils-python-utils/audit2allow.1.en.html audit2allow(1)]&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{DEFAULTSORT:new}}&lt;br /&gt;
{{DISPLAYTITLE:new}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung&amp;diff=163398</id>
		<title>Linux/SELinux/11 Fehlerbehebung</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/11_Fehlerbehebung&amp;diff=163398"/>
		<updated>2026-03-29T14:38:46Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;SELinux/11 Fehlerbehebung&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Beschreibung ==&lt;br /&gt;
* Vorgänge, bei einer Zugriffsverweigerung&lt;br /&gt;
* Häufige Ursachen für Probleme&lt;br /&gt;
* Informationen zur korrekten Kennzeichnung finden&lt;br /&gt;
* Analyse von SELinux-Verweigerungen&lt;br /&gt;
* Erstellen benutzerdefinierter Policy-Module&lt;br /&gt;
&lt;br /&gt;
; Vorgänge, bei einer Zugriffsverweigerung&lt;br /&gt;
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert&lt;br /&gt;
* Dieser Cache wird als Access Vector Cache (AVC) bezeichnet&lt;br /&gt;
* Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert&lt;br /&gt;
* Diese Verweigerungen werden auch als „[[AVC-Verweigerungen]]“ bezeichnet&lt;br /&gt;
&lt;br /&gt;
; Protokolle&lt;br /&gt;
... und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! | Daemon&lt;br /&gt;
! | Protokollort&lt;br /&gt;
|-&lt;br /&gt;
|| auditd aktiv&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| auditd aus; rsyslogd ein&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|| setroubleshootd, rsyslogd und auditd ein&lt;br /&gt;
|| &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
* Besser lesbare Verweigerungsmeldungen werden ebenfalls an &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039; gesendet&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie das X Window System ausführen, die Pakete [[setroubleshoot]] und [[setroubleshoot-server]] installiert haben und die Daemons &#039;&#039;&#039;[[setroubleshootd]]&#039;&#039;&#039; und &#039;&#039;&#039;[[auditd]&#039;&#039;&#039; laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:&lt;br /&gt;
&lt;br /&gt;
[[Image:Bild1.png|top]]&lt;br /&gt;
&lt;br /&gt;
Ein Klick auf &#039;&#039;&#039;Anzeigen&#039;&#039;&#039; zeigt eine detaillierte Analyse der Gründe für die Zugriffsverweigerung durch SELinux sowie eine mögliche Lösung zur Gewährung des Zugriffs an&lt;br /&gt;
* Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird&lt;br /&gt;
&lt;br /&gt;
Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:&lt;br /&gt;
 Zugriff verweigert&lt;br /&gt;
&lt;br /&gt;
Sie haben keine Berechtigung, auf ‚&#039;Dateiname‘&#039; auf diesem Server zuzugreifen&lt;br /&gt;
&lt;br /&gt;
In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien &lt;br /&gt;
* &#039;&#039;&#039;/var/log/messages&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;/var/log/audit/audit.log&#039;&#039;&#039;&lt;br /&gt;
auf Fehlermeldungen wie &lt;br /&gt;
* &#039;&#039;&#039;„SELinux is preventing“&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;„denied“&#039;&#039;&#039;&lt;br /&gt;
überprüfen&lt;br /&gt;
&lt;br /&gt;
Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:&lt;br /&gt;
 sudo grep „SELinux is preventing“ /var/log/messages&lt;br /&gt;
 sudo grep „denied“ /var/log/audit/audit.log&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
[[Linux/SELinux/11 Fehlerbehebung/Analyse]]&lt;br /&gt;
&lt;br /&gt;
== Lösungen ==&lt;br /&gt;
[[Linux/SELinux/11 Fehlerbehebung/Lösungen]]&lt;br /&gt;
&lt;br /&gt;
== Eigene Policy-Module mit audit2allow ==&lt;br /&gt;
&lt;br /&gt;
;Prinzip&lt;br /&gt;
Wenn Standardlösungen (wie Booleans oder Dateikontexte) nicht ausreichen, analysiert &#039;&#039;audit2allow&#039;&#039; die Audit-Protokolle und generiert automatisch Regeln, um zuvor blockierte Aktionen systemweit zuzulassen.&lt;br /&gt;
&lt;br /&gt;
; Installation&lt;br /&gt;
Unter Debian ist das Tool Teil der Python-Utilities für SELinux:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo apt install policycoreutils-python-utils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Analyse&lt;br /&gt;
Prüfen Sie zunächst die menschenlesbare Erklärung der Blockaden, um die Ursache zu verstehen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo audit2allow -w -a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Modul generieren&lt;br /&gt;
Filtern Sie die Logs gezielt nach dem betroffenen Dienst (z. B. &#039;&#039;nginx&#039;&#039;), um keine unerwünschten Rechte freizugeben, und erstellen Sie das Modul:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo grep mein_prozess /var/log/audit/audit.log | audit2allow -M mein_modul&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies erzeugt eine Quellcode-Datei (&#039;&#039;.te&#039;&#039;) und das kompilierte Policy-Paket (&#039;&#039;.pp&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
; Modul aktivieren&lt;br /&gt;
Laden Sie das kompilierte Paket abschließend in den Kernel:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semodule -i mein_modul.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Initiale Einrichtung&lt;br /&gt;
Nach einer frischen SELinux-Installation und der Deinstallation von AppArmor wird das System oft mit unklaren AVC-Meldungen geflutet. Um das System initial wieder nutzbar zu machen, können Sie alle bisherigen Blockaden pauschal erfassen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo grep &amp;quot;AVC&amp;quot; /var/log/audit/audit.log | audit2allow -M my_custom_policy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Laden Sie auch dieses Modul anschließend mit &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semodule -i my_custom_policy.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hinweis:&#039;&#039;&#039; Diese &amp;quot;Holzhammer-Methode&amp;quot; eignet sich nur für die allererste Stabilisierung des Systems. Im späteren Betrieb sollten Sie Ausnahmen immer strikt nach Diensten getrennt erstellen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anhang ==&lt;br /&gt;
=== Siehe auch ===&lt;br /&gt;
&amp;lt;div style=&amp;quot;column-count:2&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;categorytree hideroot=on mode=&amp;quot;pages&amp;quot;&amp;gt;{{BASEPAGENAME}}&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
{{Special:PrefixIndex/{{BASEPAGENAME}}/}}&lt;br /&gt;
----&lt;br /&gt;
# Dateien in &#039;&#039;&#039;/etc/selinux/targeted/contexts/files/&#039;&#039;&#039; &lt;br /&gt;
#* definieren Kontexte für Dateien und Verzeichnisse&lt;br /&gt;
#* Dateien in diesem Verzeichnis werden von den Dienstprogrammen &#039;&#039;&#039;restorecon&#039;&#039;&#039; und &#039;&#039;&#039;setfiles&#039;&#039;&#039; gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen&lt;br /&gt;
# Der Befehl &#039;&#039;&#039;semanage port -a&#039;&#039;&#039; fügt einen Eintrag zur Datei &#039;&#039;&#039;/etc/selinux/targeted/modules/active/ports.local&#039;&#039;&#039; hinzu&lt;br /&gt;
#* Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann&lt;br /&gt;
&lt;br /&gt;
=== Dokumentation ===&lt;br /&gt;
; Man-Page &lt;br /&gt;
# [https://manpages.debian.org/stable/auditd/ausearch.8.en.html ausearch(8)]&lt;br /&gt;
# [https://manpages.debian.org/trixie/auditd/aureport.8.en.html aureport(8)]&lt;br /&gt;
# sealert(8)&lt;br /&gt;
# [https://manpages.debian.org/trixie/policycoreutils-python-utils/audit2allow.1.en.html audit2allow(1)]&lt;br /&gt;
&lt;br /&gt;
=== Links ===&lt;br /&gt;
==== Projekt ====&lt;br /&gt;
==== Weblinks ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
{{DEFAULTSORT:new}}&lt;br /&gt;
{{DISPLAYTITLE:new}}&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/07_Kontexte&amp;diff=163389</id>
		<title>Linux/SELinux/04/07 Kontexte</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/07_Kontexte&amp;diff=163389"/>
		<updated>2026-03-29T14:26:31Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Sicherheitskontext&#039;&#039;&#039; - Struktur und Auslesen des Sicherheitskontexts&lt;br /&gt;
&lt;br /&gt;
= Debian =&lt;br /&gt;
== Kontext und Label ==&lt;br /&gt;
Im SELinux-System (Security-Enhanced Linux) wird der Zugriff auf Ressourcen nicht auf Grundlage der Eigentümerrechte gesteuert (wie im klassischen DAC-Modell), sondern auf Grundlage von &#039;&#039;&#039;Sicherheitskontexten&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ein Kontext ist ein spezielles Label, das jedem Systemobjekt zugewiesen wird (Dateien, Prozessen, Netzwerkports)&lt;br /&gt;
&lt;br /&gt;
Datei-Labels werden direkt im Dateisystem als &#039;&#039;&#039;erweiterte Dateiattribute (Extended Attributes oder xattr)&#039;&#039;&#039; gespeichert&lt;br /&gt;
* SELinux verwendet dabei das Attribut mit dem Namen security.selinux&lt;br /&gt;
&lt;br /&gt;
Auf das Vorhandensein erweiterter Attribute weist ein Punkt am Ende der Attributanzeige bei Verwendung von ls -l hin&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
sudo ls -l /var/log/apt/&lt;br /&gt;
total 388&lt;br /&gt;
-rw-r--r--. 1 root root 43628 Mar 21 12:52 eipp.log.xz&lt;br /&gt;
-rw-r--r--. 1 root root 54225 Mar 21 12:52 history.log&lt;br /&gt;
-rw-r-. 1 root adm 283440 Mar 21 12:52 term.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kontextzeichenfolge ===&lt;br /&gt;
; Anatomie der Kontextzeichenfolge&lt;br /&gt;
Das vollständige Label eines Sicherheitskontexts besteht aus vier (manchmal fünf) durch Doppelpunkte getrennten Elementen&lt;br /&gt;
&lt;br /&gt;
; Typische Struktur&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line&amp;gt;&lt;br /&gt;
user : role : type : level&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Typen ==&lt;br /&gt;
; Bedeutung des Typs (Type) in der Targeted Policy&lt;br /&gt;
In den meisten modernen Distributionen (RHEL, CentOS, Fedora, Debian) wird standardmäßig die Policy &#039;&#039;&#039;Targeted&#039;&#039;&#039; verwendet&lt;br /&gt;
* In diesem Modell liegt der Schwerpunkt auf &#039;&#039;&#039;Type Enforcement (TE)&#039;&#039;&#039; — der erzwungenen Zuweisung von Typen&lt;br /&gt;
&#039;&#039;&#039;Zur Analyse von Sicherheitslabels (Kontexten) werden Standard-Linux-Werkzeuge mit der zusätzlichen Option&#039;&#039;&#039; -Z &#039;&#039;&#039;verwendet.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Die Option -Z wird von fast allen grundlegenden Befehlen unterstützt&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;cp -Z&#039;&#039; — kopiert eine Datei und weist ihr sofort den korrekten Kontext des Zielverzeichnisses zu (den Standardkontext des Verzeichnisses)&lt;br /&gt;
:* Im Gegensatz dazu bewahrt der Parameter -a den ursprünglichen Kontext der Datei&lt;br /&gt;
* &#039;&#039;mkdir -Z&#039;&#039; — erstellt ein Verzeichnis, das sofort den Standardkontext erhält (ohne dass restorecon ausgeführt werden muss)&lt;br /&gt;
* Außerdem die Anzeigeprogramme: &#039;&#039;ls -Z&#039;&#039; (Dateien), &#039;&#039;ps -Z&#039;&#039; (Prozesse), &#039;&#039;id -Z&#039;&#039; (Benutzer)&lt;br /&gt;
&lt;br /&gt;
=== Kontext von Dateien und Verzeichnissen ===&lt;br /&gt;
Zum Anzeigen des Kontexts von Dateien wird der Befehl ls -Z verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
ls -Z /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ausgabe&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line copy&amp;gt;&lt;br /&gt;
system_u:object_r:var_log_t:s0 README&lt;br /&gt;
system_u:object_r:var_log_t:s0 alternatives.log&lt;br /&gt;
system_u:object_r:httpd_log_t:s0 apache2&lt;br /&gt;
system_u:object_r:apt_var_log_t:s0 apt&lt;br /&gt;
system_u:object_r:auditd_log_t:s0 audit&lt;br /&gt;
system_u:object_r:faillog_t:s0 btmp&lt;br /&gt;
system_u:object_r:var_log_t:s0 cloud-init-output.log&lt;br /&gt;
system_u:object_r:var_log_t:s0 cloud-init.log&lt;br /&gt;
system_u:object_r:var_log_t:s0 dpkg.log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Interpretation der Typen ===&lt;br /&gt;
Bei der Analyse von Kontexten sollte man auf die Suffixe der Typen achten, da diese häufig auf ihren Zweck hinweisen&lt;br /&gt;
{| class=&amp;quot;wikitable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Kontext !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| _t || Allgemeines Suffix für Typen (type)&lt;br /&gt;
|-&lt;br /&gt;
| _exec_t || Typ, der ausführbaren Dateien (Binärdateien) zugewiesen wird&lt;br /&gt;
|-&lt;br /&gt;
| _conf_t || Typ für Konfigurationsdateien&lt;br /&gt;
|-&lt;br /&gt;
| _log_t || Typ für Logdateien&lt;br /&gt;
|-&lt;br /&gt;
| _tmp_t || Typ für temporäre Dateien&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Extended Attributes ==&lt;br /&gt;
; Speicherung auf dem Datenträger&lt;br /&gt;
SELinux-Sicherheitskontexte werden nicht in einer separaten Datenbank oder einem zentralen Journal gespeichert&lt;br /&gt;
* Sie sind ein integraler Bestandteil des Dateisystems und werden zusammen mit den Dateien verschoben, wenn diese kopiert oder verschoben werden (sofern die verwendeten Werkzeuge die Beibehaltung der Attribute unterstützen)&lt;br /&gt;
&lt;br /&gt;
; Begriff Extended Attributes (xattr)&lt;br /&gt;
&#039;&#039;&#039;Erweiterte Attribute (xattr)&#039;&#039;&#039; sind eine Funktion von Dateisystemen (wie Ext4, XFS, Btrfs), die es ermöglichen, einer Datei oder einem Verzeichnis zusätzliche Metadaten im Format „Schlüssel=Wert“ zuzuordnen&lt;br /&gt;
&lt;br /&gt;
Während Standardattribute (Zugriffsrechte, Eigentümer, Zeitstempel) eine feste Struktur haben, ermöglichen erweiterte Attribute die Speicherung beliebiger Daten&lt;br /&gt;
&lt;br /&gt;
Hier speichert SELinux die Kontextzeichenfolge unter dem Schlüssel security.selinux&lt;br /&gt;
&lt;br /&gt;
== Namensräume ==&lt;br /&gt;
; Namensräume (Namespaces)&lt;br /&gt;
Zur Vermeidung von Konflikten und zur Gewährleistung der Sicherheit sind erweiterte Attribute in Namensräume unterteilt&lt;br /&gt;
&lt;br /&gt;
Jeder Namensraum hat eigene Zugriffsregeln&lt;br /&gt;
{| class=&amp;quot;wikitable big options&amp;quot;&lt;br /&gt;
!Namensraum&lt;br /&gt;
!Zweck&lt;br /&gt;
!Zugriff&lt;br /&gt;
|-&lt;br /&gt;
|security&lt;br /&gt;
|Wird von Sicherheitsmodulen verwendet (SELinux, AppArmor, IMA)&lt;br /&gt;
|Der Zugriff ist auf den Kernel und Prozesse mit besonderen Privilegien beschränkt&lt;br /&gt;
|-&lt;br /&gt;
|system&lt;br /&gt;
|Wird vom Kernel zur Speicherung von Systemdaten verwendet, zum Beispiel von Access Control Lists (ACL)&lt;br /&gt;
|In der Regel nur für den Kernel zugänglich&lt;br /&gt;
|-&lt;br /&gt;
|user&lt;br /&gt;
|Ist für Benutzeranwendungen und Dokumente vorgesehen&lt;br /&gt;
|Wird durch die standardmäßigen Zugriffsrechte (DAC) geregelt&lt;br /&gt;
|-&lt;br /&gt;
|trusted&lt;br /&gt;
|Zur Speicherung von Daten, auf die nur Prozesse mit dem Privileg CAP_SYS_ADMIN zugreifen dürfen&lt;br /&gt;
|Für normale Benutzer unsichtbar, selbst wenn sie Eigentümer der Datei sind&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attribute ==&lt;br /&gt;
; Arbeit mit Attributen&lt;br /&gt;
getfattr und setfattr&lt;br /&gt;
&lt;br /&gt;
Obwohl für die Verwaltung von SELinux häufiger spezialisierte Befehle (chcon, semanage) verwendet werden, ermöglichen Low-Level-Werkzeuge aus dem Paket attr, zu sehen, wie diese Daten aus Sicht des Dateisystems aussehen&lt;br /&gt;
&lt;br /&gt;
=== Attribute anzeigen ===&lt;br /&gt;
; Attribute anzeigen (getfattr)&lt;br /&gt;
Zum Lesen eines Attributs einer bestimmten Datei wird der Befehl getfattr verwendet&lt;br /&gt;
* Um den SELinux-Kontext anzuzeigen, muss der vollständige Schlüsselname im Namensraum security angegeben werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
getfattr -n security.selinux /etc/passwd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um alle vorhandenen Attribute einer Datei anzuzeigen, wird ein Befehl der Form &#039;&#039;getfattr -m . -d /etc/passwd&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
=== Attribute setzen ===&lt;br /&gt;
; Attribute setzen (setfattr)&lt;br /&gt;
Der Befehl setfattr ermöglicht es, den Kontextwert manuell zu ändern&lt;br /&gt;
* Diese Aktion erfordert Superuser-Rechte und wird in der Regel nur zu Debugging-Zwecken oder für ein tieferes Systemverständnis ausgeführt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
touch testfile&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;unconfined_u:object_r:user_home_t:s0&amp;quot; testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei der Verwendung von setfattr prüft das System die Korrektheit des eingegebenen Kontexts nicht so streng, wie es die SELinux-Werkzeuge tun&lt;br /&gt;
* Ein Fehler in der Zeichenfolge kann dazu führen, dass die Datei für Zielprozesse unzugänglich wird.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Anwendung ==&lt;br /&gt;
=== Modus prüfen ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
getenforce&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der Befehl&#039;&#039; Enforcing &#039;&#039;zurückgibt, schalten Sie ihn vorübergehend mit dem Befehl&#039;&#039; setenforce 0 &#039;&#039;auf&#039;&#039; Permissive &#039;&#039;um.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Blockierende Situation ===&lt;br /&gt;
; Erzeugen einer blockierenden Situation&lt;br /&gt;
Sie haben eine Datei erstellt, ihr jedoch versehentlich (oder absichtlich) einen Kontext zugewiesen, der weder für einen normalen Benutzer noch für das aktuelle Verzeichnis vorgesehen ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
touch /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ls -Z /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:object_r:user_tmp_t:s0 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie an der Konsolenausgabe zu sehen ist, hat die Datei den Typ &#039;&#039;&#039;user_tmp_t&#039;&#039;&#039;, der typisch für Dateien im Verzeichnis /tmp ist&lt;br /&gt;
* Viele Programme haben Leserechte auf dieses Verzeichnis&lt;br /&gt;
* Weisen wir der Datei nun den &#039;&#039;&#039;Typ shadow_t&#039;&#039;&#039; zu&lt;br /&gt;
&lt;br /&gt;
Unter normalen Umständen haben nur Passwortdateien diesen Typ, und normalen Prozessen sowie Benutzern ist die Interaktion mit solchen Dateien untersagt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:shadow_t:s0&amp;quot; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Setzen von Attributen kann auch das Werkzeug chcon verwendet werden; in diesem Fall sieht der Befehl wie folgt aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
chcon -t shadow_t /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über das Werkzeug chcon sprechen wir etwas später noch genauer besprochen&lt;br /&gt;
&lt;br /&gt;
Prüfung, ob die Attribute korrekt gesetzt wurden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
sudo ls -Z /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:object_r:shadow_t:s0 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Schließlich muss nun ein Verstoß provoziert werden; dazu versuchen wir, die Datei zu lesen oder zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; &amp;gt; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun betrachten wir die AVC-Ereignisse mit dem Werkzeug ausearch&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und wir werden nichts sehen, denn standardmäßig gelangt ein Benutzer, der sich per SSH oder über die Konsole anmeldet, in den Standardrichtlinien (Targeted Policy) in die Domäne &#039;&#039;&#039;unconfined_t&#039;&#039;&#039; (uneingeschränkt)&lt;br /&gt;
&lt;br /&gt;
Das kann mit dem Befehl id -Z geprüft werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
sudo id -Z&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prozessen in der Domäne unconfined ist praktisch alles erlaubt&lt;br /&gt;
&lt;br /&gt;
SELinux sieht, dass ein „uneingeschränkter“ Prozess eine Datei liest, und auch wenn die Datei einen ungewöhnlichen Typ hat (wie &#039;&#039;&#039;shadow_t&#039;&#039;&#039;), betrachtet es dies für diesen konkreten Prozess nicht als Richtlinienverstoß&lt;br /&gt;
&lt;br /&gt;
Um die Funktionsweise von SELinux zu prüfen, muss das Lesen der Datei mit dem Kontext eines anderen Prozesses gestartet werden, zum Beispiel &#039;&#039;&#039; httpd_t&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Da der Typ &#039;&#039;&#039;httpd_t&#039;&#039;&#039; keinen Zugriff auf ausführbare Dateien des Typs &#039;&#039;&#039;bin_t&#039;&#039;&#039; hat (dieser Typ ist für cat gesetzt), erstellen wir eine Kopie von cat und weisen ihr den Typ &#039;&#039;&#039;httpd_t&#039;&#039;&#039; zu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
cp /usr/bin/cat /tmp/fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:httpd_t:s0&amp;quot; /tmp/fake_httpd sudo oder chcon -t httpd_t /tmp/fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfung&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy&amp;gt;&lt;br /&gt;
systemd-run -p SELinuxContext=system_u:system_r:httpd_t:s0 /tmp/fake_httpd /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
In SELinuxContext wird der Kontext für den Start angegeben&lt;br /&gt;
* Anschließend wird cat mit dem Sicherheitstyp httpd_t gestartet und versucht, /tmp/testfile zu lesen&lt;br /&gt;
&lt;br /&gt;
Wir betrachten die AVC-Einträge&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent -c fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1774103099.579:33834): avc: denied { getattr } for pid=38589 comm=&amp;quot;fake_httpd&amp;quot; path=&amp;quot;/tmp/testfile&amp;quot; dev=&amp;quot;tmpfs&amp;quot; ino=117 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:shadow_t:s0 tclass=file permissive=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* { getattr } zeigt, welche konkrete Aktion das Subjekt auszuführen versucht hat&lt;br /&gt;
* tcontext zeigt den Kontext des Objekts, auf das ein unbefugter Zugriff versucht wurde&lt;br /&gt;
* scontext zeigt den Kontext des Subjekts, das versucht hat, auf das Objekt mit tcontext zuzugreifen&lt;br /&gt;
* path zeigt den Pfad zur Datei&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Wie im Log zu sehen ist, wurde der Zugriff für fake_httpd bereits beim Lesen der Dateiattribute verweigert!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Außerdem ist zu erkennen, dass es für SELinux keine Rolle spielt, unter welchem Benutzer der Prozess gestartet wurde, der gegen die Regeln verstoßen wollte&lt;br /&gt;
* Auch Zugriffsrechte wie chmod 777 beeinflussen das Ergebnis nicht&lt;br /&gt;
&lt;br /&gt;
Versuchen wir dasselbe mit dem Typ &#039;&#039;&#039;user_home_t&#039;&#039;&#039;&lt;br /&gt;
* Dieser Typ wird für Dateien im Home-Verzeichnis eines Benutzers verwendet&lt;br /&gt;
* Der Prozess httpd darf keine Leserechte auf Dateien im Home-Verzeichnis eines Benutzers haben&lt;br /&gt;
&lt;br /&gt;
Zur Veranschaulichung geben wir der Datei zusätzlich Vollzugriff für alle&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; line copy&amp;gt;&lt;br /&gt;
setfattr -n security.selinux -v &amp;quot;system_u:object_r:user_home_t:s0&amp;quot; /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
chmod 777 /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
systemd-run -p SELinuxContext=system_u:system_r:httpd_t:s0 /tmp/fake_httpd /tmp/testfile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
ausearch -m AVC -ts recent -c fake_httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und erneut erscheint im Log eine Meldung über einen Verstoß&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
type=AVC msg=audit(1774103685.752:33957): avc: denied { getattr } for pid=38729 comm=&amp;quot;fake_httpd&amp;quot; path=&amp;quot;/tmp/testfile&amp;quot; dev=&amp;quot;tmpfs&amp;quot; ino=117 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:user_home_t:s0 tclass=file permissive=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Wenn dieselbe verbotene Aktion mehrmals hintereinander ausgeführt wird, erscheint sie nicht jedes Mal im Log, um Spam zu vermeiden&lt;br /&gt;
&lt;br /&gt;
Um den SELinux-Cache zu leeren, kann ein Neustart des Betriebsmodus verwendet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy&amp;gt;&lt;br /&gt;
 setenforce 1 &amp;amp;&amp;amp; setenforce 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change context (chcon) ===&lt;br /&gt;
SELinux-Kontext einer Datei oder eines Verzeichnisses ändern&lt;br /&gt;
&lt;br /&gt;
; Funktionen&lt;br /&gt;
* vollständigen Kontext auf einmal setzen&lt;br /&gt;
* einzelne Kontextfelder (etwa den Typ) ändern&lt;br /&gt;
* Kontext einer anderen Datei übernehmen (--reference)&lt;br /&gt;
&lt;br /&gt;
Zuvor wurden setfattr und chcon verwendet&lt;br /&gt;
* Wie man sehen kann, ist chcon komfortabler, da sich damit einzelne Felder gezielt ändern lassen&lt;br /&gt;
* Außerdem wird chcon als primäres Werkzeug für die Arbeit mit SELinux-Kontexten empfohlen, während setfattr ein Low-Level-Werkzeug ist, das mit Nicht-SELinux-xattr arbeitet&lt;br /&gt;
&lt;br /&gt;
Die wichtigste Einschränkung von chcon (genauso wie von setfattr) besteht darin, dass die Änderungen &#039;&#039;&#039;nicht dauerhaft&#039;&#039;&#039; sind&lt;br /&gt;
* Sie können nach restorecon oder nach einem vollständigen Relabeling des Dateisystems verloren gehen&lt;br /&gt;
&lt;br /&gt;
Daher wird dieses Werkzeug hauptsächlich verwendet für&lt;br /&gt;
* Laborübungen&lt;br /&gt;
* schnelle Diagnose&lt;br /&gt;
* temporäre Überprüfung von Richtlinien&lt;br /&gt;
&lt;br /&gt;
Die dauerhafte Konfiguration von Labels erfolgt mit dem Werkzeug semanage und einem anschließenden Aufruf von restorecon&lt;br /&gt;
* Näheres zum Werkzeug semanage folgt in den nächsten Lektionen&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Zur Demonstration erstellen wir die erforderlichen Dateien und Verzeichnisse und prüfen den Kontext des Verzeichnisses sowie der Dateien&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /tmp/web_content/images&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
cd /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch test.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch images/image.png&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Zd /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1 /tmp/web_content/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diesem Verzeichnis wurde der Typ &#039;&#039;&#039;user_tmp_t&#039;&#039;&#039; vererbt, ebenso den darin enthaltenen Dateien&lt;br /&gt;
&lt;br /&gt;
Versuchen wir, den vollständigen Kontext manuell zu setzen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon system_u:object_r:httpd_sys_content_t:s0 manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Methode wird nur selten verwendet, da für SELinux in der Regel das Feld type am wichtigsten ist&lt;br /&gt;
&lt;br /&gt;
Um das Feld type zu ändern, wird der Parameter -t verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t shadow_t manual&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Ändern der Felder user und role werden entsprechend die Optionen &#039;&#039;&#039;-u&#039;&#039;&#039; und &#039;&#039;&#039;-r&#039;&#039;&#039; verwendet&lt;br /&gt;
&lt;br /&gt;
Der Parameter -R erlaubt die rekursive Verarbeitung von Verzeichnissen&lt;br /&gt;
&lt;br /&gt;
Weisen wir dem gesamten Verzeichnis web_content den Typ httpd_sys_content_t zu und verwenden dabei den Parameter &#039;&#039;&#039;-v&#039;&#039;&#039;, um Details anzuzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -v -t httpd_sys_content_t /tmp/web_content&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um den Kontext von einem bereits korrekt gelabelten Objekt zu kopieren, kann die Option &#039;&#039;&#039;--reference=RFILE&#039;&#039;&#039; verwendet werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /tmp/ref&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R --reference=/tmp/ref /tmp/web_content&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z -1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Parameter für den Umgang mit Symlinks&lt;br /&gt;
{| class=&amp;quot;wikitable sortable options gnu big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! GNU  !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| || --dereference || (standardmäßig verwendet) wirkt nicht auf den symbolischen Link selbst, sondern auf das Objekt, auf das er verweist&lt;br /&gt;
|-&lt;br /&gt;
| -h || --no-dereference || ändert den symbolischen Link selbst und nicht das Zielobjekt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Woher kommt der „richtige“ Kontext (File Contexts) ==&lt;br /&gt;
In der ersten Phase wurden die tatsächlichen Dateilabels betrachtet: was in security.selinux gespeichert ist, wie dies in ls -Z aussieht und warum sich cp und mv unterschiedlich verhalten&lt;br /&gt;
&lt;br /&gt;
In dieser Lektion kommt die nächste Modellebene hinzu: &#039;&#039;&#039;SELinux speichert nicht nur das aktuelle Label eines Objekts, sondern auch die Vorstellung davon, welcher Kontext einem Pfad gemäß den Regeln der Policy zugewiesen sein soll&#039;&#039;&#039;&lt;br /&gt;
Für das Verständnis der Logik der SELinux-Labeling-Regeln müssen zwei Begriffe strikt voneinander getrennt werden&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Tatsächliches Label (Security Context).&#039;&#039;&#039; Das sind die Daten, die physisch in den erweiterten Attributen des Dateisystems (extended attributes — xattr) auf dem Datenträger gespeichert sind&lt;br /&gt;
#* Genau dieses Label sehen der Linux-Kernel und das SELinux-Modul beim Zugriff auf eine Datei und verwenden es für die Zugriffsentscheidung&lt;br /&gt;
# &#039;&#039;&#039;Erwarteter Kontext (File Context).&#039;&#039;&#039; Das ist eine Regel, die in der &#039;&#039;&#039;SELinux-Policy-Datenbank&#039;&#039;&#039; definiert ist&lt;br /&gt;
#* Sie legt fest, welches Label einer Datei oder einem Verzeichnis an einem bestimmten Pfad &#039;&#039;zugewiesen werden soll&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wo SELinux Informationen über erwartete Kontexte speichert ===&lt;br /&gt;
In der Default-Policy befinden sich die Änderungen im Zusammenhang mit File Contexts im Verzeichnis&lt;br /&gt;
 /etc/selinux/default/contexts/files/&lt;br /&gt;
&lt;br /&gt;
Die aktuelle Policy kann mit dem Befehl sestatus angezeigt werden&lt;br /&gt;
&lt;br /&gt;
 # sestatus&lt;br /&gt;
 ..&lt;br /&gt;
 SELinux root directory:         /etc/selinux&lt;br /&gt;
 Loaded policy name:             default&lt;br /&gt;
 ..&lt;br /&gt;
&lt;br /&gt;
==== Struktur der File-Context-Dateien ====&lt;br /&gt;
* file_contexts — Basistabelle der File Contexts der aktiven Policy&lt;br /&gt;
* file_contexts.local — lokale administrative Ergänzungen&lt;br /&gt;
* file_contexts.homedirs — separate Einstellungen für Home-Verzeichnisse&lt;br /&gt;
* .subs und .subs_dist — Dateien für Pfadsubstitutionen&lt;br /&gt;
&lt;br /&gt;
Um zu verstehen, wie das System Pfade und Labels einander zuordnet, öffnen wir die Datei /etc/selinux/default/contexts/file/file_contexts&lt;br /&gt;
 head /etc/selinux/default/contexts/files/file_contexts&lt;br /&gt;
&lt;br /&gt;
; Ausgabe&lt;br /&gt;
 /.*                               system_u:object_r:default_t:s0&lt;br /&gt;
 /a?quota\.(user|group)    --      system_u:object_r:quota_db_t:s0&lt;br /&gt;
 /sys(/.*)?                        system_u:object_r:sysfs_t:s0&lt;br /&gt;
 /xen(/.*)?                        system_u:object_r:xen_image_t:s0&lt;br /&gt;
 /mnt(/[^/]*)   			      -l      system_u:object_r:mnt_t:s0&lt;br /&gt;
 /mnt(/[^/]*)?   		        -d      system_u:object_r:mnt_t:s0&lt;br /&gt;
 /dev/.*                           system_u:object_r:device_t:s0&lt;br /&gt;
 /etc/.*                           system_u:object_r:etc_t:s0&lt;br /&gt;
 /opt/.*                           system_u:object_r:usr_t:s0&lt;br /&gt;
 /run/.* 						                &amp;lt;&amp;lt;none&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jede Zeile in dieser Datei stellt eine feste Anweisung für SELinux dar und besteht aus zwei oder drei Spalten&lt;br /&gt;
# &#039;&#039;&#039;Regulärer Ausdruck (Regular Expression).&#039;&#039;&#039; Die erste Spalte beschreibt den Pfad&lt;br /&gt;
#* SELinux verwendet reguläre Ausdrücke im PCRE*-Format&lt;br /&gt;
#* Beispielsweise bedeutet der Ausdruck /var/www(/.*)?: sowohl das Verzeichnis /var/www selbst als auch absolut jede Datei oder jedes Unterverzeichnis darin&lt;br /&gt;
#* Ausführlicher über reguläre Ausdrücke sprechen wir in den nächsten Lektionen&lt;br /&gt;
# &#039;&#039;&#039;Objekttyp (optional).&#039;&#039;&#039; Die zweite Spalte kann präzisieren, für welchen Typ von Dateisystemobjekten die Regel gilt&lt;br /&gt;
#* -d — nur auf Verzeichnisse anwenden&lt;br /&gt;
#* -- — nur auf reguläre Dateien anwenden&lt;br /&gt;
#* &#039;&#039;Falls die Spalte fehlt, gilt die Regel für alle Objekte am angegebenen Pfad.&#039;&#039;&lt;br /&gt;
# &#039;&#039;&#039;Erwarteter Kontext (Security Context).&#039;&#039;&#039; Die letzte Spalte enthält das Referenzlabel, das dem Objekt zugewiesen werden soll&lt;br /&gt;
#* Das wichtigste Element hierbei ist &#039;&#039;&#039;Type&#039;&#039;&#039; (zum Beispiel httpd_sys_content_t), der die Zugriffsdomänen bestimmt&lt;br /&gt;
&lt;br /&gt;
(* PCRE - Perl-compatible regular expression)&lt;br /&gt;
&lt;br /&gt;
Bei der Initialisierung des Dateisystems oder beim erzwungenen Zurücksetzen der Labels (Relabeling) liest der Kernel diese Datei Zeile für Zeile von oben nach unten&lt;br /&gt;
* Wenn das Dienstprogramm eine Übereinstimmung zwischen dem Dateipfad und dem regulären Ausdruck findet, weist es dem Objekt den entsprechenden Kontext aus der dritten Spalte zu&lt;br /&gt;
&lt;br /&gt;
== Struktur von File-Context-Regeln und ihre Prioritäten ==&lt;br /&gt;
Im vorherigen Schritt wurde die Quelle der Dateikontexte analysiert — die Datenbank file_contexts&lt;br /&gt;
* In dieser Lektion gehen wir tiefer in die Funktionsweise dieser Datenbank: wie das System die Zuordnungstabelle path -&amp;gt; label genau liest und wie es entscheidet, welcher Kontext zugewiesen wird, wenn mehrere Regeln auf denselben Pfad passen&lt;br /&gt;
&lt;br /&gt;
=== Format einer File-Context-Regel ===&lt;br /&gt;
Jeder Eintrag in file_contexts, file_contexts.local und file_contexts.homedirs hat dieselbe Grundform&lt;br /&gt;
 pathname [file_type] context&lt;br /&gt;
&lt;br /&gt;
* pathname — vollständiger Pfad oder regulärer PCRE-Ausdruck, anhand dessen SELinux nach Übereinstimmungen sucht&lt;br /&gt;
* file_type — optionale Einschränkung auf einen Objekttyp&lt;br /&gt;
* context — der Kontext, der dem Objekt zugewiesen werden soll&lt;br /&gt;
&lt;br /&gt;
==== pathname ====&lt;br /&gt;
Betrachten wir ein Beispiel für eine Regel&lt;br /&gt;
 /var/www(/.*)?    system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&lt;br /&gt;
* Die Regel deckt den gesamten Teilbaum /var/www ab, also das Verzeichnis selbst und alle darin enthaltenen Objekte&lt;br /&gt;
&lt;br /&gt;
==== file_type ====&lt;br /&gt;
Die optionale zweite Spalte schränkt die Regel auf einen bestimmten Objekttyp ein&lt;br /&gt;
&lt;br /&gt;
In File Contexts werden folgende Bezeichnungen verwendet&lt;br /&gt;
{| class=&amp;quot;wikitable options big col1center&amp;quot;&lt;br /&gt;
! Wert !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| d&lt;br /&gt;
|Verzeichnis&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|reguläre Datei&lt;br /&gt;
|-&lt;br /&gt;
| l&lt;br /&gt;
|symbolischer Link&lt;br /&gt;
|-&lt;br /&gt;
| s&lt;br /&gt;
|Socket&lt;br /&gt;
|-&lt;br /&gt;
| p&lt;br /&gt;
|Named Pipe&lt;br /&gt;
|-&lt;br /&gt;
| c&lt;br /&gt;
|Zeichengerätedatei&lt;br /&gt;
|-&lt;br /&gt;
| b&lt;br /&gt;
|Blockgerätedatei&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== context ====&lt;br /&gt;
Die letzte Spalte enthält genau den &#039;&#039;&#039;erwarteten Security Context&#039;&#039;&#039;, der für einen übereinstimmenden Pfad zurückgegeben werden soll&lt;br /&gt;
* Im Normalfall ist das ein vollständiges Label im Format user:role:type:range&lt;br /&gt;
&lt;br /&gt;
Zulässig ist auch der spezielle Wert &amp;lt;&amp;lt;none&amp;gt;&amp;gt;&lt;br /&gt;
* Er bedeutet, dass beim Relabeling für den übereinstimmenden Pfad kein Kontext gesetzt werden soll und dass ein Lookup kein Ergebnis zurückliefert&lt;br /&gt;
&lt;br /&gt;
=== Prioritäten der Regeln ===&lt;br /&gt;
&lt;br /&gt;
==== Basis- und modulare Policy-Definitionen ====&lt;br /&gt;
Um Konflikte zu vermeiden, verwendet der SELinux-Parser ein striktes Prioritätssystem&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Eine exakte Übereinstimmung hat die höchste Priorität.&#039;&#039;&#039; Eine Regel, die einen Pfad ohne Platzhalter regulärer Ausdrücke beschreibt (zum Beispiel genau /etc/passwd), gewinnt immer gegenüber allgemeineren Ausdrücken&lt;br /&gt;
# &#039;&#039;&#039;Die maximale Länge der Übereinstimmung bestimmt die Spezifität.&#039;&#039;&#039; Falls es keine exakte Übereinstimmung gibt, gewinnt die spezifischste Regel — also diejenige, bei der der übereinstimmende Teil des Pfads länger ist&lt;br /&gt;
#* Eine Regel für /var/www/html(/.*)? sticht eine allgemeinere Regel für /var/www(/.*)?&lt;br /&gt;
# &#039;&#039;&#039;Eine explizite Angabe der Objektklasse erhöht die Priorität.&#039;&#039;&#039; Bei gleicher Länge der Übereinstimmung hat eine Regel mit explizit angegebenem Klassifizierer (zum Beispiel -d für Verzeichnisse oder -- für reguläre Dateien) Vorrang vor einer Regel ohne Klassenangabe&lt;br /&gt;
&lt;br /&gt;
Dank dieser Hierarchie werden Basislabels auf der Ebene der Wurzel des Dateisystems gesetzt und dann beim tieferen Abstieg im Verzeichnisbaum weiter verfeinert und überschrieben&lt;br /&gt;
&lt;br /&gt;
==== Lokale Regeln in file_contexts.local ====&lt;br /&gt;
Für lokale SELinux-Regeln gilt eine andere Prioritätslogik als für Basis- und modulare Policy-Definitionen&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Lokale Regeln haben Vorrang vor der Policy.&#039;&#039;&#039; Jeder Eintrag aus file_contexts.local, der zum Beispiel über semanage fcontext hinzugefügt wurde, wird vor den entsprechenden Definitionen aus der Basis-Policy oder aus Modulen berücksichtigt&lt;br /&gt;
# &#039;&#039;&#039;Die Priorisierung erfolgt von neuen zu alten Einträgen.&#039;&#039;&#039; Lokale Regeln werden nicht nach dem Prinzip „am spezifischsten“ verarbeitet, sondern in umgekehrter Reihenfolge ihrer Hinzufügung: vom zuletzt hinzugefügten Eintrag bis zum frühesten&lt;br /&gt;
# &#039;&#039;&#039;Es wird die erste Übereinstimmung verwendet.&#039;&#039;&#039; Sobald eine passende lokale Regel gefunden wurde, wird die weitere Suche beendet&lt;br /&gt;
#* Das bedeutet, dass ein allgemeinerer, aber später hinzugefügter Ausdruck einen genaueren, aber früher erstellten Ausdruck überdecken kann&lt;br /&gt;
&lt;br /&gt;
Daher erfordern lokale Regeln besondere Sorgfalt: Ein zu weit gefasster Ausdruck, der über semanage fcontext hinzugefügt wurde, kann unerwartet genauere Basisdefinitionen der Policy überdecken&lt;br /&gt;
&lt;br /&gt;
Genau aus diesem Grund sollten lokale reguläre Ausdrücke möglichst eng gefasst und zielgerichtet sein, sodass sie nur den tatsächlich benötigten Abschnitt des Verzeichnisbaums überschreiben&lt;br /&gt;
&lt;br /&gt;
=== Befehl matchpathcon ===&lt;br /&gt;
matchpathcon fragt die System-Policy ab und gibt den &#039;&#039;&#039;Standardkontext&#039;&#039;&#039; aus, der mit dem angegebenen Pfad verknüpft ist&lt;br /&gt;
* Das Werkzeug ist speziell für die Analyse des erwarteten Kontexts nützlich und nicht für den aktuellen Inhalt von xattr&lt;br /&gt;
* Dieses Dienstprogramm &#039;&#039;&#039;verwaltet keine Regeln&#039;&#039;&#039;, sondern &#039;&#039;&#039;zeigt lediglich das Ergebnis der Pfadprüfung&#039;&#039;&#039; gegen die File-Context-Datenbank an&lt;br /&gt;
&lt;br /&gt;
; Hauptziele bei der Verwendung von matchpathcon&lt;br /&gt;
* verstehen, &#039;&#039;&#039;welches Label ein Pfad haben sollte&#039;&#039;&#039;&lt;br /&gt;
* das &#039;&#039;&#039;tatsächliche Label&#039;&#039;&#039; mit der &#039;&#039;&#039;Policy-Erwartung&#039;&#039;&#039; vergleichen&lt;br /&gt;
* im Voraus prüfen, welchen Kontext ein neuer Pfad nach dem Ausführen von restorecon erhält&lt;br /&gt;
&lt;br /&gt;
===== Prüfschichten  =====&lt;br /&gt;
Prüfschichten entsprechend der Priorität der Regeln (von der niedrigsten zur höchsten Priorität)&lt;br /&gt;
* Basisregeln der Policy (file_contexts)&lt;br /&gt;
* Regeln für Home-Verzeichnisse (file_contexts.homedirs)&lt;br /&gt;
* Systemweite Pfad-Aliase der Distribution (file_contexts.subs_dist)&lt;br /&gt;
* Lokale Äquivalenzregeln (file_contexts.subs)&lt;br /&gt;
* lokale administrative Änderungen (file_contexts.local)&lt;br /&gt;
&lt;br /&gt;
===== Optionen =====&lt;br /&gt;
Zunächst verwenden wir den Befehl ohne Parameter, um das erwartete Label für die Datei /etc/resolv.conf anzusehen&lt;br /&gt;
* Anschließend vergleichen wir es mit dem tatsächlichen Label mittels ls&lt;br /&gt;
&lt;br /&gt;
 matchpathcon /etc/resolv.conf&lt;br /&gt;
 ls -Z /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
* Für die Problemdiagnose — insbesondere um zu prüfen, ob der auf dem Datenträger vorhandene Kontext mit dem Standardkontext aus der Policy übereinstimmt — ist auch der Parameter -V (Verify) praktisch&lt;br /&gt;
* Zur Veranschaulichung erzeugen wir eine Situation, in der das aktuelle Label nicht mit dem erwarteten übereinstimmt&lt;br /&gt;
&lt;br /&gt;
 cp -a /etc/hosts /var/log/hosts&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -V /var/log/hosts&lt;br /&gt;
 /var/log/hosts has context system_u:object_r:net_conf_t:s0, should be system_u:object_r:var_log_t:s0&lt;br /&gt;
&lt;br /&gt;
Wichtig ist zu beachten, dass das Dienstprogramm matchpathcon für manche Pfade &amp;lt;&amp;lt;none&amp;gt;&amp;gt; zurückgeben kann (zum Beispiel für Dateien in tmp)&lt;br /&gt;
* Das ist ein spezieller interner Wert in der Datenbank file_contexts: Er bedeutet, dass für diesen Pfad und Objekttyp &#039;&#039;&#039;kein erwarteter Standardkontext gefunden wurde&#039;&#039;&#039; oder dass dieser Pfad &#039;&#039;&#039;kein Label über File Context erhalten soll&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Der Objekttyp kann mit dem Parameter -m (mode) erzwungen angegeben werden&lt;br /&gt;
* Das ist besonders wichtig für Pfade, die noch nicht existieren, oder wenn ein konkretes Szenario geprüft werden soll: „Was wäre, wenn dies ein Verzeichnis wäre?“ oder „Was wäre, wenn dies eine Datei wäre?“&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -m dir /etc/dir&lt;br /&gt;
 matchpathcon -m file /var/log/mylog.log&lt;br /&gt;
&lt;br /&gt;
Zuordnung der Objekttypen in file_contexts und der ausgeschriebenen Werte für den Parameter -m&lt;br /&gt;
{| class=&amp;quot;wikitable big options&amp;quot;&lt;br /&gt;
!matchpathcon -m&lt;br /&gt;
!file_contexts&lt;br /&gt;
|-&lt;br /&gt;
|file&lt;br /&gt;
|--&lt;br /&gt;
|-&lt;br /&gt;
|dir&lt;br /&gt;
|-d&lt;br /&gt;
|-&lt;br /&gt;
|lnk_file&lt;br /&gt;
|-l&lt;br /&gt;
|-&lt;br /&gt;
|sock_file&lt;br /&gt;
|-s&lt;br /&gt;
|-&lt;br /&gt;
|pipe&lt;br /&gt;
|-p&lt;br /&gt;
|-&lt;br /&gt;
|chr_file&lt;br /&gt;
|-c&lt;br /&gt;
|-&lt;br /&gt;
|blk_file&lt;br /&gt;
|-b&lt;br /&gt;
|}&lt;br /&gt;
Am häufigsten werden die Typen file, dir, lnk_file verwendet&lt;br /&gt;
&lt;br /&gt;
Für Skripte und Automatisierung ist der Parameter -n (no path) praktisch&lt;br /&gt;
 matchpathcon -n /etc/hosts&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe enthält dann nicht den Pfad, sondern nur das Ergebnis der Prüfung des erwarteten File Context&lt;br /&gt;
* Schließlich kann statt der aktuellen auch eine alternative Datei file_contexts verwendet werden&lt;br /&gt;
* Das kann für Testzwecke nützlich sein; dafür dient der Parameter -f (file contexts)&lt;br /&gt;
&lt;br /&gt;
 matchpathcon -f /tmp/test_file_contexts /srv/myapp&lt;br /&gt;
&lt;br /&gt;
Außerdem kann mit dem Parameter -P (Policy) ein alternativer Pfad für einen vollständigen Policy-Satz verwendet werden&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von Kontexten mit semanage ==&lt;br /&gt;
Nun ist es endlich an der Zeit, die Verwaltung der File-Context-Datenbank zu betrachten&lt;br /&gt;
&lt;br /&gt;
Wie bereits zuvor besprochen, überschreibt chcon direkt die erweiterten Attribute (xattr) auf dem Datenträger, teilt der SELinux-Policy-Datenbank (file_contexts) jedoch absolut nichts darüber mit&lt;br /&gt;
&lt;br /&gt;
Änderungen, die mit chcon vorgenommen werden, sind im Maßstab des Systemlebenszyklus nur temporär&lt;br /&gt;
&lt;br /&gt;
Sie werden bei jedem der folgenden Ereignisse unwiderruflich zerstört (durch Referenzwerte aus der Datenbank überschrieben)&lt;br /&gt;
* der Administrator startet das Dienstprogramm restorecon manuell für dieses Verzeichnis;&lt;br /&gt;
* es erfolgt ein Systemupdate eines Pakets (zum Beispiel des Webservers), dessen Installer eine Prüfung der Kontexte auslöst;&lt;br /&gt;
* beim Booten wird ein vollständiges Relabeling des Dateisystems initiiert (durch Erzeugen der Datei /.autorelabel)&lt;br /&gt;
&lt;br /&gt;
=== semanage fcontext ===&lt;br /&gt;
Damit ein Kontext alle Updates und Relabeling-Vorgänge übersteht, muss man dem SELinux-System selbst beibringen, dass ein nicht standardmäßiger Pfad nun ein bestimmtes Label haben soll&lt;br /&gt;
&lt;br /&gt;
Dafür wird das Werkzeug semanage (SELinux Policy Management Tool) verwendet&lt;br /&gt;
* Es ist das allgemeine Werkzeug zur lokalen Verwaltung von Elementen der SELinux-Policy, darunter: login mappings, SELinux users, ports, interfaces, modules, booleans, permissive types und file contexts&lt;br /&gt;
* Für den aktuellen Schritt ist insbesondere der Bereich fcontext relevant&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
Zur Demonstration versuchen wir, ein nicht standardmäßiges Verzeichnis mit hochsensiblen Daten zu schützen&lt;br /&gt;
&lt;br /&gt;
Stellen wir uns folgende Situation vor: Entwickler haben ein internes Authentifizierungssystem ausgerollt, das Sicherungskopien der Passwort-Hashes von Benutzern in einem nicht standardmäßigen Verzeichnis speichert — /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /opt/app_auth/vault&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn wir uns an die Analyse der Datei file_contexts aus den vorherigen Schritten erinnern, erhalten das Verzeichnis /opt/ und sein gesamter Inhalt standardmäßig den Kontext usr_t&lt;br /&gt;
&lt;br /&gt;
; Das ist ein öffentlicher Kontext&lt;br /&gt;
* &#039;&#039;&#039;Die meisten laufenden Dienste und Benutzer dürfen Dateien mit diesem Label lesen.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Passwörter dort zu speichern ist unzulässig.&#039;&#039;&#039;&lt;br /&gt;
* Daher muss für dieses Verzeichnis eine grundlegende Regel erstellt werden&lt;br /&gt;
&lt;br /&gt;
Verwenden wir dazu die Parameter -a (add) und -t (Feld type)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -a -t shadow_t &amp;quot;/opt/app_auth/vault(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;/opt/app_auth/vault(/.*)?&amp;quot; — ein regulärer Ausdruck, der das Verzeichnis selbst und absolut alle darin enthaltenen Dateien umfasst&lt;br /&gt;
&lt;br /&gt;
Nun prüfen wir den Kontext des Verzeichnisses&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
...und sehen, dass sich nichts geändert hat&lt;br /&gt;
* Das liegt daran, dass wir zwar einen Eintrag in die Datenbank hinzugefügt haben, das bloße Hinzufügen eines Eintrags jedoch kein Relabeling auslöst&lt;br /&gt;
* Um die Änderungen anzuwenden, wird das uns bereits bekannte Werkzeug restorecon verwendet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /opt/app_auth/vault/&lt;br /&gt;
ls -Zd /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
# ls -Zd /opt/app_auth/vault/&lt;br /&gt;
unconfined_u:object_r:shadow_t:s0 /opt/app_auth/vault/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen wir, ob der Eintrag in der File-Context-Datenbank vorhanden ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
cat /etc/selinux/default/contexts/files/file_contexts.local&lt;br /&gt;
&lt;br /&gt;
# This file is auto-generated by libsemanage&lt;br /&gt;
# Do not edit directly&lt;br /&gt;
&lt;br /&gt;
/opt/app_auth/vault(/.*)?    system_u:object_r:shadow_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Jetzt sind die vertraulichen Daten zuverlässig geschützt!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Optionen ====&lt;br /&gt;
Das Werkzeug semanage verfügt über verschiedene nützliche Optionen; konzentrieren wir uns auf die wichtigsten&lt;br /&gt;
&lt;br /&gt;
Welche nicht standardmäßigen Regeln manuell hinzugefügt wurden, kann mit der Option -l (list) zusammen mit dem Modifikator -C (Custom) angezeigt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -lC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Den Kontexttyp für den bereits in der lokalen Datenbank registrierten Pfad /srv/myweb(/.*)? kann man mit der Option -m (modify) aktualisieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -m -t httpd_sys_rw_content_t &amp;quot;/srv/myweb(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass der reguläre Ausdruck genau mit dem Eintrag in der Datenbank übereinstimmt, dessen Kontext wir ändern wollen&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst außer Betrieb genommen wurde und das nicht standardmäßige Verzeichnis nicht mehr benötigt wird, kann die Regel mit der Option -d gelöscht werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -d &amp;quot;/opt/app_auth/vault(/.*)?&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Äquivalente Pfade (Equivalence Rules) ===&lt;br /&gt;
Bei der Arbeit mit mehreren Verzeichnissen entsteht häufig die Situation, dass&lt;br /&gt;
* bereits eine korrekt gekennzeichnete Struktur existiert&lt;br /&gt;
* eine Kopie dieser Struktur an einem anderen Ort erstellt werden muss&lt;br /&gt;
&lt;br /&gt;
==== Beispielaufgabe ====&lt;br /&gt;
Es gibt den Standardpfad des Webservers /var/www, wir haben jedoch beschlossen, die Dateien unserer neuen Website in einem nicht standardmäßigen Verzeichnis abzulegen, zum Beispiel auf einer separaten Festplatte, die unter /srv/myweb eingehängt ist&lt;br /&gt;
&lt;br /&gt;
Wir erstellen zur Veranschaulichung mehrere Ordner im ursprünglichen Verzeichnis /var/www und bereiten das neue Verzeichnis /srv/myweb vor&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mkdir -p /var/www/sessions &amp;amp;&amp;amp; mkdir -p /var/www/cgi-bin&lt;br /&gt;
restorecon -v -R /var/www&lt;br /&gt;
ls -Z1 /var/www&lt;br /&gt;
mkdir -p /srv/myweb&lt;br /&gt;
cp -r /var/www/* /srv/myweb/&lt;br /&gt;
ls -Z1 /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Standardmäßig sind für das Verzeichnis /var/www und alle seine Unterverzeichnisse (html, cgi-bin usw.) im System bereits Dutzende komplexer regulärer Ausdrücke definiert, die die korrekten Kontexte zuweisen (zum Beispiel httpd_cache_t für /var/www/uploads(/.*)?)&lt;br /&gt;
* Alle regulären Ausdrücke aus /var/www manuell für das neue Verzeichnis /srv/myweb umzuschreiben, wäre aufwendig, unhandlich und fehleranfällig&lt;br /&gt;
&lt;br /&gt;
Für die Lösung solcher Aufgaben werden Äquivalenzregeln verwendet (Parameter -e des Befehls semanage fcontext)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -a -e /var/www /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Änderungen anwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v -R /srv/myweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sehen wir uns an, wie das in der Datenbank aussieht&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
# semanage fcontext -lC&lt;br /&gt;
SELinux fcontext                                   type               Context&lt;br /&gt;
/opt/app_auth/vault(/.*)?                          all files          system_u:object_r:shadow_t:s0&lt;br /&gt;
&lt;br /&gt;
SELinux Local fcontext Equivalence&lt;br /&gt;
/srv/myweb = /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Eine Äquivalenzregel funktioniert wie ein transparenter Alias: Wenn SELinux irgendeine Datei innerhalb von /srv/myweb/ prüft, ersetzt es in deren Pfad virtuell /srv/myweb durch /var/www und sucht erst danach Übereinstimmungen in seiner umfangreichen Datenbank regulärer Ausdrücke&lt;br /&gt;
&lt;br /&gt;
Wenn es erforderlich ist, die Äquivalenzregel zu entfernen, geschieht dies mit dem bereits bekannten Parameter -d; man muss ihn lediglich anstelle des Parameters -a aus dem ursprünglichen Befehl verwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage fcontext -d -e /var/www /srv/myweb&lt;br /&gt;
semanage fcontext -lC&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Export und Import lokaler Policies ===&lt;br /&gt;
Das Dienstprogramm semanage kann Policies mit den Befehlen semanage export und semanage import in eine Datei exportieren beziehungsweise aus einer Datei importieren&lt;br /&gt;
* In der Praxis wird das zum Beispiel verwendet, wenn ein Administrator plant, Policies von einem Testserver auf die Produktionsumgebung zu übertragen&lt;br /&gt;
&lt;br /&gt;
==== Export ====&lt;br /&gt;
Verwendungsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage export -f /tmp/selinux_local_rules.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfen wir, was sich darin befindet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
cat /tmp/selinux_local_rules.txt&lt;br /&gt;
boolean -D&lt;br /&gt;
login -D&lt;br /&gt;
interface -D&lt;br /&gt;
...&lt;br /&gt;
fcontext -a -f a -t shadow_t -r &#039;s0&#039; &#039;/opt/app_auth/vault(/.*)?&#039;&lt;br /&gt;
module -d acpi&lt;br /&gt;
module -d aisexec&lt;br /&gt;
module -d amtu&lt;br /&gt;
..&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man sehen kann, ist die Datei logisch in drei Teile gegliedert&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Bereinigungsblock&#039;&#039;&#039; (Einträge mit dem Schlüssel -D) – beim Import der Datei auf einem neuen Server (über semanage import) soll das Policy-System zu einer &#039;&#039;exakten Kopie&#039;&#039; des Quellservers werden&lt;br /&gt;
* Daher müssen alle lokalen Einstellungen gelöscht werden&lt;br /&gt;
* Der Schlüssel -D wird als Delete interpretiert&lt;br /&gt;
* &#039;&#039;&#039;Lokale Regeln&#039;&#039;&#039; (im Beispiel die einzige Regel fcontext)&lt;br /&gt;
* &#039;&#039;&#039;Block deaktivierter Policy-Module&#039;&#039;&#039; (Einträge mit dem Schlüssel -d) – das Policy-Set default policy in Debian ist gehärtet (hardened) und deaktiviert ungenutzte Module&lt;br /&gt;
* In RHEL macht die Policy targeted genau das Gegenteil: Dort sind standardmäßig von Anfang an alle Module aktiviert, unabhängig davon, ob die entsprechende Software installiert ist oder nicht&lt;br /&gt;
&lt;br /&gt;
==== Import ====&lt;br /&gt;
Für den Import wird der Befehl semanage import verwendet; seine Syntax sieht identisch zum Export aus&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
semanage import -f /tmp/selinux_local_rules.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn uns die importierten Policies zusagen und alles Erforderliche mit matchpathcon -V geprüft wurde, wenden wir die Änderungen an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/Praxis]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= RHEL =&lt;br /&gt;
=== SELinux-Kontexte – Dateien kennzeichnen ===&lt;br /&gt;
Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien so gekennzeichnet, dass sie sicherheitsrelevante Informationen darstellen&lt;br /&gt;
* Diese Informationen werden als SELinux-Kontext bezeichnet&lt;br /&gt;
* Bei Dateien kann dies mit dem Befehl &#039;&#039;ls -Z&#039;&#039; angezeigt werden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel stellt SELinux einen Benutzer (&#039;&#039;unconfined_u&#039;&#039;), eine Rolle (&#039;&#039;object_r&#039;&#039;), einen Typ (&#039;&#039;user_home_t&#039;&#039;) und eine Stufe (&#039;&#039;s0&#039;&#039;) bereit&lt;br /&gt;
* Diese Informationen werden verwendet, um Entscheidungen zur Zugriffskontrolle zu treffen&lt;br /&gt;
* Auf DAC-Systemen wird der Zugriff auf Basis der Linux-Benutzer- und Gruppen-IDs kontrolliert&lt;br /&gt;
* SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft&lt;br /&gt;
* SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff zuvor verweigern&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
: Standardmäßig erben neu erstellte Dateien und Verzeichnisse den SELinux-Typ ihrer übergeordneten Verzeichnisse&lt;br /&gt;
* Wenn Sie beispielsweise eine neue Datei im Verzeichnis &#039;&#039;/etc&#039;&#039; erstellen, das mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet ist, erbt die neue Datei denselben Typ&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -dZ - /etc&lt;br /&gt;
drwxr-xr-x root root system_u:object_r:‚&#039;etc_t‘&#039;:s0 /etc&lt;br /&gt;
&lt;br /&gt;
sudo touch /etc/file1&lt;br /&gt;
&lt;br /&gt;
sudo ls -lZ /etc/file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:‚&#039;etc_t‘&#039;:s0 /etc/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SELinux bietet mehrere Befehle zur Verwaltung der Dateisystem-Kennzeichnung, wie beispielsweise &#039;&#039;chcon&#039;&#039;, &#039;&#039;semanage fcontext&#039;&#039;, &#039;&#039;restorecon&#039;&#039; und &#039;&#039;matchpathcon&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Temporäre Änderungen: chcon ====&lt;br /&gt;
Der Befehl &#039;&#039;chcon&#039;&#039; ändert den SELinux-Kontext für Dateien&lt;br /&gt;
* Änderungen, die mit dem Befehl &#039;&#039;chcon&#039;&#039; vorgenommen werden, bleiben jedoch nicht bestehen, wenn das Dateisystem neu gekennzeichnet wird oder der Befehl &#039;&#039;restorecon&#039;&#039; &lt;br /&gt;
* Die SELinux-Richtlinie legt fest, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern dürfen&lt;br /&gt;
* Bei der Verwendung von &#039;&#039;chcon&#039;&#039; geben Benutzer den gesamten oder einen Teil des SELinux-Kontexts an, der geändert werden soll&lt;br /&gt;
* Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert&lt;br /&gt;
&lt;br /&gt;
==== Kurzreferenz ====&lt;br /&gt;
* Führen Sie den Befehl &#039;&#039;chcon -t ‚&#039;type‘&#039; ‚&#039;file-name‘&#039; &#039;&#039; aus, um den Dateityp zu ändern, wobei ‚&#039;type‘&#039; ein SELinux-Typ ist, wie z. B. &#039;&#039;httpd_sys_content_t&#039;&#039;, und ‚&#039;file-name‘&#039; ein Datei- oder Verzeichnisname ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t httpd_sys_content_t ‚&#039;file-name‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Führen Sie den Befehl &#039;&#039;chcon -R -t ‚&#039;type‘&#039; ‚&#039;directory-name‘&#039;&#039;&#039; aus, um den Typ des Verzeichnisses und dessen Inhalt zu ändern, wobei ‚&#039;type‘&#039; ein SELinux-Typ ist, wie beispielsweise &#039;&#039;httpd_sys_content_t&#039;&#039;, und ‚&#039;Verzeichnisname‘&#039; ein Verzeichnisname ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t httpd_sys_content_t ‚&#039;Verzeichnisname‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Ändern des Typs einer Datei oder eines Verzeichnisses&lt;br /&gt;
Das folgende Verfahren zeigt, wie der Typ und keine anderen Attribute des SELinux-Kontexts geändert werden&lt;br /&gt;
* Das Beispiel in diesem Abschnitt funktioniert genauso für Verzeichnisse, beispielsweise wenn &#039;&#039;file1&#039;&#039; ein Verzeichnis wäre. # Wechseln Sie in Ihr Home-Verzeichnis&lt;br /&gt;
# Erstellen Sie eine neue Datei und zeigen Sie deren SELinux-Kontext an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch file1&lt;br /&gt;
&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rw -rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel umfasst der SELinux-Kontext für &#039;&#039;file1&#039;&#039; den SELinux-Benutzer &#039;&#039;unconfined_u&#039;&#039;, die Rolle &#039;&#039;object_r&#039;&#039;, den Typ &#039;&#039;user_home_t&#039;&#039; und die &#039;&#039;s0&#039;&#039; Ebene&lt;br /&gt;
* Eine Beschreibung der einzelnen Bestandteile des SELinux-Kontexts finden Sie in Kapitel 2, ‚&#039;SELinux-Kontexte‘&#039;&lt;br /&gt;
# Geben Sie den folgenden Befehl ein, um den Typ in &#039;&#039;samba_share_t&#039;&#039; zu ändern&lt;br /&gt;
* Die Option &#039;&#039;-t&#039;&#039; ändert nur den Typ&lt;br /&gt;
* Zeigen Sie anschließend die Änderung an&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t samba_share_t file1&lt;br /&gt;
&lt;br /&gt;
ls -Z file1&lt;br /&gt;
-rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie den folgenden Befehl, um den SELinux-Kontext für die Datei &#039;&#039;file1&#039;&#039; wiederherzustellen&lt;br /&gt;
* Verwenden Sie die Option &#039;&#039;-v&#039;&#039;, um die Änderungen anzuzeigen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v file1&lt;br /&gt;
restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0-&amp;gt;system_u:object_r:user_home_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel wird der vorherige Typ, &#039;&#039;samba_share_t&#039;&#039;, auf den korrekten Typ, &#039;&#039;user_home_t&#039;&#039;, zurückgesetzt&lt;br /&gt;
* Bei Verwendung der Targeted-Richtlinie (der Standard-SELinux-Richtlinie in Red Hat Enterprise Linux) liest der Befehl &#039;&#039;restorecon&#039;&#039; die Dateien im Verzeichnis &#039;&#039;/etc/selinux/targeted/contexts/files/&#039;&#039; aus, um festzustellen, welchen SELinux-Kontext die Dateien haben sollten&lt;br /&gt;
&lt;br /&gt;
; Ändern der Typen eines Verzeichnisses und seines Inhalts&lt;br /&gt;
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&lt;br /&gt;
* Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server ein anderes Dokumentstammverzeichnis (anstelle von &#039;&#039;/var/www/html/&#039;&#039;) verwendet&lt;br /&gt;
# Erstellen Sie als Root-Benutzer ein neues &#039;&#039;web/&#039;&#039;-Verzeichnis und anschließend 3 leere Dateien (&#039;&#039;file1&#039;&#039;, &#039;&#039;file2&#039;&#039; und &#039;&#039;file3&#039;&#039;) in diesem Verzeichnis&lt;br /&gt;
* Das &#039;&#039;web/&#039;&#039;-Verzeichnis und die darin enthaltenen Dateien sind mit dem Typ &#039;&#039;default_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir /web&lt;br /&gt;
&lt;br /&gt;
sudo touch /web/file{1,2,3}&lt;br /&gt;
sudo ls -dZ /web&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web&lt;br /&gt;
&lt;br /&gt;
sudo ls -lZ /web&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Geben Sie als root den folgenden Befehl ein, um den Typ des Verzeichnisses &#039;&#039;web/&#039;&#039; (und dessen Inhalt) in &#039;&#039;httpd_sys_content_t&#039;&#039; zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo chcon -R -t httpd_sys_content_t /web/&lt;br /&gt;
&lt;br /&gt;
sudo ls -dZ /web/&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/&lt;br /&gt;
&lt;br /&gt;
sudo ls -lZ /web/&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r: httpd_sys_content_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Um die Standard-SELinux-Kontexte wiederherzustellen, verwenden Sie das Dienstprogramm &#039;&#039;restorecon&#039;&#039; als root&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -R -v /web/&lt;br /&gt;
restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t:s0&lt;br /&gt;
&lt;br /&gt;
restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t:s0&lt;br /&gt;
restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t: s0&lt;br /&gt;
restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0-&amp;gt;system_u:object_r:default_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu &#039;&#039;chcon&#039;&#039; finden Sie auf der chcon(1)-Manpage&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
: Typen-Enforcement ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird&lt;br /&gt;
* In den meisten Fällen können SELinux-Benutzer und -Rollen ignoriert werden&lt;br /&gt;
&lt;br /&gt;
==== Dauerhafte Änderungen: semanage fcontext ====&lt;br /&gt;
Der Befehl &#039;&#039;semanage fcontext&#039;&#039; wird verwendet, um den SELinux-Kontext von Dateien zu ändern&lt;br /&gt;
* Um die Kontexte neu erstellter Dateien und Verzeichnisse anzuzeigen, geben Sie als root den folgenden Befehl ein&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -C -l&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Änderungen, die mit &#039;&#039;semanage fcontext&#039;&#039; vorgenommen wurden, werden von den folgenden Dienstprogrammen verwendet&lt;br /&gt;
* Das Dienstprogramm &#039;&#039;setfiles&#039;&#039; wird verwendet, wenn ein Dateisystem neu gekennzeichnet wird, und das Dienstprogramm &#039;&#039;restorecon&#039;&#039; stellt die Standard-SELinux-Kontexte wieder her&lt;br /&gt;
* Das bedeutet, dass durch &#039;&#039;semanage fcontext&#039;&#039; vorgenommene Änderungen dauerhaft sind, selbst wenn das Dateisystem neu gekennzeichnet wird&lt;br /&gt;
* Die SELinux-Richtlinie steuert, ob Benutzer den SELinux-Kontext für eine bestimmte Datei ändern können&lt;br /&gt;
&lt;br /&gt;
==== Kurzübersicht ====&lt;br /&gt;
Um SELinux-Kontextänderungen vorzunehmen, die eine Neukennzeichnung des Dateisystems überdauern&lt;br /&gt;
# Geben Sie den folgenden Befehl ein und achten Sie darauf, den vollständigen Pfad zur Datei oder zum Verzeichnis zu verwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -a ‚&#039;Optionen‘&#039; ‚&#039;Dateiname‘ ‚|‘&#039;Verzeichnisname&#039;‚&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um die Kontextänderungen anzuwenden&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -v ‘&#039;Dateiname&#039;‚|‘&#039;Verzeichnisname&#039;‚&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Verwendung regulärer Ausdrücke mit semanage fcontext =====&lt;br /&gt;
Damit der Befehl &#039;&#039;semanage fcontext&#039;&#039; korrekt funktioniert, können Sie entweder einen vollqualifizierten Pfad oder ‘&#039;&#039; Perl-kompatible reguläre Ausdrücke ()‚‘&#039;&lt;br /&gt;
* Das einzige verwendete ‚&#039;PCRE‘&#039;-Flag ist &#039;&#039;PCRE2_DOTALL&#039;&#039;, wodurch der Platzhalter &#039;&#039;.&#039;&#039; mit allem übereinstimmt, einschließlich einer neuen Zeile&lt;br /&gt;
* Zeichenfolgen, die Pfade darstellen, werden als Bytes verarbeitet, was bedeutet, dass Nicht-ASCII-Zeichen nicht durch einen einzelnen Platzhalter abgeglichen werden&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass mit &#039;&#039;semanage fcontext&#039;&#039; angegebene Dateikontextdefinitionen in umgekehrter Reihenfolge zu ihrer Definition ausgewertet werden&lt;br /&gt;
der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet&lt;br /&gt;
* Lokale Dateikontextänderungen, die in &#039;&#039;file_contexts.local&#039;&#039; gespeichert sind, haben eine höhere Priorität als die in Policy-Modulen angegebenen&lt;br /&gt;
* Das bedeutet, dass immer dann, wenn in &#039;&#039;file_contexts.local&#039;&#039; gefunden wird, werden keine anderen Dateikontextdefinitionen berücksichtigt&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Mit dem Befehl &#039;&#039;semanage fcontext&#039;&#039; festgelegte Dateikontextdefinitionen überschreiben effektiv alle anderen Dateikontextdefinitionen&lt;br /&gt;
* Alle regulären Ausdrücke sollten daher so spezifisch wie möglich sein, um unbeabsichtigte Auswirkungen auf andere Teile des Dateisystems zu vermeiden&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu den in Dateikontextdefinitionen verwendeten regulären Ausdrücken und den geltenden Flags finden Sie in der &#039;&#039;semanage-fcontext(8) &#039;&#039; Man-Seite&lt;br /&gt;
&lt;br /&gt;
; Ändern des Typs einer Datei oder eines Verzeichnisses&lt;br /&gt;
Das folgende Beispiel zeigt, wie der Typ einer Datei geändert wird, ohne andere Attribute des SELinux-Kontexts zu beeinflussen&lt;br /&gt;
* Dieses Beispiel funktioniert genauso für Verzeichnisse, beispielsweise wenn &#039;&#039;file1&#039;&#039; ein Verzeichnis wäre. # Erstellen Sie als Root-Benutzer eine neue Datei im Verzeichnis &#039;&#039;/etc&#039;&#039;&lt;br /&gt;
* Standardmäßig werden neu erstellte Dateien in &#039;&#039;/etc&#039;&#039; mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo touch /etc/file1&lt;br /&gt;
&lt;br /&gt;
ls -Z /etc/file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um Informationen zu einem Verzeichnis aufzulisten, verwenden Sie den folgenden Befehl&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
ls -dZ ‚&#039;Verzeichnisname‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Geben Sie als root den folgenden Befehl ein, um den Typ von &#039;&#039;file1&#039;&#039; in &#039;&#039;samba_share_t&#039;&#039; zu ändern&lt;br /&gt;
* Die Option &#039;&#039;-a&#039;&#039; fügt einen neuen Eintrag hinzu, und die Option &#039;&#039;-t&#039;&#039; definiert einen Typ (&#039;&#039;samba_share_t&#039;&#039;)&lt;br /&gt;
* Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; &#039;&#039;file1&#039;&#039; ist weiterhin mit dem Typ &#039;&#039;etc_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -a -t samba_share_t /etc/file1&lt;br /&gt;
&lt;br /&gt;
sudo ls -Z /etc/file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1&lt;br /&gt;
&lt;br /&gt;
semanage fcontext -C -l&lt;br /&gt;
&lt;br /&gt;
/etc/file1 unconfined_u:object_r:samba_share_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie als root das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um den Typ zu ändern&lt;br /&gt;
* Da &#039;&#039;semanage&#039;&#039; einen Eintrag für &#039;&#039;/etc/file1&#039;&#039; in &#039;&#039;file_contexts.local&#039;&#039; hinzugefügt hat, ändert &#039;&#039;restorecon&#039;&#039; den Typ in &#039;&#039;samba_share_t&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -v /etc/file1&lt;br /&gt;
restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0-&amp;gt;system_u:object_r:samba_share_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Ändern der Typen eines Verzeichnisses und seines Inhalts&lt;br /&gt;
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&lt;br /&gt;
* Die Konfiguration in diesem Beispiel wird verwendet, wenn Sie möchten, dass der Apache-HTTP-Server anstelle von &#039;&#039;/var/www/html/&#039;&#039; einen anderen Dokumentenstamm verwendet &lt;br /&gt;
# Erstellen Sie als Root-Benutzer ein neues Verzeichnis &#039;&#039;web/&#039;&#039; und anschließend 3 leere Dateien (&#039;&#039;file1&#039;&#039;, &#039;&#039;file2&#039;&#039; und &#039;&#039;file3&#039;&#039;) in diesem Verzeichnis&lt;br /&gt;
* Das Verzeichnis &#039;&#039;web/ &#039;&#039; und die darin enthaltenen Dateien sind mit dem Typ &#039;&#039;default_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir /web&lt;br /&gt;
sudo touch /web/file{1,2,3}&lt;br /&gt;
sudo ls -dZ /web&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web&lt;br /&gt;
sudo ls -lZ /web&lt;br /&gt;
-rw-r--r-- root root unconfined_ u:object_r:default_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Geben Sie als root den folgenden Befehl ein, um den Typ des &#039;&#039;web/&#039;&#039;-Verzeichnisses und der darin enthaltenen Dateien in &#039;&#039;httpd_sys_content_t&#039;&#039; zu ändern&lt;br /&gt;
* Die Option &#039;&#039;-a&#039;&#039; fügt einen neuen Eintrag hinzu, und die Option &#039;&#039;-t&#039;&#039; definiert einen Typ (&#039;&#039;httpd_sys_content_t&#039;&#039;)&lt;br /&gt;
* Der reguläre Ausdruck &#039;&#039;„/web(/.*)?“&#039;&#039; bewirkt, dass &#039;&#039;semanage&#039;&#039; die Änderungen auf &#039;&#039;web/&#039;&#039; sowie die darin enthaltenen Dateien anwendet&lt;br /&gt;
* Beachten Sie, dass die Ausführung dieses Befehls den Typ nicht direkt ändert; &#039;&#039;web/&#039;&#039; und die darin enthaltenen Dateien sind weiterhin mit dem Typ &#039;&#039;default_t&#039;&#039; gekennzeichnet&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“&lt;br /&gt;
ls -dZ /web&lt;br /&gt;
&lt;br /&gt;
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web&lt;br /&gt;
ls -lZ /web&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2&lt;br /&gt;
&lt;br /&gt;
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Befehl &#039;&#039;semanage fcontext -a -t httpd_sys_content_t „/web(/.*)?“&#039;&#039; fügt den folgenden Eintrag zu &#039;&#039;/etc/selinux/targeted/contexts/files/file_contexts.local&#039;&#039; hinzu&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie als root das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um den Typ von &#039;&#039;web/&#039;&#039; sowie aller darin enthaltenen Dateien zu ändern&lt;br /&gt;
* Der Parameter &#039;&#039;-R&#039;&#039; steht für rekursiv, was bedeutet, dass alle Dateien und Verzeichnisse unter &#039;&#039;web/&#039;&#039; mit dem Typ &#039;&#039;httpd_sys_content_t&#039;&#039; gekennzeichnet werden&lt;br /&gt;
* Da &#039;&#039;semanage&#039;&#039; einen Eintrag für &#039;&#039;/web(/.*)?&#039;&#039; in &#039;&#039;file.contexts.local&#039;&#039; hinzugefügt hat, ändert &#039;&#039;restorecon&#039;&#039; die Typen in &#039;&#039;httpd_sys_content_t&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo restorecon -R -v /web&lt;br /&gt;
restorecon reset /web context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r: httpd_sys_content_t:s0&lt;br /&gt;
restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&lt;br /&gt;
restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0-&amp;gt;system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beachten Sie, dass neu erstellte Dateien und Verzeichnisse standardmäßig den SELinux-Typ ihrer übergeordneten Verzeichnisse erben&lt;br /&gt;
&lt;br /&gt;
; Einen hinzugefügten Kontext löschen&lt;br /&gt;
Das folgende Beispiel zeigt das Hinzufügen und Entfernen eines SELinux-Kontexts&lt;br /&gt;
* Wenn der Kontext Teil eines regulären Ausdrucks ist, zum Beispiel &#039;&#039;/web(/.*)?&#039;&#039;, setzen Sie den regulären Ausdruck in Anführungszeichen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -d „/web(/.*)?“&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Um den Kontext zu entfernen, geben Sie als Root den folgenden Befehl ein, wobei ‚&#039;Dateiname‘&#039;|‚&#039;Verzeichnisname‘&#039; der erste Teil in &#039;&#039;file_contexts.local&#039;&#039; ist&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -d ‚&#039;Dateiname‘&#039;|‚&#039;Verzeichnisname‘&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Folgende ist ein Beispiel für einen Kontext in &#039;&#039;file_contexts. local&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/test system_u:object_r:httpd_sys_content_t:s0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wobei der erste Teil &#039;&#039;test&#039;&#039; ist&lt;br /&gt;
* Um zu verhindern, dass das Verzeichnis &#039;&#039;test/&#039;&#039; nach dem Ausführen von &#039;&#039;restorecon&#039;&#039; oder nach einer Neulabelung des Dateisystems mit dem &#039;&#039;httpd_sys_content_t&#039;&#039;-Label versehen wird, geben Sie als Root den folgenden Befehl ein, um den Kontext aus &#039;&#039;file_contexts.local&#039;&#039; zu löschen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo semanage fcontext -d /test&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Verwenden Sie als root das Dienstprogramm &#039;&#039;restorecon&#039;&#039;, um den Standard-SELinux-Kontext wiederherzustellen&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu &#039;&#039;semanage&#039;&#039; finden Sie in den Handbuchseiten semanage(8) und semanage-fcontext(8)&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
: Wenn Sie den SELinux-Kontext mit &#039;&#039;semanage fcontext -a&#039;&#039; ä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 &#039;&#039;restorecon&#039;&#039;-Befehls&lt;br /&gt;
&lt;br /&gt;
==== Wie der Dateikontext bestimmt wird ====&lt;br /&gt;
Die Bestimmung des Dateikontexts basiert auf Dateikontextdefinitionen, die in der Systemsicherheitsrichtlinie (den &#039;&#039;.fc&#039;&#039;-Dateien) festgelegt sind&lt;br /&gt;
* Basierend auf der Systemrichtlinie generiert &#039;&#039;semanage&#039;&#039; die Dateien &#039;&#039;file_contexts.homedirs&#039;&#039; und &#039;&#039;file_contexts&#039;&#039;-Dateien&lt;br /&gt;
&lt;br /&gt;
Systemadministratoren können Dateikontextdefinitionen mit dem Befehl &#039;&#039;semanage fcontext&#039;&#039; anpassen&lt;br /&gt;
* Solche Anpassungen werden in der Datei &#039;&#039;file_contexts.local&#039;&#039; gespeichert&lt;br /&gt;
&lt;br /&gt;
Wenn ein Kennzeichnungsprogramm wie &#039;&#039;matchpathcon&#039;&#039; oder &#039;&#039;restorecon&#039;&#039; die richtige Kennzeichnung für einen bestimmten Pfad ermittelt, sucht es zunächst nach lokalen Änderungen (&#039;&#039;file_contexts.local&#039;&#039;)&lt;br /&gt;
* Findet das Dienstprogramm kein passendes Muster, durchsucht es die Datei &#039;&#039;file_contexts.homedirs&#039;&#039; und schließlich die Datei &#039;&#039;file_contexts&#039;&#039;&lt;br /&gt;
* Sobald jedoch eine Übereinstimmung für einen bestimmten Dateipfad gefunden wird, endet die Suche, sucht das Dienstprogramm nicht nach weiteren Dateikontext-Definitionen&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
Dateikontext-Definitionen, die durch die &#039;&#039;Systemrichtlinie&#039;&#039; festgelegt sind (Inhalt der Dateien &#039;&#039;file_contexts.homedirs&#039;&#039; und &#039;&#039;file_contexts&#039;&#039;), werden vor der Auswertung nach der Länge des Stamms (Präfix des Pfads vor etwaigen Platzhaltern) sortiert&lt;br /&gt;
* Das bedeutet, dass der spezifischste Pfad ausgewählt wird&lt;br /&gt;
* Mit &#039;&#039;semanage fcontext&#039;&#039; festgelegte Dateikontextdefinitionen werden jedoch in umgekehrter Reihenfolge zu ihrer Definition ausgewertet&lt;br /&gt;
der letzte Eintrag wird unabhängig von der Stammlänge zuerst ausgewertet&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zu&lt;br /&gt;
* der Änderung des Dateikontexts mit &#039;&#039;chcon&#039;&#039; finden Sie im Abschnitt „Temporäre Änderungen&lt;br /&gt;
chcon“&lt;br /&gt;
* das Ändern und Hinzufügen einer Dateikontextdefinition mit &#039;&#039;semanage fcontext&#039;&#039; finden Sie im Abschnitt „ Dauerhafte Änderungen&lt;br /&gt;
semanage fcontext“&lt;br /&gt;
* das Ändern und Hinzufügen einer Dateikontextdefinition durch eine Systemrichtlinienoperation, siehe Abschnitt „&#039;&#039;Pflege von SELinux-Labels&#039;&#039;“ oder Abschnitt „&#039;&#039;Priorisierung und Deaktivierung von SELinux-Richtlinienmodulen&#039;&#039;“&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
	<entry>
		<id>https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/09_Dateisysteme&amp;diff=163388</id>
		<title>Linux/SELinux/04/09 Dateisysteme</title>
		<link rel="alternate" type="text/html" href="https://wiki.foxtom.de/index.php?title=Linux/SELinux/04/09_Dateisysteme&amp;diff=163388"/>
		<updated>2026-03-29T14:26:23Z</updated>

		<summary type="html">&lt;p&gt;DanielZorin: /* Verwaltung von Kontexten mit semanage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Debian =&lt;br /&gt;
=== Mount-Optionen ===&lt;br /&gt;
==== context (Globale Überschreibung) ====&lt;br /&gt;
Die Option context= ist in zwei Hauptfällen nützlich&lt;br /&gt;
* das Dateisystem &#039;&#039;&#039;unterstützt keine&#039;&#039;&#039; xattr, sodass ein normales SELinux-Labeling darauf nicht möglich ist;&lt;br /&gt;
* dem Dateisystem &#039;&#039;&#039;kann im Hinblick auf bereits vorhandene Attribute nicht vertraut werden&#039;&#039;&#039;, und beim Mounten muss vorübergehend ein einheitlicher sicherer Kontext erzwungen werden&lt;br /&gt;
** Ein praktisches Beispiel sind Wechselmedien (USB-Sticks)&lt;br /&gt;
&lt;br /&gt;
Wenn context= gesetzt ist, versucht SELinux nicht mehr, xattr vom Datenträger zu lesen&lt;br /&gt;
* Auch die Datenbank file_contexts wird für diesen Pfad ignoriert&lt;br /&gt;
* Es ist dann nicht möglich, das Label einer einzelnen Datei innerhalb einer solchen Ressource mit chcon oder restorecon zu ändern — der Kernel gibt in diesem Fall einen Fehler zurück&lt;br /&gt;
&lt;br /&gt;
; Befehlsbeispiele&lt;br /&gt;
Für Wechselmedien&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -o context=&amp;quot;system_u:object_r:removable_t:s0&amp;quot; /dev/sdb1 /mnt/usb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für eine Netzwerkressource, die vom Webserver gelesen werden soll&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount server:/export /srv/www -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== defcontext= (Standardkontext) ====&lt;br /&gt;
Die Option defcontext= dient einer anderen Aufgabe: Sie &#039;&#039;&#039;ändert den Kontext für unlabeled Dateien&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sie wirkt nur dort, wo ein Objekt &#039;&#039;&#039;kein eigenes SELinux-Label auf dem Datenträger&#039;&#039;&#039; hat&lt;br /&gt;
* Wenn eine Datei bereits ein Label hat, verwendet SELinux dieses&lt;br /&gt;
* Wenn kein Label vorhanden ist (zum Beispiel wenn eine Datei gerade aus einem alten System ohne SELinux-Unterstützung kopiert wurde), wird ihr „on the fly“ der in defcontext= angegebene Kontext zugewiesen&lt;br /&gt;
&lt;br /&gt;
; Befehlsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount /dev/sdb2 /test -o defcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== rootcontext= (Kontext des Mount-Punkts) ====&lt;br /&gt;
Die Option rootcontext= erlaubt es, den Kontext des &#039;&#039;&#039;Root-Inodes&#039;&#039;&#039; eines Dateisystems explizit festzulegen, &#039;&#039;&#039;bevor es im Userspace sichtbar wird&#039;&#039;&#039;&lt;br /&gt;
* Sie bestimmt den Kontext ausschließlich für das &#039;&#039;&#039;Wurzelverzeichnis&#039;&#039;&#039; des eingehängten Dateisystems, ohne dessen Inhalt zu beeinflussen&lt;br /&gt;
&lt;br /&gt;
Das ist nützlich, wenn das korrekte Label für das Verzeichnis selbst (zum Beispiel /mnt/backup) gesetzt werden soll, damit Dienste es betreten können, während die individuellen Labels aller enthaltenen Dateien auf dem Datenträger erhalten bleiben&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -t tmpfs none /srv/chroot -o rootcontext=&amp;quot;system_u:object_r:tmp_t:s0&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fscontext= (Kontext des Superblocks) ====&lt;br /&gt;
Weist der abstrakten Dateisysteminstanz selbst einen Kontext als Objekt zu, nicht den darin enthaltenen Dateien&lt;br /&gt;
&lt;br /&gt;
Dies ist eine Low-Level-Option&lt;br /&gt;
* Sie wird von SELinux selbst verwendet, um zu bestimmen, ob ein bestimmter Prozess (zum Beispiel ein Mount-Daemon) das Recht hat, Dateisysteme dieses Typs einzuhängen&lt;br /&gt;
* In der täglichen Administration wird sie manuell nur äußerst selten verwendet&lt;br /&gt;
&lt;br /&gt;
=== Aufgabe ===&lt;br /&gt;
Wir erstellen zwei Mount-Punkte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mkdir -p /mnt/lab_context&lt;br /&gt;
sudo mkdir -p /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir mounten tmpfs mit einem einheitlichen Kontext&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
sudo mount -t tmpfs none /mnt/lab_context -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
ls -Zd /mnt/lab_context&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun erstellen wir einige Objekte darin&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /mnt/lab_context/file1&lt;br /&gt;
mkdir /mnt/lab_context/dir1&lt;br /&gt;
ls -lZ1 /mnt/lab_context&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt versuchen wir, den Kontext manuell zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -t tmp_t /mnt/lab_context/file1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Der Kernel gibt einen Fehler zurück, da bei Verwendung des Mount-Parameters&#039;&#039;&#039; context= &#039;&#039;&#039;eine Kontextänderung nicht möglich ist.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nun versuchen wir, ein anderes Dateisystem mit dem Parameter defcontext= einzuhängen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
mount -t tmpfs none /mnt/lab_rootcontext -o rootcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
ls -Zd /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wir erstellen Objekte&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
touch /mnt/lab_rootcontext/file1&lt;br /&gt;
mkdir /mnt/lab_rootcontext/dir1&lt;br /&gt;
touch /mnt/lab_rootcontext/file2&lt;br /&gt;
ls -lZ1 /mnt/lab_rootcontext&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wie man sehen kann, wurde der Kontext der Dateien vom root-Verzeichnis geerbt&lt;br /&gt;
&lt;br /&gt;
Nun versuchen wir, den Kontext zu ändern&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t tmp_t /mnt/lab_rootcontext/*&lt;br /&gt;
ls -lZ1 /mnt/lab_rootcontext/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Und der Vorgang wird erfolgreich ausgeführt, da&#039;&#039;&#039; rootcontext &#039;&#039;&#039;nur den Kontext des Wurzelverzeichnisses des eingehängten Dateisystems ändert.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Das kann nützlich sein, wenn ein temporärer Speicher auf tmpfs benötigt wird, dessen Wurzel jedoch sofort den richtigen Typ haben soll, damit neue Dateien den gewünschten Kontext erben&lt;br /&gt;
* Gleichzeitig bleibt die Möglichkeit erhalten, andere Dateien mit bereits vorhandenem, vom Wurzelverzeichnis abweichendem Kontext zu schreiben&lt;br /&gt;
&lt;br /&gt;
== Wiederherstellung korrekter Labels ==&lt;br /&gt;
; Relabeling mit restorecon&lt;br /&gt;
&lt;br /&gt;
Der Arbeitsablauf von restorecon lässt sich vereinfacht wie folgt beschreiben&lt;br /&gt;
# Das Werkzeug übernimmt einen Zielpfad und liest die aktive SELinux-Policy bzw.&amp;amp;nbsp;die zugehörige File-Context-Datenbasis&lt;br /&gt;
# Der Zielpfad wird gegen die regulären Ausdrücke aus der Policy-Datenbasis abgeglichen&lt;br /&gt;
# Das Werkzeug liest den tatsächlich gesetzten erweiterten Dateiattributwert (xattr) des Objekts direkt aus dem Dateisystem&lt;br /&gt;
# Anschließend erfolgt ein Vergleich zwischen dem laut Policy erwarteten Kontext und dem tatsächlich gesetzten Label (Attribut) des Objekts&lt;br /&gt;
# Falls die Prüfung rekursiv für ein Verzeichnis ausgeführt wurde, berechnet restorecon einen Hash über die dabei verwendeten regulären Ausdrücke und speichert ihn im versteckten Attribut des Verzeichnisses security.sehash&lt;br /&gt;
#* Beim nächsten Lauf beginnt Schritt 2 dann mit dem Vergleich dieses Hashes, um Zeit zu sparen&lt;br /&gt;
&lt;br /&gt;
==== Verwendung ====&lt;br /&gt;
In der Praxis werden drei Betriebsarten verwendet&lt;br /&gt;
&lt;br /&gt;
; Passive Prüfung ohne Änderungen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -nv /var/www/html/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Option -n verhindert das Schreiben neuer Labels und versetzt das Werkzeug in den Prüfmodus&lt;br /&gt;
* Der Parameter -v zeigt Objekte an, deren Labels vom erwarteten Zustand abweichen&lt;br /&gt;
&lt;br /&gt;
; Korrektur eines einzelnen Objekts&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -v /var/www/html/index.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Korrigiert den Kontext der angegebenen Datei&lt;br /&gt;
* Praktisch werden dabei genau die Änderungen angewendet, die im vorherigen Beispiel lediglich angezeigt wurden&lt;br /&gt;
&lt;br /&gt;
; Massenhafte rekursive Korrektur eines Verzeichnisbaums&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -Rv /var&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Optionen -R und -r aktivieren den rekursiven Verzeichnisdurchlauf&lt;br /&gt;
* Genau dieser Modus wird typischerweise nach dem Hinzufügen neuer Regeln mit semanage fcontext oder nach einer beschädigten Teil-Relabeling-Situation verwendet&lt;br /&gt;
&lt;br /&gt;
=== customizable types ===&lt;br /&gt;
In SELinux existiert ein Ausnahme-Mechanismus für Relabeling mit der Bezeichnung customizable types&lt;br /&gt;
&lt;br /&gt;
Dabei handelt es sich um eine vordefinierte Liste von Kontexten (Typen), die vom System als manuell administrierbar betrachtet werden&lt;br /&gt;
* Entsprechend werden solche Dateien bei der Prüfung und beim Relabeling durch SELinux-Werkzeuge und -Mechanismen (einschließlich restorecon, .autorelabel, setfiles, fixfiles) ignoriert&lt;br /&gt;
&lt;br /&gt;
Die Liste der customizable types wird aus folgender Datei gelesen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
/etc/selinux/{SELINUXPOLICY}/contexts/customizable_types&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obwohl der Mechanismus der customizable types in modernen Distributionen weiterhin existiert und funktioniert, gilt er in der Administratoren-Community heute als &#039;&#039;&#039;veraltender Ansatz&#039;&#039;&#039;&lt;br /&gt;
* Der Grund ist, dass die Datei lediglich Informationen darüber enthält, welche Typen ignoriert werden, nicht jedoch, welchen konkreten Dateien diese Typen zugewiesen wurden&lt;br /&gt;
* In einer Störungssituation kann diese Information unwiederbringlich verloren gehen&lt;br /&gt;
* Die File-Context-Datenbank enthält dagegen alle erforderlichen Informationen, um den gewünschten Label-Zustand im Dateisystem reproduzierbar wiederherzustellen&lt;br /&gt;
&lt;br /&gt;
Um Dateien mit customizable types dennoch zwangsweise auf den vollständig erwarteten Kontext zurückzusetzen, muss restorecon mit dem Parameter -F (Force) ausgeführt werden&lt;br /&gt;
* In diesem Fall werden &#039;&#039;&#039;alle Felder des Kontexts wiederhergestellt&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -F -v /srv/custom_app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beschleunigung durch Digest-Prüfung ===&lt;br /&gt;
; Das Werkzeug restorecon_xattr&lt;br /&gt;
Beim rekursiven Relabeling mit restorecon -D durchläuft das Werkzeug den Verzeichnisbaum nicht nur und korrigiert Kontexte, sondern &#039;&#039;&#039;schreibt zusätzlich einen internen Digest in das xattr des Verzeichnisses&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
; Digest wird im erweiterten Attribut &#039;&#039;security.sehash&#039;&#039; gespeichert&lt;br /&gt;
&lt;br /&gt;
Die Aufgabe dieses Digests besteht darin festzuhalten, dass dieses Verzeichnis bereits gegen einen bestimmten Satz von file_contexts-Dateien geprüft wurde, die für die Zuordnung von Pfaden zu erwarteten Kontexten verwendet werden&lt;br /&gt;
* Beim nächsten Lauf von restorecon -D wird dieser Hash zur Prüfung herangezogen und bei Bedarf aktualisiert, falls er veraltet ist&lt;br /&gt;
In modernen RHEL-Versionen wird zur Berechnung dieses Werts &#039;&#039;&#039;der kryptographische Algorithmus SHA-256&#039;&#039;&#039; verwendet (in älteren Systemen kam SHA-1 zum Einsatz).&lt;br /&gt;
&#039;&#039;&#039;Red Hat/Fedora&#039;&#039;&#039; verwenden seit RHEL 9 bzw.&amp;amp;nbsp;Fedora 34+ beim Paket-Build einen eigenen Patch für den Quellcode&lt;br /&gt;
* In den Paketquellen findet sich dazu direkt eine Datei mit dem Namen 0001-Use-SHA-2-instead-of-SHA-1.patch&lt;br /&gt;
&lt;br /&gt;
Debian verwendet weiterhin SHA-1&lt;br /&gt;
* Das ist in diesem Kontext jedoch unkritisch, da der Hash im Verzeichnis-xattr nicht für Sicherheitsfunktionen oder Verschlüsselung verwendet wird&lt;br /&gt;
&lt;br /&gt;
==== restorecon_xattr ====&lt;br /&gt;
Für die Arbeit mit diesen internen Digest-Einträgen (Anzeigen/Bereinigen) stehen folgende Kommandos zur Verfügung&lt;br /&gt;
* restorecon -D (Hashes erzeugen / Dateien unter Verwendung vorhandener Hashes prüfen)&lt;br /&gt;
* restorecon -I (Hashes erzeugen / neu erzeugen, wobei vorhandene ignoriert werden)&lt;br /&gt;
* sowie das separate Werkzeug restorecon_xattr (Hashes anzeigen / löschen)&lt;br /&gt;
&lt;br /&gt;
; Funktionen von restorecon_xattr&lt;br /&gt;
* &#039;&#039;&#039;Verzeichnisse anzeigen&#039;&#039;&#039;, in denen security.sehash vorhanden ist&lt;br /&gt;
* &#039;&#039;&#039;Digest und dessen Status&#039;&#039;&#039; im Vergleich zum aktuellen Policy-Satz anzeigen&lt;br /&gt;
* &#039;&#039;&#039;nur veraltete Digest-Einträge löschen&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;alle Digest-Einträge&#039;&#039;&#039; in einem angegebenen Verzeichnisbaum löschen&lt;br /&gt;
&lt;br /&gt;
; Praxisbeispiel mit einigen Hashes&lt;br /&gt;
Start von restorecon mit dem Flag -D und rekursivem Modus -R&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -RDv /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anzeige des Ergebnisses mit restorecon_xattr (zusätzlich mit -r für rekursive Ausgabe)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -r /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zum Entfernen von Hashes, die nicht mehr zum aktuellen Policy-Satz passen, wird der Parameter -d verwendet&lt;br /&gt;
&lt;br /&gt;
Das Werkzeug berechnet einen neuen Hash und entfernt den alten Hash bei Nichtübereinstimmung (neue Hashes werden dabei nicht geschrieben)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -d -r /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vollständiges Entfernen aller Digests&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon_xattr -D -r /var/www&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden alle security.sehash-Einträge aus dem Verzeichnisbaum entfernt, unabhängig davon, ob sie noch aktuell sind oder nicht&lt;br /&gt;
* Der nächste Lauf von restorecon -D muss die Digests anschließend vollständig neu erzeugen&lt;br /&gt;
&lt;br /&gt;
Wichtig ist, dass sich der Nutzen von restorecon -D erst bei &#039;&#039;&#039;rekursiver Verarbeitung&#039;&#039;&#039; (-R / -r) entfaltet&lt;br /&gt;
* Nach einem erfolgreichen rekursiven Relabeling wird beim erneuten Ausführen von restorecon -D (mit denselben Parametern und demselben Policy-Satz) der gespeicherte Digest zur Beschleunigung des Verzeichnisdurchlaufs verwendet&lt;br /&gt;
* Das ist insbesondere bei der Prüfung großer Verzeichnisbäume oder sogar des gesamten Dateisystems ab / nützlich&lt;br /&gt;
&lt;br /&gt;
Das bedeutet: &#039;&#039;&#039;Wenn der Parameter&#039;&#039;&#039; -D &#039;&#039;&#039;gesetzt ist&#039;&#039;&#039;, wird für &#039;&#039;&#039;Verzeichnisse ohne vorhandenen Hash&#039;&#039;&#039; ein neuer Digest berechnet und in den Attributen gespeichert&lt;br /&gt;
* Falls &#039;&#039;&#039;für ein Verzeichnis bereits ein Hash existiert&#039;&#039;&#039;, prüft restorecon dessen Gültigkeit, indem es ihn mit dem neu aus der File-Context-Datenbank berechneten Wert vergleicht. &#039;&#039;&#039;Bei Übereinstimmung wird das Verzeichnis beschleunigt verarbeitet.&#039;&#039;&#039; &#039;&#039;&#039;Bei Nichtübereinstimmung erfolgt die Prüfung des aktuellen Verzeichnisses und aller Unterverzeichnisse im normalen Modus&#039;&#039;&#039;, also so, als wäre -D nicht gesetzt&lt;br /&gt;
&lt;br /&gt;
Wird der Parameter -D nicht verwendet, nutzt restorecon den Mechanismus security.sehash bei der Prüfung überhaupt nicht&lt;br /&gt;
&lt;br /&gt;
Wird restorecon -I verwendet, wird ein bereits gespeicherter Digest ignoriert&lt;br /&gt;
* Selbst wenn security.sehash formal übereinstimmt, vertraut restorecon diesem Eintrag nicht und &#039;&#039;&#039;führt im rekursiven Modus zwangsweise eine erneute vollständige Label-Prüfung durch; anschließend wird der Digest aktualisiert&#039;&#039;&#039;&lt;br /&gt;
* Voraussetzung ist, dass das Flag -n nicht gesetzt ist und während der Ausführung keine Fehler auftreten&lt;br /&gt;
&lt;br /&gt;
; Anwendungsbeispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
restorecon -RIv /var/log&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Verzeichnis wird rekursiv geprüft, und jeder Hash wird unabhängig davon, ob bereits ein Digest in den Attributen vorhanden ist, neu erzeugt&lt;br /&gt;
&lt;br /&gt;
== Relabeling-Werkzeuge ==&lt;br /&gt;
; Die Werkzeuge für Relabeling lassen sich in drei Ebenen unterteilen&lt;br /&gt;
&lt;br /&gt;
* setfiles&lt;br /&gt;
** Das grundlegende, low-level ausführbare Binärprogramm (in C geschrieben)&lt;br /&gt;
** Es bildet den Kernmechanismus zur Anwendung der Policy&lt;br /&gt;
** restorecon arbeitet auf Basis von setfiles&lt;br /&gt;
* restorecon&lt;br /&gt;
** Ein Werkzeug auf Benutzerebene, das für gezielte administrative Eingriffe vorgesehen ist&lt;br /&gt;
** restorecon findet, lädt und verwendet automatisch die &#039;&#039;&#039;aktuell aktive SELinux-Policy&#039;&#039;&#039;&lt;br /&gt;
** Das Werkzeug restorecon wird durch dieselbe ausführbare Datei implementiert wie setfiles&lt;br /&gt;
** Der Betriebsmodus wird über argv[0] gewählt, also über den Namen, unter dem das Programm aufgerufen wird&lt;br /&gt;
* fixfiles&lt;br /&gt;
** Dabei handelt es sich nicht um eine Binärdatei, sondern um ein Shell-Skript, das den Aufruf von setfiles und restorecon für globale Systemaufgaben automatisiert&lt;br /&gt;
** Es ist eine skriptbasierte Wrapper-Schicht für typische Wartungsoperationen wie check, verify, restore, relabel, onboot sowie für paketbezogene und inkrementelle Betriebsarten&lt;br /&gt;
** Das Werkzeug kann mit der Datenbank des Paketmanagers (RPM) arbeiten&lt;br /&gt;
** So kann es beispielsweise alle Dateien ermitteln, die zu einem bestimmten Paket gehören, und ausschließlich diese neu labeln&lt;br /&gt;
** Außerdem steuert es den Ablauf eines vollständigen System-Relabelings beim Booten&lt;br /&gt;
&lt;br /&gt;
=== Betriebsarten von fixfiles ===&lt;br /&gt;
==== fixfiles check / fixfiles verify ====&lt;br /&gt;
check und verify sind Betriebsarten ohne Änderung der Labels&lt;br /&gt;
* Sie geben alle inkorrekten Labels aus und zeigen dabei den alten sowie den neuen Kontext an, schreiben jedoch nichts zurück&lt;br /&gt;
* Das ist ein praktischer administrativer Audit-Modus vor einem Relabeling oder nach Änderungen an den Regeln&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;&amp;quot; copy line&amp;gt;&lt;br /&gt;
chcon -R -t tmp_t /var/www&lt;br /&gt;
chcon -R -t shadow_t /srv&lt;br /&gt;
fixfiles check /var/www /srv&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles restore ====&lt;br /&gt;
restore stellt inkorrekte Labels wieder her&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles restore /var/www /srv/app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles relabel ====&lt;br /&gt;
relabel ist für ein vollständiges Relabeling des gesamten Dateisystems vorgesehen&lt;br /&gt;
* Das Werkzeug schlägt vor, den Inhalt von /tmp zu löschen&lt;br /&gt;
* Anschließend werden alle inkorrekten Dateilabels so korrigiert, dass sie den installierten file_contexts entsprechen&lt;br /&gt;
&lt;br /&gt;
; Beispiel&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles relabel&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== fixfiles onboot ====&lt;br /&gt;
onboot führt das Relabeling nicht sofort aus, sondern bereitet das System so vor, dass das Relabeling beim nächsten Systemstart erfolgt&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; highlight=&amp;quot;1&amp;quot; copy line&amp;gt;&lt;br /&gt;
fixfiles onboot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optionen ===&lt;br /&gt;
; Wichtige Optionen&lt;br /&gt;
{| class=&amp;quot;wikitable options big&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Unix !! Beschreibung&lt;br /&gt;
|-&lt;br /&gt;
| -F || (Force) Setzt den Kontext auch bei Dateien mit customizable types zwangsweise zurück&lt;br /&gt;
|-&lt;br /&gt;
| -f || (force clear) Leert die temporären Verzeichnisse /tmp und /var/tmp automatisch vor Beginn der Ausführung, ohne interaktive Rückfragen&lt;br /&gt;
* Das ist besonders nützlich für Automatisierungsskripte&lt;br /&gt;
|-&lt;br /&gt;
| -C PREVIOUS_FILECONTEXT  || (Compare) Vergleicht einen alten file_contexts-Stand mit dem aktuellen und stellt Kontexte nur dort wieder her, wo dies erforderlich ist&lt;br /&gt;
|-&lt;br /&gt;
| -N &amp;quot;YYYY-MM-DD HH:MM&amp;quot;  || (Newer) Beschränkt die Verarbeitung auf Dateien, die nach dem angegebenen Zeitpunkt erstellt wurden&lt;br /&gt;
|-&lt;br /&gt;
| -B  ||  Im Modus restore werden nur Dateien berücksichtigt, die heute verändert wurden&lt;br /&gt;
* Im Modus onboot schreibt derselbe Schalter das aktuelle Datum in /.autorelabel, wodurch das Relabeling beschleunigt werden kann&lt;br /&gt;
|-&lt;br /&gt;
| -M  || (Mounts) Führt vor dem Relabeling Bind-Mounts für Dateisysteme aus, sodass auch Kontexte von Objekten korrekt repariert werden können, über denen etwas eingehängt ist&lt;br /&gt;
|-&lt;br /&gt;
| -T nthreads  || (Threads) Konfiguriert die parallele Verarbeitung mit mehreren Threads oder deaktiviert diese bei -T 1&lt;br /&gt;
|-&lt;br /&gt;
| -l LOGPATH  || (Log) Leitet die gesamte Ausgabe, also sowohl Standardausgabe als auch Fehlermeldungen, in die angegebene Logdatei statt auf den Bildschirm um&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RHEL ==&lt;br /&gt;
&lt;br /&gt;
=== Einbinden von Dateisystemen ===&lt;br /&gt;
Standardmäßig wird beim Einbinden eines Dateisystems, das erweiterte Attribute unterstützt, der Sicherheitskontext für jede Datei aus dem ‚&#039;security.selinux‘&#039;&lt;br /&gt;
 &lt;br /&gt;
erweiterten Attribut der Datei&lt;br /&gt;
* Dateien in Dateisystemen, die keine erweiterten Attribute unterstützen, wird ein einziger Standard-Sicherheitskontext aus der Richtlinienkonfiguration zugewiesen, basierend auf dem Dateisystemtyp&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* 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&lt;br /&gt;
* 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&lt;br /&gt;
* Der mit der Option [[context]] angegebene Kontext wird nicht auf die Festplatte geschrieben&lt;br /&gt;
die ursprünglichen Kontexte bleiben erhalten und sind beim Einbinden ohne [[context]] sichtbar, sofern das Dateisystem ursprünglich über erweiterte Attribute verfügte&lt;br /&gt;
&lt;br /&gt;
Weitere Informationen zur Dateisystem-Kennzeichnung finden Sie in James Morris&#039; Artikel „Filesystem Labeling in SELinux“&lt;br /&gt;
http://www.linuxjournal.com/article/7426&lt;br /&gt;
&lt;br /&gt;
==== Kontext-Mounts ====&lt;br /&gt;
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=‚&#039;SELinux_user:role:type:level‘&#039;]] beim Einhängen des gewünschten Dateisystems&lt;br /&gt;
* Kontextänderungen werden nicht auf die Festplatte geschrieben&lt;br /&gt;
* Standardmäßig werden NFS-Einhängungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist&lt;br /&gt;
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]&lt;br /&gt;
* Ohne zusätzliche Mount-Optionen kann dies die Freigabe von NFS-Volumes über andere Dienste, wie den Apache-HTTP-Server, verhindern&lt;br /&gt;
* Das folgende Beispiel mountet ein NFS-Volume so, dass es über den Apache-HTTP-Server freigegeben werden kann&lt;br /&gt;
 sudo mount server:/export /local/mount/point -o \ context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Neu erstellte Dateien und Verzeichnisse auf diesem Dateisystem scheinen den mit [[-o context]] angegebenen SELinux-Kontext zu haben&lt;br /&gt;
* Da diese Änderungen jedoch nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Mountvorgängen nicht erhalten&lt;br /&gt;
* Daher muss diese Option bei jedem Mountvorgang mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten&lt;br /&gt;
* Informationen dazu, wie man Kontext-Mounts dauerhaft macht, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“&lt;br /&gt;
&lt;br /&gt;
Die Typen-Durchsetzung ist die wichtigste Berechtigungssteuerung, die in der SELinux-Targeted-Policy verwendet wird&lt;br /&gt;
* 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&lt;br /&gt;
* Wenn Sie nicht die MLS-Policy oder die Multi-Kategorie-Sicherheit verwenden, verwenden Sie die [[s0]]-Ebene&lt;br /&gt;
&lt;br /&gt;
; Hinweis&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dateisystem mit einer [[context]]-Option eingebunden wird, sind Kontextänderungen durch Benutzer und Prozesse untersagt&lt;br /&gt;
* 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]]&lt;br /&gt;
&lt;br /&gt;
==== Ändern des Standardkontexts ====&lt;br /&gt;
Wie in Abschnitt&amp;amp;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&lt;br /&gt;
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[file_t]]&lt;br /&gt;
* Wenn ein anderer Standardkontext verwendet werden soll, mounten Sie das Dateisystem mit der Option [[defcontext]]&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel mountet ein neu erstelltes Dateisystem auf [[/ &lt;br /&gt;
dev/sda2]] in das neu erstellte Verzeichnis [[test/]] ein&lt;br /&gt;
* Dabei wird davon ausgegangen, dass es in [[/etc/selinux/targeted/contexts/files/]] keine Regeln gibt, die einen Kontext für das Verzeichnis [[test/]] definieren&lt;br /&gt;
 sudo mount /dev/sda2 /test/ -o defcontext=&amp;quot;system_u:object_r:samba_share_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel&lt;br /&gt;
* definiert die Option [[defcontext]], dass [[system_u:object_r:samba_share_t:s0]] „der Standard-Sicherheitskontext für nicht gekennzeichnete Dateien“ ist[5]&lt;br /&gt;
* 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)&lt;br /&gt;
* Dies wirkt sich auf die Kennzeichnung von Dateien aus, die unter [[test/]] erstellt werden&lt;br /&gt;
neue Dateien erben den Typ [[samba_share_t]], und diese Kennzeichnungen werden auf der Festplatte gespeichert&lt;br /&gt;
* Dateien, die unter [[test/]] erstellt wurden, während das Dateisystem mit der Option [[defcontext]] eingebunden war, behalten ihre Kennzeichnungen&lt;br /&gt;
&lt;br /&gt;
==== Einbinden eines NFS-Volumes ====&lt;br /&gt;
Standardmäßig werden NFS-Einbindungen auf der Client-Seite mit einem Standardkontext gekennzeichnet, der durch die Richtlinie für NFS-Volumes definiert ist&lt;br /&gt;
* In gängigen Richtlinien verwendet dieser Standardkontext den Typ [[nfs_t]]&lt;br /&gt;
* 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&lt;br /&gt;
* Dies kann verhindern, dass Dateisysteme, die mit diesem Typ gekennzeichnet sind, eingebunden und anschließend von anderen Diensten gelesen oder exportiert werden&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* Verwenden Sie die folgende context-Option, um NFS-Volumes so einzuhängen, dass sie über den Apache-HTTP-Server freigegeben werden können&lt;br /&gt;
 sudo mount server:/export /local/mount/point -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Da diese Änderungen nicht auf die Festplatte geschrieben werden, bleibt der mit dieser Option angegebene Kontext zwischen den Einhängevorgängen nicht erhalten&lt;br /&gt;
* Daher muss diese Option bei jedem Einbinden mit demselben Kontext verwendet werden, um den erforderlichen Kontext beizubehalten&lt;br /&gt;
* Informationen dazu, wie Kontext-Mounts dauerhaft gemacht werden können, finden Sie im Abschnitt „Kontext-Mounts dauerhaft machen“&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
==== Mehrere NFS-Mounts ====&lt;br /&gt;
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&lt;br /&gt;
* Im folgenden Beispiel verfügt der NFS-Server über einen einzigen Export, [[export/]], der zwei Unterverzeichnisse enthält: [ [web/]] und [[database/]]&lt;br /&gt;
* Die folgenden Befehle versuchen zwei Mounts von einem einzigen NFS-Export und versuchen, den Kontext für jeden einzelnen zu überschreiben&lt;br /&gt;
 sudo mount server:/export/web /local/web -o context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot;&lt;br /&gt;
 sudo mount server:/export/database /local/database -o context=&amp;quot;system_u:object_r:mysqld_db_t:s0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Der zweite Mount-Befehl schlägt fehl, und Folgendes wird in [[/var/log/messages]] protokolliert&lt;br /&gt;
kernel&lt;br /&gt;
SELinux&lt;br /&gt;
mount invalid&lt;br /&gt;
* Gleicher Superblock, unterschiedliche Sicherheitseinstellungen für (dev 0:15, Typ nfs)&lt;br /&gt;
&lt;br /&gt;
Um mehrere Mounts aus einem einzigen NFS-Export durchzuführen, wobei jeder Mount einen anderen Kontext hat, verwenden Sie die [[-o nosharecache,context]]-Optionen&lt;br /&gt;
* 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)&lt;br /&gt;
 sudo mount server:/export/web /local/web -o nosharecache,context=„system_u:object_r:httpd_sys_content_t:s0“&lt;br /&gt;
 sudo mount server:/export/database /local/database -o \ nosharecache,context=„system_u:object_r:mysqld_db_t:s0“&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* Diese Typänderungen werden nicht auf die Festplatte geschrieben&lt;br /&gt;
&lt;br /&gt;
; Wichtig&lt;br /&gt;
&lt;br /&gt;
Die Option [[nosharecache]] ermöglicht es Ihnen, dasselbe Unterverzeichnis eines Exports mehrfach mit unterschiedlichen Kontexten einzuhängen, beispielsweise [[/export/web/]] mehrfach&lt;br /&gt;
* 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&lt;br /&gt;
&lt;br /&gt;
==== Kontext-Einbindungen dauerhaft machen ====&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
Das folgende Beispiel fügt einen Eintrag in [[/etc/fstab]] für eine NFS-Kontext-Einbindung hinzu&lt;br /&gt;
 server:/export /local/mount/ nfs context=&amp;quot;system_u:object_r:httpd_sys_content_t:s0&amp;quot; 0 0&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Linux/SELinux/04]]&lt;/div&gt;</summary>
		<author><name>DanielZorin</name></author>
	</entry>
</feed>