Zum Inhalt springen

Linux/SELinux/11 Fehlerbehebung: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 3: Zeile 3:
== Beschreibung ==
== Beschreibung ==
; Fehlerbehebung
; Fehlerbehebung
Das folgende Kapitel beschreibt, was passiert, wenn SELinux den Zugriff verweigert; die drei häufigsten Ursachen für Probleme; wo Informationen zur korrekten Kennzeichnung zu finden sind; die Analyse von SELinux-Verweigerungen; sowie das Erstellen benutzerdefinierter Policy-Module mit '''audit2allow'''.
Das folgende Kapitel beschreibt, was passiert, wenn SELinux den Zugriff verweigert; die drei häufigsten Ursachen für Probleme; wo Informationen zur korrekten Kennzeichnung zu finden sind; die Analyse von SELinux-Verweigerungen; sowie das Erstellen benutzerdefinierter Policy-Module mit '''audit2allow'''


== Was passiert, wenn der Zugriff verweigert wird ==
== Was passiert, wenn der Zugriff verweigert wird ==
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert.
SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert
* Dieser Cache wird als Access Vector Cache (AVC) bezeichnet.
* Dieser Cache wird als Access Vector Cache (AVC) bezeichnet
* Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert.
* Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert
* Diese Verweigerungen werden auch als „AVC-Verweigerungen“ bezeichnet und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:
 
{|
Diese Verweigerungen werden auch als „AVC-Verweigerungen“ bezeichnet und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:
{| class="wikitable options big"
|-
|-
! | Daemon
! | Daemon
Zeile 22: Zeile 23:
|-
|-
|| setroubleshootd, rsyslogd und auditd ein
|| setroubleshootd, rsyslogd und auditd ein
|| '''/var/log/audit/audit.log'''.
|| '''/var/log/audit/audit.log'''
* Besser lesbare Verweigerungsmeldungen werden ebenfalls an '''/var/log/messages''' gesendet
* Besser lesbare Verweigerungsmeldungen werden ebenfalls an '''/var/log/messages''' gesendet
|-
|-
Zeile 30: Zeile 31:
[[Image:Bild1.png|top]]
[[Image:Bild1.png|top]]


Ein Klick auf '''Anzeigen''' 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.
Ein Klick auf '''Anzeigen''' 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
* Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird.
* Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird
* Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:
* Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:
Zugriff verweigert
Zugriff verweigert
Zeile 37: Zeile 38:
Sie haben keine Berechtigung, auf ‚'Dateiname‘' auf diesem Server zuzugreifen
Sie haben keine Berechtigung, auf ‚'Dateiname‘' auf diesem Server zuzugreifen


In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien '''/var/log/messages''' und '''/var/log/audit/audit.log''' auf Fehlermeldungen wie '''„SELinux is preventing“''' bzw. '''„denied“''' überprüfen.
In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien '''/var/log/messages''' und '''/var/log/audit/audit.log''' auf Fehlermeldungen wie '''„SELinux is preventing“''' bzw. '''„denied“''' überprüfen
* Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:
* Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:
 
sudo grep „SELinux is preventing“ /var/log/messages
sudo grep „SELinux is preventing“ /var/log/messages
  sudo grep „denied“ /var/log/audit/audit.log
  sudo grep „denied“ /var/log/audit/audit.log


== Die drei häufigsten Ursachen für Probleme ==
== Die drei häufigsten Ursachen für Probleme ==
In den folgenden Abschnitten werden die drei häufigsten Ursachen für Probleme beschrieben: Probleme mit der Labeling, die Konfiguration von Booleans und Ports für Dienste sowie sich weiterentwickelnde SELinux-Regeln.
In den folgenden Abschnitten werden die drei häufigsten Ursachen für Probleme beschrieben: Probleme mit der Labeling, die Konfiguration von Booleans und Ports für Dienste sowie sich weiterentwickelnde SELinux-Regeln


=== Probleme mit der Labeling ===
=== Probleme mit der Labeling ===
Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien mit einem Label versehen, das sicherheitsrelevante Informationen enthält.
Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien mit einem Label versehen, das sicherheitsrelevante Informationen enthält
* Diese Informationen werden als SELinux-Kontext bezeichnet.
* Diese Informationen werden als SELinux-Kontext bezeichnet
* Wenn diese Labels falsch sind, kann der Zugriff verweigert werden.
* Wenn diese Labels falsch sind, kann der Zugriff verweigert werden
* Eine falsch gekennzeichnete Anwendung kann dazu führen, dass ihrem Prozess ein falsches Label zugewiesen wird.
* Eine falsch gekennzeichnete Anwendung kann dazu führen, dass ihrem Prozess ein falsches Label zugewiesen wird
* Dies kann dazu führen, dass SELinux den Zugriff verweigert und der Prozess falsch gekennzeichnete Dateien erstellt.
* Dies kann dazu führen, dass SELinux den Zugriff verweigert und der Prozess falsch gekennzeichnete Dateien erstellt


Eine häufige Ursache für Probleme mit der Kennzeichnung ist die Verwendung eines nicht standardmäßigen Verzeichnisses für einen Dienst.
Eine häufige Ursache für Probleme mit der Kennzeichnung ist die Verwendung eines nicht standardmäßigen Verzeichnisses für einen Dienst
* Anstatt beispielsweise '''/var/www/html/''' für eine Website zu verwenden, möchte ein Administrator '
* Anstatt beispielsweise '''/var/www/html/''' für eine Website zu verwenden, möchte ein Administrator '
  ‚‘/srv/myweb/‚‘ verwenden.
  '''/srv/myweb/''' verwenden
* Unter Red Hat Enterprise Linux ist das Verzeichnis '''/srv''' mit dem Typ '''var_t''' gekennzeichnet.
* Unter Red Hat Enterprise Linux ist das Verzeichnis '''/srv''' mit dem Typ '''var_t''' gekennzeichnet
* In '''/srv''' erstellte Dateien und Verzeichnisse erben diesen Typ.
* In '''/srv''' erstellte Dateien und Verzeichnisse erben diesen Typ
* Außerdem können neu erstellte Objekte in Verzeichnissen der obersten Ebene (wie z.
* Außerdem können neu erstellte Objekte in Verzeichnissen der obersten Ebene (wie z
* B. '''/myserver''') mit dem Typ '''default_t''' gekennzeichnet sein.
* B. '''/myserver''') mit dem Typ '''default_t''' gekennzeichnet sein
* SELinux verhindert, dass der Apache-HTTP-Server ('''httpd''') auf beide dieser Typen zugreifen kann.
* SELinux verhindert, dass der Apache-HTTP-Server ('''httpd''') auf beide dieser Typen zugreifen kann
* Um den Zugriff zu ermöglichen, muss SELinux wissen, dass die Dateien in '''/srv/myweb/''' für '''httpd''' zugänglich sein sollen:  
 
sudo semanage fcontext -a -t httpd_sys_content_t „/srv/myweb(/.*)?“
Um den Zugriff zu ermöglichen, muss SELinux wissen, dass die Dateien in '''/srv/myweb/''' für '''httpd''' zugänglich sein sollen:
sudo semanage fcontext -a -t httpd_sys_content_t „/srv/myweb(/.*)?“
 
Dieser '''semanage''' Befehl fügt den Kontext für das Verzeichnis '''/srv/myweb/''' (und alle darunter liegenden Dateien und Verzeichnisse) zur SELinux-Dateikontextkonfiguration hinzu[8]
* Das Dienstprogramm '''semanage''' ändert den Kontext nicht


Dieser '''semanage''' Befehl fügt den Kontext für das Verzeichnis '''/srv/myweb/''' (und alle darunter liegenden Dateien und Verzeichnisse) zur SELinux-Dateikontextkonfiguration hinzu[8].
Führen Sie als root das Dienstprogramm '''restorecon''' aus, um die Änderungen zu übernehmen:
* Das Dienstprogramm '''semanage''' ändert den Kontext nicht.
* Führen Sie als root das Dienstprogramm '''restorecon''' aus, um die Änderungen zu übernehmen:
  sudo restorecon -R -v /srv/myweb
  sudo restorecon -R -v /srv/myweb


Weitere Informationen zum Hinzufügen von Kontexten zur Dateikontextskonfiguration finden Sie im Abschnitt „[[Persistente Änderungen: semanage fcontext]]“.
Weitere Informationen zum Hinzufügen von Kontexten zur Dateikontextskonfiguration finden Sie im Abschnitt „[[Persistente Änderungen: semanage fcontext]]“


==== Was ist der richtige Kontext? ====
==== Was ist der richtige Kontext? ====
Das Dienstprogramm '''matchpathcon''' überprüft den Kontext eines Dateipfads und vergleicht ihn mit der Standard-Label für diesen Pfad.
Das Dienstprogramm '''matchpathcon''' überprüft den Kontext eines Dateipfads und vergleicht ihn mit der Standard-Label für diesen Pfad
* Das folgende Beispiel zeigt die Verwendung von '''matchpathcon''' für ein Verzeichnis, das falsch gelabelte Dateien enthält:
 
Das folgende Beispiel zeigt die Verwendung von '''matchpathcon''' für ein Verzeichnis, das falsch gelabelte Dateien enthält:
  matchpathcon -V /var/www/html/*
  matchpathcon -V /var/www/html/*
 
/var/www/html/index.html hat den Kontext unconfined_u:object_r:user_home_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
/var/www/html/index.html hat den Kontext unconfined_u:object_r:user_home_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
  / var/www/html/page1.html hat den Kontext unconfined_u:object_r:user_home_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein
  / var/www/html/page1.html hat den Kontext unconfined_u:object_r:user_home_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein


In diesem Beispiel sind die Dateien '''index.html''' und '''page1.html''' mit dem Typ '''user_home_t''' gekennzeichnet.
In diesem Beispiel sind die Dateien '''index.html''' und '''page1.html''' mit dem Typ '''user_home_t''' gekennzeichnet
* Dieser Typ wird für Dateien in Benutzer-Home-Verzeichnissen verwendet.
* Dieser Typ wird für Dateien in Benutzer-Home-Verzeichnissen verwendet
* Die Verwendung des Befehls '''mv''' zum Verschieben von Dateien aus Ihrem Home-Verzeichnis kann dazu führen, dass Dateien mit dem Typ '''user_home_t''' gekennzeichnet werden.
* Die Verwendung des Befehls '''mv''' zum Verschieben von Dateien aus Ihrem Home-Verzeichnis kann dazu führen, dass Dateien mit dem Typ '''user_home_t''' gekennzeichnet werden
* Dieser Typ sollte außerhalb von Home-Verzeichnissen nicht vorkommen.
* Dieser Typ sollte außerhalb von Home-Verzeichnissen nicht vorkommen
* Verwenden Sie das Dienstprogramm '''restorecon''', um solche Dateien wieder auf ihren korrekten Typ zurückzusetzen:
* Verwenden Sie das Dienstprogramm '''restorecon''', um solche Dateien wieder auf ihren korrekten Typ zurückzusetzen:
  sudo restorecon -v /var/www/html/ index.html
  sudo restorecon -v /var/www/html/ index.html
Zeile 88: Zeile 92:


Um den Kontext für alle Dateien in einem Verzeichnis wiederherzustellen, verwenden Sie die Option '''-R'''
Um den Kontext für alle Dateien in einem Verzeichnis wiederherzustellen, verwenden Sie die Option '''-R'''
   
 
sudo restorecon -R -v /var/www/html/
  sudo restorecon -R -v /var/www/html/
  restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
  restorecon reset /var/www/html/
  restorecon reset /var/www/html/
   
  index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0


Siehe Abschnitt&nbsp„[[Überprüfen des Standard-SELinux-Kontexts] ]“ für ein detaillierteres Beispiel zu '''matchpathcon'''.
Siehe Abschnitt&nbsp„[[Überprüfen des Standard-SELinux-Kontexts] ]“ für ein detaillierteres Beispiel zu '''matchpathcon'''


=== Wie werden eingeschränkte Dienste ausgeführt? ===
=== Wie werden eingeschränkte Dienste ausgeführt? ===
Dienste können auf verschiedene Arten ausgeführt werden.
Dienste können auf verschiedene Arten ausgeführt werden
* Um dies zu berücksichtigen, müssen Sie angeben, wie Sie Ihre Dienste ausführen.
* Um dies zu berücksichtigen, müssen Sie angeben, wie Sie Ihre Dienste ausführen
* Dies kann durch Boolesche Werte erreicht werden, die es ermöglichen, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen.
* Dies kann durch Boolesche Werte erreicht werden, die es ermöglichen, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen
* Dies ermöglicht Änderungen, wie z.
* Dies ermöglicht Änderungen, wie das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu laden oder neu kompilieren zu müssen
* B.
* Auch das Ausführen von Diensten auf nicht standardmäßigen Portnummern erfordert eine Aktualisierung der Richtlinienkonfiguration mithilfe des Befehls '''semanage'''
* das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu laden oder neu kompilieren zu müssen.
* Auch das Ausführen von Diensten auf nicht standardmäßigen Portnummern erfordert eine Aktualisierung der Richtlinienkonfiguration mithilfe des Befehls '''semanage'''.


Um beispielsweise dem Apache-HTTP-Server die Kommunikation mit MariaDB zu ermöglichen, aktivieren Sie den Booleschen Wert '''httpd_can_network_connect_db''' :
Um beispielsweise dem Apache-HTTP-Server die Kommunikation mit MariaDB zu ermöglichen, aktivieren Sie den Booleschen Wert '''httpd_can_network_connect_db''' :
  sudo setsebool -P httpd_can_network_connect_db on
  sudo setsebool -P httpd_can_network_connect_db on


Wenn der Zugriff für einen bestimmten Dienst verweigert wird, verwenden Sie die Dienstprogramme '''getsebool''' und '''grep''', um zu prüfen, ob Booleane verfügbar sind, die den Zugriff ermöglichen.
Wenn der Zugriff für einen bestimmten Dienst verweigert wird, verwenden Sie die Dienstprogramme '''getsebool''' und '''grep''', um zu prüfen, ob Booleane verfügbar sind, die den Zugriff ermöglichen


Verwenden Sie beispielsweise den Befehl '''getsebool -a | grep ftp''', um nach FTP-bezogenen Booleanen zu suchen:
Verwenden Sie beispielsweise den Befehl '''getsebool -a | grep ftp''', um nach FTP-bezogenen Booleanen zu suchen:
  getsebool -a | grep ftp
  getsebool -a | grep ftp
  ftpd_anon_write --> off
  ftpd_anon_write --> off
 
ftpd_full_access --> off
ftpd_full_access --> off
  ftpd_use_cifs --> off
  ftpd_use_cifs --> off
Zeile 122: Zeile 123:
  tftp_anon_write --> off
  tftp_anon_write --> off


Um eine Liste der Booleans und deren Status (aktiv oder inaktiv) anzuzeigen, führen Sie den Befehl '''getsebool -a''' aus.
Um eine Liste der Booleans und deren Status (aktiv oder inaktiv) anzuzeigen, führen Sie den Befehl '''getsebool -a''' aus
* Um eine Liste der Booleschen Werte, eine Erklärung zu deren Bedeutung sowie Angaben dazu zu erhalten, ob sie aktiviert oder deaktiviert sind, führen Sie als Root den Befehl '''semanage boolean -l''' aus.
* Um eine Liste der Booleschen Werte, eine Erklärung zu deren Bedeutung sowie Angaben dazu zu erhalten, ob sie aktiviert oder deaktiviert sind, führen Sie als Root den Befehl '''semanage boolean -l''' aus
* Informationen zum Auflisten und Konfigurieren von Booleschen Werten finden Sie in Abschnitt 4.6, „Boolesche Werte“.
* Informationen zum Auflisten und Konfigurieren von Booleschen Werten finden Sie in Abschnitt 4.6, „Boolesche Werte“


=== Portnummern ===
=== Portnummern ===
Je nach Richtlinienkonfiguration dürfen Dienste möglicherweise nur auf bestimmten Portnummern ausgeführt werden.
Je nach Richtlinienkonfiguration dürfen Dienste möglicherweise nur auf bestimmten Portnummern ausgeführt werden
* Der Versuch, den Port zu ändern, auf dem ein Dienst läuft, ohne die Richtlinie zu ändern, kann dazu führen, dass der Dienst nicht gestartet werden kann.
* Der Versuch, den Port zu ändern, auf dem ein Dienst läuft, ohne die Richtlinie zu ändern, kann dazu führen, dass der Dienst nicht gestartet werden kann
* Führen Sie beispielsweise als Root den Befehl '''semanage port -l | grep http''' aus, um '''http'''bezogene Ports aufzulisten:
 
Führen Sie beispielsweise als Root den Befehl '''semanage port -l | grep http''' aus, um '''http'''bezogene Ports aufzulisten:
  sudo semanage port -l | grep http
  sudo semanage port -l | grep http
  http_cache_port_t tcp 3128, 8080, 8118
  http_cache_port_t tcp 3128, 8080, 8118
Zeile 137: Zeile 139:
  pegasus_https_port_t tcp 5989
  pegasus_https_port_t tcp 5989


Der Porttyp '''http_port_t''' definiert die Ports, auf denen der Apache-HTTP-Server lauschen kann; in diesem Fall sind dies die TCP-Ports 80, 443, 488, 8008, 8009 und 8443.
Der Porttyp '''http_port_t''' definiert die Ports, auf denen der Apache-HTTP-Server lauschen kann; in diesem Fall sind dies die TCP-Ports 80, 443, 488, 8008, 8009 und 8443
* Wenn ein Administrator die Datei '''httpd.conf''' so konfiguriert, dass '''httpd''' auf Port 9876
 
Wenn ein Administrator die Datei '''httpd.conf''' so konfiguriert, dass '''httpd''' auf Port 9876 ('''Listen 9876'''), die Richtlinie jedoch nicht entsprechend aktualisiert wird, schlägt der folgende Befehl fehl:
('''Listen 9876'''), die Richtlinie jedoch nicht entsprechend aktualisiert wird, schlägt der folgende Befehl fehl:
  sudo systemctl start httpd.service
  sudo systemctl start httpd.service
  Der Job für httpd.service ist fehlgeschlagen.  
  Der Job für httpd.service ist fehlgeschlagen. Siehe ‚systemctl status httpd.service‘ und ‚journalctl -xn‘ für Details
* Siehe ‚systemctl status httpd.service‘ und ‚journalctl -xn‘ für Details.


  sudo systemctl status httpd.service
  sudo systemctl status httpd.service
Zeile 158: Zeile 158:
  sudo semanage port -a -t http_port_t -p tcp 9876
  sudo semanage port -a -t http_port_t -p tcp 9876


Die Option '''-a''' fügt einen neuen Eintrag hinzu; die Option '''-t''' definiert einen Typ; und die Option '''-p''' definiert ein Protokoll.
Die Option '''-a''' fügt einen neuen Eintrag hinzu; die Option '''-t''' definiert einen Typ; und die Option '''-p''' definiert ein Protokoll
* Das letzte Argument ist die hinzuzufügende Portnummer.
* Das letzte Argument ist die hinzuzufügende Portnummer


=== Sich weiterentwickelnde Regeln und fehlerhafte Anwendungen ===
=== Sich weiterentwickelnde Regeln und fehlerhafte Anwendungen ===
Anwendungen können fehlerhaft sein, was dazu führt, dass SELinux den Zugriff verweigert.
Anwendungen können fehlerhaft sein, was dazu führt, dass SELinux den Zugriff verweigert
* Außerdem entwickeln sich die SELinux-Regeln weiter – SELinux hat möglicherweise noch nie eine Anwendung gesehen, die auf eine bestimmte Weise läuft, was dazu führen kann, dass der Zugriff verweigert wird, obwohl die Anwendung wie erwartet funktioniert.
* Außerdem entwickeln sich die SELinux-Regeln weiter – SELinux hat möglicherweise noch nie eine Anwendung gesehen, die auf eine bestimmte Weise läuft, was dazu führen kann, dass der Zugriff verweigert wird, obwohl die Anwendung wie erwartet funktioniert
* Wenn beispielsweise eine neue Version von PostgreSQL veröffentlicht wird, führt diese möglicherweise Aktionen aus, die die aktuelle Richtlinie noch nicht kennt, was dazu führt, dass der Zugriff verweigert wird, obwohl er eigentlich erlaubt sein sollte.
* Wenn beispielsweise eine neue Version von PostgreSQL veröffentlicht wird, führt diese möglicherweise Aktionen aus, die die aktuelle Richtlinie noch nicht kennt, was dazu führt, dass der Zugriff verweigert wird, obwohl er eigentlich erlaubt sein sollte


Verwenden Sie in solchen Situationen nach einer Zugriffsverweigerung das Dienstprogramm '''audit2allow''', um ein benutzerdefiniertes Richtlinienmodul zu erstellen, das den Zugriff erlaubt.
Verwenden Sie in solchen Situationen nach einer Zugriffsverweigerung das Dienstprogramm '''audit2allow''', um ein benutzerdefiniertes Richtlinienmodul zu erstellen, das den Zugriff erlaubt
* Informationen zur Verwendung von '''audit2allow''' finden Sie in Abschnitt 11.3.8, „Zugriff zulassen: audit2allow“.
* Informationen zur Verwendung von '''audit2allow''' finden Sie in Abschnitt 11.3.8, „Zugriff zulassen: audit2allow“


== Probleme beheben ==
== Probleme beheben ==
Die folgenden Abschnitte helfen bei der Fehlerbehebung.
Die folgenden Abschnitte helfen bei der Fehlerbehebung
* Sie behandeln: die Überprüfung von Linux-Berechtigungen, die vor den SELinux-Regeln geprüft werden; mögliche Ursachen dafür, dass SELinux den Zugriff verweigert, aber keine Verweigerungen protokolliert werden; Handbuchseiten für Dienste, die Informationen zu Labeling und Booleschen Werten enthalten; permissive Domänen, um einem einzelnen Prozess statt dem gesamten System permissives Verhalten zu ermöglichen; das Suchen und Anzeigen von Verweigerungsmeldungen; das Analysieren von Verweigerungen; sowie das Erstellen benutzerdefinierter Policy-Module mit '''audit2allow'''.
* Sie behandeln: die Überprüfung von Linux-Berechtigungen, die vor den SELinux-Regeln geprüft werden; mögliche Ursachen dafür, dass SELinux den Zugriff verweigert, aber keine Verweigerungen protokolliert werden; Handbuchseiten für Dienste, die Informationen zu Labeling und Booleschen Werten enthalten; permissive Domänen, um einem einzelnen Prozess statt dem gesamten System permissives Verhalten zu ermöglichen; das Suchen und Anzeigen von Verweigerungsmeldungen; das Analysieren von Verweigerungen; sowie das Erstellen benutzerdefinierter Policy-Module mit '''audit2allow'''


=== Linux-Berechtigungen ===
=== Linux-Berechtigungen ===
Wenn der Zugriff verweigert wird, überprüfen Sie die Standard-Linux-Berechtigungen.
Wenn der Zugriff verweigert wird, überprüfen Sie die Standard-Linux-Berechtigungen
* Wie in Kapitel 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.
* Wie in Kapitel 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
* SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft.
* SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft
* SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff bereits verweigert haben.
* SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff bereits verweigert haben


Wenn der Zugriff verweigert wird und keine SELinux-Verweigerungen protokolliert werden, verwenden Sie den folgenden Befehl, um die Standard-Linux-Berechtigungen anzuzeigen:
Wenn der Zugriff verweigert wird und keine SELinux-Verweigerungen protokolliert werden, verwenden Sie den folgenden Befehl, um die Standard-Linux-Berechtigungen anzuzeigen:
Zeile 183: Zeile 183:
  -rw-r----- 1 root root 0 2009-05-07 11:06 index.html
  -rw-r----- 1 root root 0 2009-05-07 11:06 index.html


In diesem Beispiel gehört die Datei '''index.html''' dem Root-Benutzer und der Root-Gruppe.
In diesem Beispiel gehört die Datei '''index.html''' dem Root-Benutzer und der Root-Gruppe
* Der Root-Benutzer verfügt über Lese- und Schreibrechte ('''-rw'''), und Mitglieder der Root-Gruppe haben Leserechte ('''-r-''').
* Der Root-Benutzer verfügt über Lese- und Schreibrechte ('''-rw'''), und Mitglieder der Root-Gruppe haben Leserechte ('''-r-''')
* Alle anderen haben keinen Zugriff ('''---''').
* Alle anderen haben keinen Zugriff ('''---''')
* Standardmäßig erlauben solche Berechtigungen '''httpd''' nicht, diese Datei zu lesen.
* Standardmäßig erlauben solche Berechtigungen '''httpd''' nicht, diese Datei zu lesen
* Um dieses Problem zu beheben, verwenden Sie den Befehl '''chown''', um den Eigentümer und die Gruppe zu ändern.
* Um dieses Problem zu beheben, verwenden Sie den Befehl '''chown''', um den Eigentümer und die Gruppe zu ändern
* Dieser Befehl muss als root ausgeführt werden:
* Dieser Befehl muss als root ausgeführt werden:
  sudo chown apache:apache /var/www/html/index.html
  sudo chown apache:apache /var/www/html/index.html


Dies setzt die Standardkonfiguration voraus, in der '''httpd''' als Linux-Apache-Benutzer läuft.
Dies setzt die Standardkonfiguration voraus, in der '''httpd''' als Linux-Apache-Benutzer läuft
* Wenn Sie '''httpd''' mit einem anderen Benutzer ausführen, ersetzen Sie '''apache:apache''' durch diesen Benutzer.
* Wenn Sie '''httpd''' mit einem anderen Benutzer ausführen, ersetzen Sie '''apache:apache''' durch diesen Benutzer


Informationen zur Verwaltung von Linux-Berechtigungen finden Sie im Entwurf „Permissions“ des Fedora Documentation Project.
Informationen zur Verwaltung von Linux-Berechtigungen finden Sie im Entwurf „Permissions“ des Fedora Documentation Project


=== Mögliche Ursachen für stille Zugriffsverweigerungen ===
=== Mögliche Ursachen für stille Zugriffsverweigerungen ===
In bestimmten Situationen werden AVC-Verweigerungsmeldungen möglicherweise nicht protokolliert, wenn SELinux den Zugriff verweigert.
In bestimmten Situationen werden AVC-Verweigerungsmeldungen möglicherweise nicht protokolliert, wenn SELinux den Zugriff verweigert
* Anwendungen und Systembibliotheksfunktionen versuchen oft, mehr Zugriff zu erlangen, als für die Ausführung ihrer Aufgaben erforderlich ist.
* Anwendungen und Systembibliotheksfunktionen versuchen oft, mehr Zugriff zu erlangen, als für die Ausführung ihrer Aufgaben erforderlich ist
* 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.
* 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
* Diese Regeln sind in Standardrichtlinien üblich.
* Diese Regeln sind in Standardrichtlinien üblich
* Der Nachteil von „dontaudit“ ist, dass, obwohl SELinux den Zugriff verweigert, keine Verweigerungsmeldungen protokolliert werden, was die Fehlerbehebung erschwert.
* Der Nachteil von „dontaudit“ ist, dass, obwohl SELinux den Zugriff verweigert, keine Verweigerungsmeldungen protokolliert werden, was die Fehlerbehebung erschwert


Um „dontaudit“-Regeln vorübergehend zu deaktivieren, sodass alle Verweigerungen protokolliert werden, geben Sie als Root den folgenden Befehl ein:
Um „dontaudit“-Regeln vorübergehend zu deaktivieren, sodass alle Verweigerungen protokolliert werden, geben Sie als Root den folgenden Befehl ein:
  sudo semodule -DB
  sudo semodule -DB


Die Option '''-D''' deaktiviert die „dontaudit“-Regeln; die Option '''-B''' erstellt die Richtlinie neu.
Die Option '''-D''' deaktiviert die „dontaudit“-Regeln; die Option '''-B''' erstellt die Richtlinie neu
* Versuchen Sie nach dem Ausführen von '''semodule -DB''' 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.
* Versuchen Sie nach dem Ausführen von '''semodule -DB''' 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
* Seien Sie vorsichtig bei der Entscheidung, welche Verweigerungen zugelassen werden sollen, da einige ignoriert und durch dontaudit-Regeln behandelt werden sollten.
* Seien Sie vorsichtig bei der Entscheidung, welche Verweigerungen zugelassen werden sollen, da einige ignoriert und durch dontaudit-Regeln behandelt werden sollten
* Wenn Sie Zweifel haben oder Rat suchen, wenden Sie sich an andere SELinux-Benutzer und -Entwickler in einer SELinux-Mailingliste, wie z.
* Wenn Sie Zweifel haben oder Rat suchen, wenden Sie sich an andere SELinux-Benutzer und -Entwickler in einer SELinux-Mailingliste, wie fedora-selinux-list
* B.
* fedora-selinux-list.


Um die Richtlinie neu zu erstellen und '''dontaudit''' -Regeln zu aktivieren, geben Sie als Root den folgenden Befehl ein:
Um die Richtlinie neu zu erstellen und '''dontaudit''' -Regeln zu aktivieren, geben Sie als Root den folgenden Befehl ein:
  sudo semodule -B
  sudo semodule -B


Dadurch wird die Richtlinie in ihren ursprünglichen Zustand zurückversetzt.
Dadurch wird die Richtlinie in ihren ursprünglichen Zustand zurückversetzt
* Für eine vollständige Liste der dontaudit-Regeln führen Sie den Befehl '''sesearch --dontaudit''' aus.
* Für eine vollständige Liste der dontaudit-Regeln führen Sie den Befehl '''sesearch --dontaudit''' aus
* Grenzen Sie die Suche mit der Option '''-s ‚'domain‘'''' und dem Befehl '''grep''' ein.
* Grenzen Sie die Suche mit der Option '''-s ‚'domain‘'''' und dem Befehl '''grep''' ein
* Zum Beispiel:
sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;


Siehe Abschnitt „[[Raw Audit Messages]]“ und Abschnitt „[ [sealert-Meldungen]]“ für Informationen zur Analyse von Zugriffsverweigerungen.
; Beispiel
sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;
 
Siehe Abschnitt „[[Raw Audit Messages]]“ und Abschnitt „[ [sealert-Meldungen]]“ für Informationen zur Analyse von Zugriffsverweigerungen


=== Handbuchseiten für Dienste ===
=== Handbuchseiten für Dienste ===
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 z.
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 '''httpd''' beim Zugriff auf NFS-Volumes)
* B. '''httpd''' beim Zugriff auf NFS-Volumes).
* Diese Informationen können in der Standard-Handbuchseite oder in der Handbuchseite enthalten sein, die mit dem Dienstprogramm '''sepolicy manpage''' automatisch aus der SELinux-Richtlinie für jede Dienstdomäne generiert werden kann
* Diese Informationen können in der Standard-Handbuchseite oder in der Handbuchseite enthalten sein, die mit dem Dienstprogramm '''sepolicy manpage''' automatisch aus der SELinux-Richtlinie für jede Dienstdomäne generiert werden kann.
* Solche Handbuchseiten sind im Format ''''‚Dienstname‘'_selinux''' benannt
* Solche Handbuchseiten sind im Format ''''‚Dienstname‘'_selinux''' benannt.
* Solche Handbuchseiten werden auch mit dem Paket selinux-policy-doc ausgeliefert
* Solche Handbuchseiten werden auch mit dem Paket selinux-policy-doc ausgeliefert.


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.  
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. ermöglichen
* ermöglichen.
* Weitere Manpages mit SELinux-Informationen für Dienste sind unter anderem:
* Weitere Manpages mit SELinux-Informationen für Dienste sind unter anderem:
* Samba: Die Manpage samba_selinux(8) beschreibt beispielsweise, dass die Aktivierung des Booleschen Werts '''samba_enable_home_dirs''' es Samba ermöglicht, Benutzer-Home-Verzeichnisse freizugeben.
* Samba: Die Manpage samba_selinux(8) beschreibt beispielsweise, dass die Aktivierung des Booleschen Werts '''samba_enable_home_dirs''' es Samba ermöglicht, Benutzer-Home-Verzeichnisse freizugeben
* 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.
* 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


Die Informationen in den Handbuchseiten helfen Ihnen dabei, die richtigen Dateitypen und Booleans zu konfigurieren, um zu verhindern, dass SELinux den Zugriff verweigert.
Die Informationen in den Handbuchseiten helfen Ihnen dabei, die richtigen Dateitypen und Booleans zu konfigurieren, um zu verhindern, dass SELinux den Zugriff verweigert


Weitere Informationen zur '''sepolicy-Handbuchseite''' finden Sie im Abschnitt „[[Generieren von Handbuchseiten]]: '''sepolicy-Handbuchseite'''”.
Weitere Informationen zur '''sepolicy-Handbuchseite''' finden Sie im Abschnitt „[[Generieren von Handbuchseiten]]: '''sepolicy-Handbuchseite'''”


=== Permissive Domänen ===
=== Permissive Domänen ===
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.
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
* Früher war es nicht möglich, eine einzelne Domäne permissiv zu machen (denken Sie daran: Prozesse laufen in Domänen).
* Früher war es nicht möglich, eine einzelne Domäne permissiv zu machen (denken Sie daran: Prozesse laufen in Domänen)
* In bestimmten Situationen führte dies dazu, dass das gesamte System zur Fehlerbehebung permissiv gemacht wurde.
* In bestimmten Situationen führte dies dazu, dass das gesamte System zur Fehlerbehebung permissiv gemacht wurde


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.
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
* 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.
* 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


Permissive Domänen haben folgende Verwendungszwecke:  
Permissive Domänen haben folgende Verwendungszwecke:
* 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.
* 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
* Sie ermöglichen es einem Administrator, Richtlinien für neue Anwendungen zu erstellen.
* Sie ermöglichen es einem Administrator, Richtlinien für neue Anwendungen zu erstellen
* Früher wurde empfohlen, eine minimale Richtlinie zu erstellen,
* 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.
  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
* Das Tool '''audit2allow''' konnte dann zur Erstellung der Richtlinie herangezogen werden.
* Das Tool '''audit2allow''' konnte dann zur Erstellung der Richtlinie herangezogen werden
* Dies stellte das gesamte System einem Risiko aus.
* Dies stellte das gesamte System einem Risiko aus
* Mit permissiven Domänen kann nur die Domäne in der neuen Richtlinie als permissiv markiert werden, ohne das gesamte System einem Risiko auszusetzen.
* Mit permissiven Domänen kann nur die Domäne in der neuen Richtlinie als permissiv markiert werden, ohne das gesamte System einem Risiko auszusetzen


==== Eine Domäne permissiv machen ====
==== Eine Domäne permissiv machen ====
Um eine Domäne permissiv zu machen, führen Sie den Befehl '''semanage permissive -a ‚'domain‘'''' aus, wobei ‚'domain‘' die Domäne ist, die Sie permissiv machen möchten.
Um eine Domäne permissiv zu machen, führen Sie den Befehl '''semanage permissive -a ‚'domain‘'''' aus, wobei ‚'domain‘' die Domäne ist, die Sie permissiv machen möchten
* Geben Sie beispielsweise als Root den folgenden Befehl ein, um die Domäne '''httpd_t''' (die Domäne, in der der Apache-HTTP-Server läuft) permissiv zu machen:
sudo semanage permissive -a httpd_t


Um eine Liste der Domänen anzuzeigen, die Sie als permissiv markiert haben, führen Sie als Root den Befehl '''semodule -l | grep permissive''' aus.
Geben Sie beispielsweise als Root den folgenden Befehl ein, um die Domäne '''httpd_t''' (die Domäne, in der der Apache-HTTP-Server läuft) permissiv zu machen:
* Beispiel:
sudo semanage permissive -a httpd_t
 
Um eine Liste der Domänen anzuzeigen, die Sie als permissiv markiert haben, führen Sie als Root den Befehl '''semodule -l | grep permissive''' aus
 
; Beispiel
  sudo semodule -l | grep permissive
  sudo semodule -l | grep permissive
  permissive_httpd_t (null)
  permissive_httpd_t (null)
  permissivedomains (null)
  permissivedomains (null)


Wenn Sie eine Domäne nicht mehr als permissiv festlegen möchten, führen Sie den Befehl '''semanage permissive -d ‚'domain‘'''' als Root aus.
Wenn Sie eine Domäne nicht mehr als permissiv festlegen möchten, führen Sie den Befehl '''semanage permissive -d ‚'domain‘'''' als Root aus
* Zum Beispiel:
 
; Beispiel
  sudo semanage permissive -d httpd_t
  sudo semanage permissive -d httpd_t


==== Deaktivieren von permissiven Domänen ====
==== Deaktivieren von permissiven Domänen ====
Das Modul '''permissivedomains.pp''' enthält alle Deklarationen für permissive Domänen, die auf dem System vorhanden sind.
Das Modul '''permissivedomains.pp''' enthält alle Deklarationen für permissive Domänen, die auf dem System vorhanden sind
* Um alle permissiven Domänen zu deaktivieren, geben Sie als Root den folgenden Befehl ein:
* Um alle permissiven Domänen zu deaktivieren, geben Sie als Root den folgenden Befehl ein:
  sudo semodule -d permissivedomains
  sudo semodule -d permissivedomains


'''Hinweis'''
; Hinweis
: Sobald ein Richtlinienmodul über den Befehl '''semodule -d''' deaktiviert wurde, wird es nicht mehr in der Ausgabe des Befehls '''semodule -l''' angezeigt


Sobald ein Richtlinienmodul über den Befehl '''semodule -d''' deaktiviert wurde, wird es nicht mehr in der Ausgabe des Befehls '''semodule -l''' angezeigt.
Um alle Richtlinienmodule einschließlich der deaktivierten anzuzeigen, geben Sie als Root den folgenden Befehl ein:
* Um alle Richtlinienmodule einschließlich der deaktivierten anzuzeigen, geben Sie als Root den folgenden Befehl ein:
  sudo semodule --list-modules=full
  sudo semodule --list-modules=full


==== Ablehnungen für permissive Domänen ====
==== Ablehnungen für permissive Domänen ====
Die '''SYSCALL''' -Meldung unterscheidet sich bei permissiven Domänen.
Die '''SYSCALL''' -Meldung unterscheidet sich bei permissiven Domänen
* Im Folgenden finden Sie ein Beispiel für eine AVC-Ablehnung (und den zugehörigen Systemaufruf) vom Apache-HTTP-Server:
* Im Folgenden finden Sie ein Beispiel für eine AVC-Ablehnung (und den zugehörigen Systemaufruf) vom Apache-HTTP-Server:
  type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm= „httpd“ path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
  type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm= „httpd“ path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
Zeile 295: Zeile 293:
  8 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
  8 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)


Standardmäßig ist die Domäne '''httpd_t''' nicht permissiv, weshalb die Aktion verweigert wird und die '''SYSCALL''' -Meldung '''success=no''' enthält.
Standardmäßig ist die Domäne '''httpd_t''' nicht permissiv, weshalb die Aktion verweigert wird und die '''SYSCALL''' -Meldung '''success=no''' enthält
* Das Folgende ist ein Beispiel für eine AVC-Verweigerung in derselben Situation, mit dem Unterschied, dass der Befehl '''semanage permissive -a httpd_t''' ausgeführt wurde, um die Domäne '''httpd_t''' permissiv zu machen:
* Das Folgende ist ein Beispiel für eine AVC-Verweigerung in derselben Situation, mit dem Unterschied, dass der Befehl '''semanage permissive -a httpd_t''' ausgeführt wurde, um die Domäne '''httpd_t''' permissiv zu machen:
  type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u: object_r:samba_share_t:s0 tclass=file
  type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u: object_r:samba_share_t:s0 tclass=file
  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="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
  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="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)


In diesem Fall wurde zwar eine AVC-Ablehnung protokolliert, der Zugriff wurde jedoch nicht verweigert, wie durch '''success=yes''' in der '''SYSCALL''' -Meldung angezeigt wird.
In diesem Fall wurde zwar eine AVC-Ablehnung protokolliert, der Zugriff wurde jedoch nicht verweigert, wie durch '''success=yes''' in der '''SYSCALL''' -Meldung angezeigt wird


Weitere Informationen zu permissiven Domänen finden Sie in Dan Walshs Blogeintrag „Permissive Domains“.
Weitere Informationen zu permissiven Domänen finden Sie in Dan Walshs Blogeintrag „Permissive Domains“


=== Suchen und Anzeigen von Verweigerungen ===
=== Suchen und Anzeigen von Verweigerungen ===
Dieser Abschnitt setzt voraus, dass die Pakete setroubleshoot, setroubleshoot-server, dbus und audit installiert sind und dass die Daemons '''auditd''', '''rsyslogd''' und '''setroubleshootd''' laufen.
Dieser Abschnitt setzt voraus, dass die Pakete setroubleshoot, setroubleshoot-server, dbus und audit installiert sind und dass die Daemons '''auditd''', '''rsyslogd''' und '''setroubleshootd''' laufen
* Informationen zum Starten dieser Daemons finden Sie im Abschnitt „ [[Welche Protokolldatei wird verwendet]]“ für Informationen zum Starten dieser Daemons.
* Informationen zum Starten dieser Daemons finden Sie im Abschnitt „ [[Welche Protokolldatei wird verwendet]]“ für Informationen zum Starten dieser Daemons
* Es stehen eine Reihe von Dienstprogrammen zum Suchen und Anzeigen von SELinux-AVC-Meldungen zur Verfügung, wie beispielsweise '''ausearch''', '''aureport''' und '''sealert''' .
* Es stehen eine Reihe von Dienstprogrammen zum Suchen und Anzeigen von SELinux-AVC-Meldungen zur Verfügung, wie beispielsweise '''ausearch''', '''aureport''' und '''sealert'''  


=== ausearch ===
=== ausearch ===
Das audit-Paket enthält das Dienstprogramm '''ausearch''', mit dem die Protokolle des '''audit'''-Daemons nach Ereignissen anhand verschiedener Suchkriterien durchsucht werden können.[10] Das Dienstprogramm '''ausearch''' greift auf '''/var/log/audit/audit.log''' zu und muss daher als Root-Benutzer ausgeführt werden:
Das audit-Paket enthält das Dienstprogramm '''ausearch''', mit dem die Protokolle des '''audit'''-Daemons nach Ereignissen anhand verschiedener Suchkriterien durchsucht werden können.[10]
{|
 
Das Dienstprogramm '''ausearch''' greift auf '''/var/log/audit/audit.log''' zu und muss daher als Root-Benutzer ausgeführt werden:
{| class="wikitable options big"
|-
|-
! | Suche nach
! | Suche nach
Zeile 328: Zeile 328:


Um nach SELinux-AVC-Meldungen für einen bestimmten Dienst zu suchen, verwenden Sie die Option '''-c ‚'comm-name‘'''', wobei ‚'comm-name‘' der Name der ausführbaren Datei ist, zum Beispiel '''httpd''' für den Apache-HTTP-Server und '''smbd''' für Samba:
Um nach SELinux-AVC-Meldungen für einen bestimmten Dienst zu suchen, verwenden Sie die Option '''-c ‚'comm-name‘'''', wobei ‚'comm-name‘' der Name der ausführbaren Datei ist, zum Beispiel '''httpd''' für den Apache-HTTP-Server und '''smbd''' für Samba:
   
  sudo ausearch -m avc -c httpd
sudo ausearch -m avc -c httpd
  sudo ausearch -m avc -c smbd
  sudo ausearch -m avc -c smbd


Bei jedem '''ausearch''' Befehl wird empfohlen, entweder die Option '''--interpret''' ('''-i''') für bessere Lesbarkeit oder die Option '''--raw''' ('''-r''') für die Skriptverarbeitung zu verwenden.
Bei jedem '''ausearch''' Befehl wird empfohlen, entweder die Option '''--interpret''' ('''-i''') für bessere Lesbarkeit oder die Option '''--raw''' ('''-r''') für die Skriptverarbeitung zu verwenden
* Weitere Optionen für '''ausearch''' finden Sie in der Handbuchseite ausearch(8).
* Weitere Optionen für '''ausearch''' finden Sie in der Handbuchseite ausearch(8)


=== aureport ===
=== aureport ===
Das Audit-Paket enthält das Dienstprogramm '''aureport''', das zusammenfassende Berichte der Audit-Systemprotokolle erstellt. [11] Das Dienstprogramm '''aureport''' greift auf '''/var/log/audit/audit.log''' zu und muss daher als Root-Benutzer ausgeführt werden.
Das Audit-Paket enthält das Dienstprogramm '''aureport''', das zusammenfassende Berichte der Audit-Systemprotokolle erstellt. [11] Das Dienstprogramm '''aureport''' greift auf '''/var/log/audit/audit.log''' zu und muss daher als Root-Benutzer ausgeführt werden
* Um eine Liste der SELinux-Ablehnungsmeldungen und deren Häufigkeit anzuzeigen, führen Sie den Befehl '''aureport -a''' aus.
* Um eine Liste der SELinux-Ablehnungsmeldungen und deren Häufigkeit anzuzeigen, führen Sie den Befehl '''aureport -a''' aus
* Nachfolgend finden Sie eine Beispielausgabe, die zwei Ablehnungen enthält:
 
Nachfolgend finden Sie eine Beispielausgabe, die zwei Ablehnungen enthält:
  sudo aureport -a
  sudo aureport -a
 
  AVC-Bericht
  AVC-Bericht
 
======================================
======================================
  # Datum Uhrzeit Befehl Subjekt Systemaufruf Klasse Berechtigung Objekt Ereignis
  # Datum Uhrzeit Befehl Subjekt Systemaufruf Klasse Berechtigung Objekt Ereignis
Zeile 350: Zeile 350:


=== sealert ===
=== sealert ===
Das Paket setroubleshoot-server stellt das Dienstprogramm '''sealert''' bereit, das die von setroubleshoot-server übersetzten Ablehnungsmeldungen ausliest.[12] Ablehnungen werden IDs zugewiesen, wie in '''/var/log/messages''' zu sehen ist.
Das Paket setroubleshoot-server stellt das Dienstprogramm '''sealert''' bereit, das die von setroubleshoot-server übersetzten Ablehnungsmeldungen ausliest.[12] Ablehnungen werden IDs zugewiesen, wie in '''/var/log/messages''' zu sehen ist
* Das Folgende ist ein Beispiel für eine Ablehnung aus '''messages''':
setroubleshoot: SELinux verhindert den Zugriff von /usr/sbin/httpd auf name_bind über den tcp_socket.
* Für vollständige SELinux-Meldungen führen Sie sealert -l 8c123656-5dda-4e5d
-8791-9e3bd03786b7


In diesem Beispiel lautet die Ablehnungs-ID '''8c123656-5dda-4e5d-8791-9e3bd03786b7'''.
Das Folgende ist ein Beispiel für eine Ablehnung aus '''messages''':
* Die Option '''-l''' nimmt eine ID als Argument entgegen.
setroubleshoot: SELinux verhindert den Zugriff von /usr/sbin/httpd auf name_bind über den tcp_socket
* Die Ausführung des Befehls '''sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7''' liefert eine detaillierte Analyse, warum SELinux den Zugriff verweigert hat, sowie eine mögliche Lösung, um den Zugriff zu ermöglichen.
 
Für vollständige SELinux-Meldungen führen Sie sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
 
In diesem Beispiel lautet die Ablehnungs-ID '''8c123656-5dda-4e5d-8791-9e3bd03786b7'''
* Die Option '''-l''' nimmt eine ID als Argument entgegen
* Die Ausführung des Befehls '''sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7''' liefert eine detaillierte Analyse, warum SELinux den Zugriff verweigert hat, sowie eine mögliche Lösung, um den Zugriff zu ermöglichen


Wenn Sie das X Window System verwenden, die Pakete setroubleshoot und setroubleshoot-server installiert haben und die Daemons '''setroubleshootd''', '''dbus''' und '''auditd''' laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:
Wenn Sie das X Window System verwenden, die Pakete setroubleshoot und setroubleshoot-server installiert haben und die Daemons '''setroubleshootd''', '''dbus''' und '''auditd''' laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:
Zeile 369: Zeile 369:
[[Image:Bild3.png|top]]
[[Image:Bild3.png|top]]


Alternativ können Sie den Befehl '''sealert -b''' ausführen, um die '''sealert''' GUI zu starten.
Alternativ können Sie den Befehl '''sealert -b''' ausführen, um die '''sealert''' GUI zu starten
* Um eine detaillierte Analyse aller Verweigerungsmeldungen anzuzeigen, führen Sie den Befehl '''sealert -l \*''' aus.
* Um eine detaillierte Analyse aller Verweigerungsmeldungen anzuzeigen, führen Sie den Befehl '''sealert -l \*''' aus


=== Rohdaten der Audit-Meldungen ===
=== Rohdaten der Audit-Meldungen ===
Rohdaten der Audit-Meldungen werden in '''/var/log/audit/audit.log''' protokolliert.
Rohdaten der Audit-Meldungen werden in '''/var/log/audit/audit.log''' protokolliert
* 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 '''httpd_t''' läuft) versuchte, auf die Datei '''/var/www/html/file1''' (mit dem Typ '''samba_share_t''' gekennzeichnet):
 
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 '''httpd_t''' läuft) versuchte, auf die Datei '''/var/www/html/file1''' (mit dem Typ '''samba_share_t''' gekennzeichnet):
  type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm -0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
  type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm -0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
  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="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
  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="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)


<div style="margin-left:0cm;">‚‘{ getattr }‚‘
>'''{ getattr }'''


<div style="margin-left:1cm;">Der Eintrag in den geschweiften Klammern gibt die verweigerte Berechtigung an.
Der Eintrag in den geschweiften Klammern gibt die verweigerte Berechtigung an
* Der Eintrag '''getattr''' zeigt an, dass der Quellprozess versucht hat, die Statusinformationen der Zieldatei zu lesen.
* Der Eintrag '''getattr''' zeigt an, dass der Quellprozess versucht hat, die Statusinformationen der Zieldatei zu lesen
* Dies geschieht vor dem Lesen von Dateien.
* Dies geschieht vor dem Lesen von Dateien
* Diese Aktion wird verweigert, da die Datei, auf die zugegriffen wird, ein falsches Label hat.
* Diese Aktion wird verweigert, da die Datei, auf die zugegriffen wird, ein falsches Label hat
* Häufig vorkommende Berechtigungen sind '''getattr''', '''read''' und '''write'''.
* Häufig vorkommende Berechtigungen sind '''getattr''', '''read''' und '''write'''


<div style="margin-left:0cm;">comm=„‚'httpd‘'“
>comm=„‚'httpd‘'“


<div style="margin-left:1cm;">Die ausführbare Datei, die den Prozess gestartet hat.
Die ausführbare Datei, die den Prozess gestartet hat
* Der vollständige Pfad der ausführbaren Datei findet sich im Abschnitt '''exe=''' der Systemaufruf-Meldung ('''SYSCALL'''), der in diesem Fall '''exe=„/usr/sbin/httpd“''' lautet.
* Der vollständige Pfad der ausführbaren Datei findet sich im Abschnitt '''exe=''' der Systemaufruf-Meldung ('''SYSCALL'''), der in diesem Fall '''exe=„/usr/sbin/httpd“''' lautet


<div style="margin-left:0cm;
„>path=“‚‘/var/www/html/file1''"


<div style="margin-left:1cm;">Der Pfad zu dem Objekt (Ziel), auf das der Prozess zuzugreifen versuchte.
„>path=“'''/var/www/html/file1''"
 
Der Pfad zu dem Objekt (Ziel), auf das der Prozess zuzugreifen versuchte
 


<div style="margin-left:0cm;"
  >scontext=„‚'unconfined_u:system_r:httpd_t:s0‘'“
  >scontext=„‚'unconfined_u:system_r:httpd_t:s0‘'“


<div style="margin-left:1cm;">Der SELinux-Kontext des Prozesses, der die abgelehnte Aktion versucht hat.
Der SELinux-Kontext des Prozesses, der die abgelehnte Aktion versucht hat
* In diesem Fall ist es der SELinux-Kontext des Apache-HTTP-Servers, der in der Domäne '''httpd_t''' läuft.
* In diesem Fall ist es der SELinux-Kontext des Apache-HTTP-Servers, der in der Domäne '''httpd_t''' läuft


<div style="margin-left:0cm;">tcontext=„‚'unconfined_u:object_r:samba_share_t:s0‘'“
>tcontext=„‚'unconfined_u:object_r:samba_share_t:s0‘'“


<div style="margin-left:1cm;">Der SELinux-Kontext des Objekts (Ziels), auf das der Prozess zugreifen wollte.
Der SELinux-Kontext des Objekts (Ziels), auf das der Prozess zugreifen wollte
* In diesem Fall ist es der SELinux-Kontext von '''file1'''.
* In diesem Fall ist es der SELinux-Kontext von '''file1'''
* Beachten Sie, dass der Typ '''
* Beachten Sie, dass der Typ '''
  samba_share_t''' für Prozesse, die in der '''httpd_t''' Domäne laufen, nicht zugänglich ist.
  samba_share_t''' für Prozesse, die in der '''httpd_t''' Domäne laufen, nicht zugänglich ist
 
In bestimmten Situationen kann der '''tcontext''' mit dem '''scontext''' übereinstimmen, beispielsweise wenn ein Prozess versucht, einen Systemdienst auszuführen, der Eigenschaften des laufenden Prozesses, wie beispielsweise die Benutzer-ID, ändert
* Außerdem kann der '''tcontext''' mit dem ''' scontext''' ü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


<div style="margin-left:1cm;">In bestimmten Situationen kann der '''tcontext''' mit dem '''scontext''' übereinstimmen, beispielsweise wenn ein Prozess versucht, einen Systemdienst auszuführen, der Eigenschaften des laufenden Prozesses, wie beispielsweise die Benutzer-ID, ändert.
Aus der Systemaufruf-Meldung ('''SYSCALL''') sind zwei Punkte von Interesse: * '''success=‚'no‘'''': gibt an, ob die Verweigerung (AVC) durchgesetzt wurde oder nicht
* Außerdem kann der '''tcontext''' mit dem ''' scontext''' übereinstimmen, wenn ein Prozess versucht, mehr Ressourcen (wie z.
* B.
* Speicher) zu nutzen, als die normalen Grenzen zulassen, was zu einer Sicherheitsprüfung führt, um festzustellen, ob dieser Prozess diese Grenzen überschreiten darf.


Aus der Systemaufruf-Meldung ('''SYSCALL''') sind zwei Punkte von Interesse: * '''success=‚'no‘'''': gibt an, ob die Verweigerung (AVC) durchgesetzt wurde oder nicht.
'''success=no''' bedeutet, dass der Systemaufruf nicht erfolgreich war (SELinux hat den Zugriff verweigert). '''success=yes''' bedeutet, dass der Systemaufruf erfolgreich war
* Dies ist bei permissiven Domänen oder unconfined Domänen zu beobachten, wie beispielsweise '''unconfined_service_t''' und '''kernel_t'''
'''success=no''' bedeutet, dass der Systemaufruf nicht erfolgreich war (SELinux hat den Zugriff verweigert). '''success=yes''' bedeutet, dass der Systemaufruf erfolgreich war.
* '''exe=„'''/usr/sbin/httpd''“ ''': der vollständige Pfad zu der ausführbaren Datei, die den Prozess gestartet hat; in diesem Fall ist dies '''exe=„/usr/sbin/httpd“'''
* Dies ist bei permissiven Domänen oder unconfined Domänen zu beobachten, wie beispielsweise '''unconfined_service_t''' und '''kernel_t'''.
* '''exe=„‚‘/usr/sbin/httpd''“ ''': der vollständige Pfad zu der ausführbaren Datei, die den Prozess gestartet hat; in diesem Fall ist dies '''exe=„/usr/sbin/httpd“'''.


Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert.
Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert
* Um mit der Fehlerbehebung zu beginnen, vergleichen Sie den Quellkontext ('''scontext''') mit dem Zielkontext ('''tcontext''' ).
* Um mit der Fehlerbehebung zu beginnen, vergleichen Sie den Quellkontext ('''scontext''') mit dem Zielkontext ('''tcontext''' )
* Sollte der Prozess ('''scontext''') auf ein solches Objekt ('''tcontext''') zugreifen? Beispielsweise sollte der Apache-HTTP-Server ('''httpd_t''') nur auf Typen zugreifen, die in der Handbuchseite httpd_selinux(8) angegeben sind, wie '''httpd_sys_content_t''', ''' public_content_t'‚ usw., sofern nicht anders konfiguriert.
* Sollte der Prozess ('''scontext''') auf ein solches Objekt ('''tcontext''') zugreifen? Beispielsweise sollte der Apache-HTTP-Server ('''httpd_t''') nur auf Typen zugreifen, die in der Handbuchseite httpd_selinux(8) angegeben sind, wie '''httpd_sys_content_t''', ''' public_content_t'‚ usw., sofern nicht anders konfiguriert


=== sealert-Meldungen ===
=== sealert-Meldungen ===
Verweigerungen werden IDs zugewiesen, wie in ‘''/var/log/messages'' .
Verweigerungen werden IDs zugewiesen, wie in ‘''/var/log/messages''  
* Das Folgende ist ein Beispiel für eine AVC-Verweigerung (protokolliert in '''messages'''), die auftrat, als der Apache-HTTP-Server (der in der Domäne '''httpd_t''' läuft) versuchte, auf die Datei '''/var/www/html/file1''' (mit dem Typ '''samba_share_t''' gekennzeichnet) zuzugreifen:
* Das Folgende ist ein Beispiel für eine AVC-Verweigerung (protokolliert in '''messages'''), die auftrat, als der Apache-HTTP-Server (der in der Domäne '''httpd_t''' läuft) versuchte, auf die Datei '''/var/www/html/file1''' (mit dem Typ '''samba_share_t''' gekennzeichnet) zuzugreifen:
‚'hostname‘' setroubleshoot: SELinux verhindert, dass httpd (httpd_t) „getattr“ auf /var/www/html/file1 (samba_share_t) ausführt.
‚'hostname‘' setroubleshoot: SELinux verhindert, dass httpd (httpd_t) „getattr“ auf /var/www/html/file1 (samba_share_t) ausführt
* Für vollständige SELinux-Meldungen führen Sie sealert -l 32eee32b-21ca-4846-a22f-0ba050206786 aus
* Für vollständige SELinux-Meldungen führen Sie sealert -l 32eee32b-21ca-4846-a22f-0ba050206786 aus


Führen Sie wie vorgeschlagen den Befehl '''sealert -l 32eee32b-21ca-4846-a22f-0ba050206786''' aus, um die vollständige Meldung anzuzeigen.
Führen Sie wie vorgeschlagen den Befehl '''sealert -l 32eee32b-21ca-4846-a22f-0ba050206786''' aus, um die vollständige Meldung anzuzeigen
* Dieser Befehl funktioniert nur auf dem lokalen Rechner und zeigt dieselben Informationen an wie die '''sealert''' GUI:
 
Dieser Befehl funktioniert nur auf dem lokalen Rechner und zeigt dieselben Informationen an wie die '''sealert''' GUI:
  sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
  sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
SELinux verhindert, dass httpd mit getattr auf die Datei /var/www/html/file1 zugreift.
 
SELinux verhindert, dass httpd mit getattr auf die Datei /var/www/html/file1 zugreift
 
***** Das Plugin restorecon (92,2 % Zuverlässigkeit) schlägt vor ************************
***** Das Plugin restorecon (92,2 % Zuverlässigkeit) schlägt vor ************************


Wenn Sie das Label korrigieren möchten.
Wenn Sie das Label korrigieren möchten
Das Standard-Label für /var/www/html/file1 sollte httpd_sys_content_t lauten.
Das Standard-Label für /var/www/html/file1 sollte httpd_sys_content_t lauten
Dann können Sie restorecon ausführen.
Dann können Sie restorecon ausführen
Führen Sie
Führen Sie
  sudo /sbin/restorecon -v /var/www/html/file1
  sudo /sbin/restorecon -v /var/www/html/file1
 
***** Das Plugin public_content (Vertrauenswürdigkeit 7,83) schlägt vor ********************
***** Das Plugin public_content (Vertrauenswürdigkeit 7,83) schlägt vor ********************


Wenn Sie file1 als öffentlichen Inhalt behandeln möchten
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.
Dann müssen Sie die Label von file1 in public_content_t oder public_content_rw_t ändern
Führen Sie Folgendes aus
Führen Sie Folgendes aus
  sudo semanage fcontext -a -t public_content_t ‚/var/www/html/file1‘
  sudo semanage fcontext -a -t public_content_t ‚/var/www/html/file1‘
 
sudo restorecon -v ‚/var/www/html/file1‘
sudo restorecon -v ‚/var/www/html/file1‘
  ***** Das Plugin catchall (Vertrauenswürdigkeit 1,41) schlägt vor **************************
  ***** Das Plugin catchall (Vertrauenswürdigkeit 1,41) schlägt vor **************************


Wenn Sie der Meinung sind, dass httpd standardmäßig getattr-Zugriff auf die Datei file1 erhalten sollte.
Wenn Sie der Meinung sind, dass httpd standardmäßig getattr-Zugriff auf die Datei file1 erhalten sollte
* Dann sollten Sie dies als Fehler melden.
* Dann sollten Sie dies als Fehler melden
* Sie können ein lokales Richtlinienmodul erstellen, um diesen Zugriff zuzulassen.
* Sie können ein lokales Richtlinienmodul erstellen, um diesen Zugriff zuzulassen


Erlauben
Erlauben
Zeile 464: Zeile 465:
  Zusätzliche Informationen:
  Zusätzliche Informationen:
  Quellkontext system_u:system_r:httpd_t:s0
  Quellkontext system_u:system_r:httpd_t:s0
 
Zielkontext unconfined_u:object_r:samba_share_t:s0
Zielkontext unconfined_u:object_r:samba_share_t:s0
  Zielobjekte /var/www/html/file1 [ Datei ]
  Zielobjekte /var/www/html/file1 [ Datei ]
Zeile 474: Zeile 475:
  Ziel-RPM-Pakete
  Ziel-RPM-Pakete
  Richtlinien-RPM selinux-policy-3.13.1-166.el7.noarch
  Richtlinien-RPM selinux-policy-3.13.1-166.el7.noarch
 
Selinux aktiviert True
Selinux aktiviert True
  Richtlinientyp targeted
  Richtlinientyp targeted
Zeile 480: Zeile 481:
  Hostname hostname.redhat.com
  Hostname hostname.redhat.com
  Plattform Linux hostname.redhat.com
  Plattform Linux hostname.redhat.com
                               3.10.0-693.el7.x86_64 #1 SMP Do, 6.
                               3.10.0-693.el7.x86_64 #1 SMP Do, 6
* Juli 19:56:57
* Juli 19:56:57
                               EDT 2017 x86_64 x86_64
                               EDT 2017 x86_64 x86_64
 
Anzahl der Warnmeldungen 2
Anzahl der Warnmeldungen 2
  Erstmals gesehen 20.07.2017 02:52:11 EDT
  Erstmals gesehen 20.07.2017 02:52:11 EDT
  Zuletzt gesehen 20.07.2017 02:52:11 EDT
  Zuletzt gesehen 20.07.2017 02:52:11 EDT
  Lokale ID 32eee32b-21ca-4846-a22f-0ba050206786
  Lokale ID 32eee32b-21ca-4846-a22f-0ba050206786
 
Rohdaten der Audit-Meldungen
Rohdaten der Audit-Meldungen
   type=AVC msg=audit(1500533531.140:295): avc: abgelehnt { getattr } für pid=24934 comm="httpd" path="/var/www/html/file1" dev="vda1" ino=31457414 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
   type=AVC msg=audit(1500533531.140:295): avc: abgelehnt { getattr } für pid=24934 comm="httpd" path="/var/www/html/file1" dev="vda1" ino=31457414 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
 
Hash: httpd,httpd_t,samba_share_t,file,getattr
Hash: httpd,httpd_t,samba_share_t,file,getattr


<div style="margin-left:0cm;">Zusammenfassung
>Zusammenfassung


<div style="margin-left:1cm;">Eine kurze Zusammenfassung der abgelehnten Aktion.
Eine kurze Zusammenfassung der abgelehnten Aktion
* Dies entspricht der Ablehnung in '''/var/log/messages'''.
* Dies entspricht der Ablehnung in '''/var/log/messages'''
* In diesem Beispiel wurde dem Prozess '''httpd''' der Zugriff auf eine Datei ('''file1''') verweigert, die mit dem Typ '''samba_share_t''' gekennzeichnet ist.
* In diesem Beispiel wurde dem Prozess '''httpd''' der Zugriff auf eine Datei ('''file1''') verweigert, die mit dem Typ '''samba_share_t''' gekennzeichnet ist
<div style="margin-left:0cm;">Detaillierte Beschreibung
>Detaillierte Beschreibung


<div style="margin-left:1cm;">Eine ausführlichere Beschreibung.
Eine ausführlichere Beschreibung
* In diesem Beispiel ist '''file1''' mit dem Typ '''samba_share_t''' gekennzeichnet.
* In diesem Beispiel ist '''file1''' mit dem Typ '''samba_share_t''' gekennzeichnet
* Dieser Typ wird für Dateien und Verzeichnisse verwendet, die Sie über Samba exportieren möchten.
* Dieser Typ wird für Dateien und Verzeichnisse verwendet, die Sie über Samba exportieren möchten
* 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.
* 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


<div style="margin-left:0cm;">Zugriff gewähren
>Zugriff gewähren


<div style="margin-left:1cm;">Ein Vorschlag, wie der Zugriff gewährt werden kann.
Ein Vorschlag, wie der Zugriff gewährt werden kann
* Dies kann das Umbenennen von Dateien, das Aktivieren eines booleschen Werts oder das Erstellen eines lokalen Richtlinienmoduls sein.
* Dies kann das Umbenennen von Dateien, das Aktivieren eines booleschen Werts oder das Erstellen eines lokalen Richtlinienmoduls sein
* 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.
* 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


<div style="margin-left:0cm;">Befehl zur Behebung des Problems
>Befehl zur Behebung des Problems


<div style="margin-left:1cm;">Ein vorgeschlagener Befehl, um den Zugriff zu gewähren und die Zugriffsverweigerung zu beheben.
Ein vorgeschlagener Befehl, um den Zugriff zu gewähren und die Zugriffsverweigerung zu beheben
* In diesem Beispiel wird der Befehl angegeben, den Typ von '''file1''' in '''public_content_t''' zu ändern, der sowohl für den Apache-HTTP-Server als auch für Samba zugänglich ist.
* In diesem Beispiel wird der Befehl angegeben, den Typ von '''file1''' in '''public_content_t''' zu ändern, der sowohl für den Apache-HTTP-Server als auch für Samba zugänglich ist


<div style="margin-left:0cm;">Zusätzliche Informationen
; Zusätzliche Informationen


<div style="margin-left:1cm;">Informationen, die in Fehlerberichten nützlich sind, wie z.
Informationen, die in Fehlerberichten nützlich sind, wie der Name und die Version des Richtlinienpakets ('''selinux-policy-3.13.1-166.el7.noarch'''), die jedoch möglicherweise nicht zur Klärung der Ursache für die Zugriffsverweigerung beitragen
* B.
* der Name und die Version des Richtlinienpakets ('''selinux-policy-3.13.1-166.el7.noarch'''), die jedoch möglicherweise nicht zur Klärung der Ursache für die Zugriffsverweigerung beitragen.


<div style="margin-left:0cm;" >Rohdaten der Audit-Meldungen
; Rohdaten der Audit-Meldungen


<div style="margin-left:1cm;">Die Rohdaten der Audit-Meldungen aus '''/var/log/audit/audit.log''', die mit der Verweigerung in Verbindung stehen.
Die Rohdaten der Audit-Meldungen aus '''/var/log/audit/audit.log''', die mit der Verweigerung in Verbindung stehen
* Informationen zu den einzelnen Elementen der AVC-Verweigerung finden Sie in Abschnitt&nbsp;11.3.6, „Rohdaten der Audit-Meldungen“.
* Informationen zu den einzelnen Elementen der AVC-Verweigerung finden Sie in Abschnitt&nbsp;11.3.6, „Rohdaten der Audit-Meldungen“


=== Zugriff zulassen: audit2allow ===
=== Zugriff zulassen: audit2allow ===
'''Warnung'''
; Warnung
: Verwenden Sie das Beispiel in diesem Abschnitt nicht in der Produktion
:* Es dient lediglich zur Veranschaulichung der Verwendung des Dienstprogramms '''audit2allow'''


Verwenden Sie das Beispiel in diesem Abschnitt nicht in der Produktion.  
Das Dienstprogramm '''audit2allow''' sammelt Informationen aus den Protokollen abgelehnter Vorgänge und generiert daraus SELinux-Policy-Zulassungsregeln.[13] Nachdem Sie die Ablehnungsmeldungen gemäß Abschnitt&nbsp;11.3.7, „sealert-Meldungen“, analysiert haben und sofern keine Label-Änderungen oder Boolesche Werte den Zugriff erlaubt haben, verwenden Sie '''audit2allow''', um ein lokales Policy-Modul zu erstellen
* Es dient lediglich zur Veranschaulichung der Verwendung des Dienstprogramms '''audit2allow'''.
* Wenn der Zugriff von SELinux verweigert wird, generiert die Ausführung von '''audit2allow''' Type-Enforcement-Regeln, die den zuvor verweigerten Zugriff erlauben


Das Dienstprogramm '''audit2allow''' sammelt Informationen aus den Protokollen abgelehnter Vorgänge und generiert daraus SELinux-Policy-Zulassungsregeln.[13] Nachdem Sie die Ablehnungsmeldungen gemäß Abschnitt&nbsp;11.3.7, „sealert-Meldungen“, analysiert haben und sofern keine Label-Änderungen oder Boolesche Werte den Zugriff erlaubt haben, verwenden Sie '''audit2allow''', um ein lokales Policy-Modul zu erstellen.
Sie sollten '''audit2allow''' nicht als erste Option zum Erstellen eines lokalen Richtlinienmoduls verwenden, wenn Sie eine SELinux-Ablehnung feststellen
* Wenn der Zugriff von SELinux verweigert wird, generiert die Ausführung von '''audit2allow''' Type-Enforcement-Regeln, die den zuvor verweigerten Zugriff erlauben.
* Die Fehlerbehebung sollte mit einer Überprüfung beginnen, ob ein Labeling-Problem vorliegt
* Der zweithäufigste Fall ist, dass Sie eine Prozesskonfiguration geändert und vergessen haben, SELinux darüber zu informieren
* Weitere Informationen finden Sie im Whitepaper „Die vier Hauptursachen für SELinux-Fehler“


Sie sollten '''audit2allow''' nicht als erste Option zum Erstellen eines lokalen Richtlinienmoduls verwenden, wenn Sie eine SELinux-Ablehnung feststellen.  
Das folgende Beispiel zeigt die Verwendung von '''audit2allow''' zum Erstellen eines Policy-Moduls: # Eine Verweigerungsmeldung und der zugehörige Systemaufruf werden in der Datei '''/var/log/audit/audit.log''' protokolliert:
* Die Fehlerbehebung sollte mit einer Überprüfung beginnen, ob ein Labeling-Problem vorliegt.
type=AVC msg=audit(1226270358
* Der zweithäufigste Fall ist, dass Sie eine Prozesskonfiguration geändert und vergessen haben, SELinux darüber zu informieren.  
848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
* Weitere Informationen finden Sie im Whitepaper „Die vier Hauptursachen für SELinux-Fehler“.
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="certwatch" exe="/usr/bin/certwatch" subj=system_u: system_r:certwatch_t:s0 key=(null)


Das folgende Beispiel zeigt die Verwendung von '''audit2allow''' zum Erstellen eines Policy-Moduls: # Eine Verweigerungsmeldung und der zugehörige Systemaufruf werden in der Datei '''/var/log/audit/audit.log''' protokolliert:
In diesem Beispiel wurde '''certwatch''' der Schreibzugriff auf ein Verzeichnis verweigert, das mit dem Typ '''var_t''' gekennzeichnet ist
type=AVC msg=audit(1226270358.
* Analysieren Sie die Ablehnungsmeldung gemäß Abschnitt 11.3.7, „sealert-Meldungen“
848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
* Wenn keine Label-Änderungen vorgenommen wurden oder Booleane den Zugriff erlaubt haben, verwenden Sie '''audit2allow''', um ein lokales Richtlinienmodul zu erstellen
# Geben Sie den folgenden Befehl ein, um eine für Menschen lesbare Beschreibung zu erstellen, warum der Zugriff verweigert wurde


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="certwatch" exe="/usr/bin/certwatch" subj=system_u: system_r:certwatch_t:s0 key=(null)
Das Dienstprogramm '''audit2allow''' liest die Datei '''/var/log/audit/audit.log''' und muss daher als Root-Benutzer ausgeführt werden:
In diesem Beispiel wurde '''certwatch''' der Schreibzugriff auf ein Verzeichnis verweigert, das mit dem Typ '''var_t''' gekennzeichnet ist.
sudo audit2allow -w -a
* Analysieren Sie die Ablehnungsmeldung gemäß Abschnitt 11.3.7, „sealert-Meldungen“.
type=AVC msg=audit(1226270358.848:238): avc: verweigert { schreiben } für pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
* Wenn keine Label-Änderungen vorgenommen wurden oder Booleane den Zugriff erlaubt haben, verwenden Sie '''audit2allow''', um ein lokales Richtlinienmodul zu erstellen.
# Geben Sie den folgenden Befehl ein, um eine für Menschen lesbare Beschreibung zu erstellen, warum der Zugriff verweigert wurde.
* Das Dienstprogramm '''audit2allow''' liest die Datei '''/var/log/audit/audit.log''' und muss daher als Root-Benutzer ausgeführt werden:  
sudo audit2allow -w -a
type=AVC msg=audit(1226270358.848:238): avc: verweigert { schreiben } für pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
         Ursache:
         Ursache:
                 Fehlende Type Enforcement (TE)-Zulassungsregel.
                 Fehlende Type Enforcement (TE)-Zulassungsregel
       
Sie können audit2allow verwenden, um ein ladbares Modul zu generieren, das diesen Zugriff erlaubt.
Die Befehlszeilenoption '''-a''' bewirkt, dass alle Audit-Protokolle gelesen werden.
* Die Option '''-w''' erzeugt eine für Menschen lesbare Beschreibung.
* Wie gezeigt, wurde der Zugriff aufgrund einer fehlenden Type Enforcement-Regel verweigert.
# Geben Sie den folgenden Befehl ein, um die Type Enforcement-Regel anzuzeigen, die den verweigerten Zugriff erlaubt:
sudo audit2allow -a


Sie können audit2allow verwenden, um ein ladbares Modul zu generieren, das diesen Zugriff erlaubt


; certwatch_t  
Die Befehlszeilenoption '''-a''' bewirkt, dass alle Audit-Protokolle gelesen werden
allow certwatch_t var_t:dir write;
* Die Option '''-w''' erzeugt eine für Menschen lesbare Beschreibung
* Wie gezeigt, wurde der Zugriff aufgrund einer fehlenden Type Enforcement-Regel verweigert
# Geben Sie den folgenden Befehl ein, um die Type Enforcement-Regel anzuzeigen, die den verweigerten Zugriff erlaubt:
sudo audit2allow -a
; certwatch_t
allow certwatch_t var_t:dir write;


; Wichtig
; Wichtig
: Fehlende Type Enforcement-Regeln werden in der Regel durch Fehler in der SELinux-Richtlinie verursacht und sollten in Red Hat Bugzilla gemeldet werden.
: Fehlende Type Enforcement-Regeln werden in der Regel durch Fehler in der SELinux-Richtlinie verursacht und sollten in Red Hat Bugzilla gemeldet werden
* Erstellen Sie für das Produkt '''Red&nbsp;
* Erstellen Sie für das Produkt '''Red&nbsp;
 
Hat&nbsp;Enterprise&nbsp;Linux''' und wählen Sie die Komponente '''selinux-policy''' aus.
Hat&nbsp;Enterprise&nbsp;Linux''' und wählen Sie die Komponente '''selinux-policy''' aus
* Fügen Sie die Ausgabe der Befehle '''audit2allow -w -a''' und '''audit2allow -a''' in solche Fehlerberichte ein.
* Fügen Sie die Ausgabe der Befehle '''audit2allow -w -a''' und '''audit2allow -a''' in solche Fehlerberichte ein
# Um die von '''audit2allow -a'''' angezeigte Regel zu verwenden, geben Sie als Root den folgenden Befehl ein, um ein benutzerdefiniertes Modul zu erstellen.
# Um die von '''audit2allow -a'''' angezeigte Regel zu verwenden, geben Sie als Root den folgenden Befehl ein, um ein benutzerdefiniertes Modul zu erstellen
* Die Option '''-M''' erstellt eine Type-Enforcement-Datei ('''.te''') mit dem durch '''-M''' angegebenen Namen in Ihrem aktuellen Arbeitsverzeichnis:  
* Die Option '''-M''' erstellt eine Type-Enforcement-Datei ('''.te''') mit dem durch '''-M''' angegebenen Namen in Ihrem aktuellen Arbeitsverzeichnis:
  sudo audit2allow -a -M mycertwatch
  sudo audit2allow -a -M mycertwatch
  ******************** WICHTIG ********** *************
  ******************** WICHTIG ********** *************
Zeile 582: Zeile 580:
  semodule -i mycertwatch.pp
  semodule -i mycertwatch.pp
# Außerdem kompiliert '''audit2allow''' die Type Enforcement-Regel in ein Richtlinienpaket ('''.pp'''):
# Außerdem kompiliert '''audit2allow''' die Type Enforcement-Regel in ein Richtlinienpaket ('''.pp'''):
 
 
sudo ls
sudo ls
  mycertwatch.pp mycertwatch.te
  mycertwatch.pp mycertwatch.te
Um das Modul zu installieren, geben Sie als Root den folgenden Befehl ein:  
Um das Modul zu installieren, geben Sie als Root den folgenden Befehl ein:
  sudo semodule -i ‚'mycertwatch.pp‘'
  sudo semodule -i ‚'mycertwatch.pp‘'


; Wichtig
; Wichtig
: Mit '''audit2allow''' erstellte Module gewähren möglicherweise mehr Zugriff als erforderlich.
: Mit '''audit2allow''' erstellte Module gewähren möglicherweise mehr Zugriff als erforderlich
* Es wird empfohlen, mit '''audit2allow''' erstellte Richtlinien zur Überprüfung an die Upstream-SELinux-Liste zu senden.
* Es wird empfohlen, mit '''audit2allow''' erstellte Richtlinien zur Überprüfung an die Upstream-SELinux-Liste zu senden
* Wenn Sie glauben, dass die Richtlinie einen Fehler enthält, melden Sie diesen bitte in Red Hat Bugzilla.
* Wenn Sie glauben, dass die Richtlinie einen Fehler enthält, melden Sie diesen bitte in Red Hat Bugzilla


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 '''grep''', um die Eingabe für '''audit2allow''' einzugrenzen.
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 '''grep''', um die Eingabe für '''audit2allow''' einzugrenzen
* Das folgende Beispiel zeigt, wie man mit '''grep''' nur Ablehnungsmeldungen im Zusammenhang mit '''certwatch''' an '''audit2allow''' sendet:
* Das folgende Beispiel zeigt, wie man mit '''grep''' nur Ablehnungsmeldungen im Zusammenhang mit '''certwatch''' an '''audit2allow''' sendet:
  sudo grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2
  sudo grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2
Zeile 600: Zeile 598:
   semodule -i mycertwatch2.pp
   semodule -i mycertwatch2.pp


[8] Dateien in '''/etc/selinux/targeted/contexts/files/''' definieren Kontexte für Dateien und Verzeichnisse.
[8] Dateien in '''/etc/selinux/targeted/contexts/files/''' definieren Kontexte für Dateien und Verzeichnisse
* Dateien in diesem Verzeichnis werden von den Dienstprogrammen '''restorecon''' und '''setfiles''' gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen.
* Dateien in diesem Verzeichnis werden von den Dienstprogrammen '''restorecon''' und '''setfiles''' gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen


[9] Der Befehl '''semanage port -a''' fügt einen Eintrag zur Datei '''/etc/selinux/targeted/modules/active/ports.local''' hinzu.
[9] Der Befehl '''semanage port -a''' fügt einen Eintrag zur Datei '''/etc/selinux/targeted/modules/active/ports.local''' hinzu
* Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann.
* Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann


[10] Weitere Informationen zu '''ausearch''' finden Sie in der Manpage von ausearch(8).
[10] Weitere Informationen zu '''ausearch''' finden Sie in der Manpage von ausearch(8)


[11] Weitere Informationen zu '''aureport''' finden Sie in der Manpage zu aureport(8).
[11] Weitere Informationen zu '''aureport''' finden Sie in der Manpage zu aureport(8)


[12] Weitere Informationen zu '''sealert''' finden Sie in der Manpage zu sealert(8).
[12] Weitere Informationen zu '''sealert''' finden Sie in der Manpage zu sealert(8)


[13] Weitere Informationen zu '''audit2allow''' finden Sie in der Manpage zu audit2allow(1).
[13] Weitere Informationen zu '''audit2allow''' finden Sie in der Manpage zu audit2allow(1)


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

Version vom 25. März 2026, 13:43 Uhr

SELinux/DOC/11 Fehlerbehebung

Beschreibung

Fehlerbehebung

Das folgende Kapitel beschreibt, was passiert, wenn SELinux den Zugriff verweigert; die drei häufigsten Ursachen für Probleme; wo Informationen zur korrekten Kennzeichnung zu finden sind; die Analyse von SELinux-Verweigerungen; sowie das Erstellen benutzerdefinierter Policy-Module mit audit2allow

Was passiert, wenn der Zugriff verweigert wird

SELinux-Entscheidungen, wie das Zulassen oder Verweigern von Zugriff, werden zwischengespeichert

  • Dieser Cache wird als Access Vector Cache (AVC) bezeichnet
  • Wenn SELinux den Zugriff verweigert, werden Verweigerungsmeldungen protokolliert

Diese Verweigerungen werden auch als „AVC-Verweigerungen“ bezeichnet und je nach den laufenden Daemons an unterschiedlichen Orten protokolliert:

Daemon Protokollort
auditd aktiv /var/log/audit/audit.log
auditd aus; rsyslogd ein /var/log/messages
setroubleshootd, rsyslogd und auditd ein /var/log/audit/audit.log
  • Besser lesbare Verweigerungsmeldungen werden ebenfalls an /var/log/messages gesendet

Wenn Sie das X Window System ausführen, die Pakete setroubleshoot und setroubleshoot-server installiert haben und die Daemons setroubleshootd und auditd laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird: Datei:Bild1.png

Ein Klick auf Anzeigen 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

  • Wenn Sie das X Window System nicht verwenden, ist es weniger offensichtlich, wenn der Zugriff durch SELinux verweigert wird
  • Beispielsweise können Benutzer, die Ihre Website besuchen, eine Fehlermeldung ähnlich der folgenden erhalten:

Zugriff verweigert

Sie haben keine Berechtigung, auf ‚'Dateiname‘' auf diesem Server zuzugreifen

In solchen Situationen sollten Sie, sofern DAC-Regeln (Standard-Linux-Berechtigungen) den Zugriff erlauben, die Dateien /var/log/messages und /var/log/audit/audit.log auf Fehlermeldungen wie „SELinux is preventing“ bzw. „denied“ überprüfen

  • Dies können Sie tun, indem Sie als Root-Benutzer die folgenden Befehle ausführen:

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

sudo grep „denied“ /var/log/audit/audit.log

Die drei häufigsten Ursachen für Probleme

In den folgenden Abschnitten werden die drei häufigsten Ursachen für Probleme beschrieben: Probleme mit der Labeling, die Konfiguration von Booleans und Ports für Dienste sowie sich weiterentwickelnde SELinux-Regeln

Probleme mit der Labeling

Auf Systemen, auf denen SELinux läuft, werden alle Prozesse und Dateien mit einem Label versehen, das sicherheitsrelevante Informationen enthält

  • Diese Informationen werden als SELinux-Kontext bezeichnet
  • Wenn diese Labels falsch sind, kann der Zugriff verweigert werden
  • Eine falsch gekennzeichnete Anwendung kann dazu führen, dass ihrem Prozess ein falsches Label zugewiesen wird
  • Dies kann dazu führen, dass SELinux den Zugriff verweigert und der Prozess falsch gekennzeichnete Dateien erstellt

Eine häufige Ursache für Probleme mit der Kennzeichnung ist die Verwendung eines nicht standardmäßigen Verzeichnisses für einen Dienst

  • Anstatt beispielsweise /var/www/html/ für eine Website zu verwenden, möchte ein Administrator '
/srv/myweb/ verwenden
  • Unter Red Hat Enterprise Linux ist das Verzeichnis /srv mit dem Typ var_t gekennzeichnet
  • In /srv erstellte Dateien und Verzeichnisse erben diesen Typ
  • Außerdem können neu erstellte Objekte in Verzeichnissen der obersten Ebene (wie z
  • B. /myserver) mit dem Typ default_t gekennzeichnet sein
  • SELinux verhindert, dass der Apache-HTTP-Server (httpd) auf beide dieser Typen zugreifen kann

Um den Zugriff zu ermöglichen, muss SELinux wissen, dass die Dateien in /srv/myweb/ für httpd zugänglich sein sollen:

sudo semanage fcontext -a -t httpd_sys_content_t „/srv/myweb(/.*)?“

Dieser semanage Befehl fügt den Kontext für das Verzeichnis /srv/myweb/ (und alle darunter liegenden Dateien und Verzeichnisse) zur SELinux-Dateikontextkonfiguration hinzu[8]

  • Das Dienstprogramm semanage ändert den Kontext nicht

Führen Sie als root das Dienstprogramm restorecon aus, um die Änderungen zu übernehmen:

sudo restorecon -R -v /srv/myweb

Weitere Informationen zum Hinzufügen von Kontexten zur Dateikontextskonfiguration finden Sie im Abschnitt „Persistente Änderungen: semanage fcontext

Was ist der richtige Kontext?

Das Dienstprogramm matchpathcon überprüft den Kontext eines Dateipfads und vergleicht ihn mit der Standard-Label für diesen Pfad

Das folgende Beispiel zeigt die Verwendung von matchpathcon für ein Verzeichnis, das falsch gelabelte Dateien enthält:

matchpathcon -V /var/www/html/*

/var/www/html/index.html hat den Kontext unconfined_u:object_r:user_home_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein

/ var/www/html/page1.html hat den Kontext unconfined_u:object_r:user_home_t:s0, sollte system_u:object_r:httpd_sys_content_t:s0 sein

In diesem Beispiel sind die Dateien index.html und page1.html mit dem Typ user_home_t gekennzeichnet

  • Dieser Typ wird für Dateien in Benutzer-Home-Verzeichnissen verwendet
  • Die Verwendung des Befehls mv zum Verschieben von Dateien aus Ihrem Home-Verzeichnis kann dazu führen, dass Dateien mit dem Typ user_home_t gekennzeichnet werden
  • Dieser Typ sollte außerhalb von Home-Verzeichnissen nicht vorkommen
  • Verwenden Sie das Dienstprogramm restorecon, um solche Dateien wieder auf ihren korrekten Typ zurückzusetzen:
sudo restorecon -v /var/www/html/ index.html
restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

Um den Kontext für alle Dateien in einem Verzeichnis wiederherzustellen, verwenden Sie die Option -R

sudo restorecon -R -v /var/www/html/
restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
restorecon reset /var/www/html/
index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0

Siehe Abschnitt&nbsp„[[Überprüfen des Standard-SELinux-Kontexts] ]“ für ein detaillierteres Beispiel zu matchpathcon

Wie werden eingeschränkte Dienste ausgeführt?

Dienste können auf verschiedene Arten ausgeführt werden

  • Um dies zu berücksichtigen, müssen Sie angeben, wie Sie Ihre Dienste ausführen
  • Dies kann durch Boolesche Werte erreicht werden, die es ermöglichen, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne Kenntnisse im Schreiben von SELinux-Richtlinien zu benötigen
  • Dies ermöglicht Änderungen, wie das Zulassen des Zugriffs von Diensten auf NFS-Volumes, ohne die SELinux-Richtlinie neu laden oder neu kompilieren zu müssen
  • Auch das Ausführen von Diensten auf nicht standardmäßigen Portnummern erfordert eine Aktualisierung der Richtlinienkonfiguration mithilfe des Befehls semanage

Um beispielsweise dem Apache-HTTP-Server die Kommunikation mit MariaDB zu ermöglichen, aktivieren Sie den Booleschen Wert httpd_can_network_connect_db :

sudo setsebool -P httpd_can_network_connect_db on

Wenn der Zugriff für einen bestimmten Dienst verweigert wird, verwenden Sie die Dienstprogramme getsebool und grep, um zu prüfen, ob Booleane verfügbar sind, die den Zugriff ermöglichen

Verwenden Sie beispielsweise den Befehl getsebool -a | grep ftp, um nach FTP-bezogenen Booleanen zu suchen:

getsebool -a | grep ftp
ftpd_anon_write --> off

ftpd_full_access --> off

ftpd_use_cifs --> off
ftpd_use_nfs --> off
ftpd_connect_db --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

Um eine Liste der Booleans und deren Status (aktiv oder inaktiv) anzuzeigen, führen Sie den Befehl getsebool -a aus

  • Um eine Liste der Booleschen Werte, eine Erklärung zu deren Bedeutung sowie Angaben dazu zu erhalten, ob sie aktiviert oder deaktiviert sind, führen Sie als Root den Befehl semanage boolean -l aus
  • Informationen zum Auflisten und Konfigurieren von Booleschen Werten finden Sie in Abschnitt 4.6, „Boolesche Werte“

Portnummern

Je nach Richtlinienkonfiguration dürfen Dienste möglicherweise nur auf bestimmten Portnummern ausgeführt werden

  • Der Versuch, den Port zu ändern, auf dem ein Dienst läuft, ohne die Richtlinie zu ändern, kann dazu führen, dass der Dienst nicht gestartet werden kann

Führen Sie beispielsweise als Root den Befehl semanage port -l | grep http aus, um httpbezogene Ports aufzulisten:

sudo semanage port -l | grep http
http_cache_port_t tcp 3128, 8080, 8118
http_cache_port_t udp 3130
http_port_t tcp 80, 443, 488, 8008, 8009, 8443
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989

Der Porttyp http_port_t definiert die Ports, auf denen der Apache-HTTP-Server lauschen kann; in diesem Fall sind dies die TCP-Ports 80, 443, 488, 8008, 8009 und 8443

Wenn ein Administrator die Datei httpd.conf so konfiguriert, dass httpd auf Port 9876 (Listen 9876), die Richtlinie jedoch nicht entsprechend aktualisiert wird, schlägt der folgende Befehl fehl:

sudo systemctl start httpd.service
Der Job für httpd.service ist fehlgeschlagen. Siehe ‚systemctl status httpd.service‘ und ‚journalctl -xn‘ für Details
sudo systemctl status httpd.service
httpd.service – Der Apache-HTTP-Server
  Geladen: geladen (/usr/lib/systemd/system/httpd.service; deaktiviert)
  Aktiv: fehlgeschlagen (Ergebnis: Exit-Code) seit Do 15.08.2013 09:57:05 MESZ; vor 59 s
 Prozess: 16874 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=0/SUCCESS)
 Prozess: 16870 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)

Eine SELinux-Ablehnungsmeldung ähnlich der folgenden wird in /var/log/audit/audit.log protokolliert:

type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket

Um httpd zu erlauben, auf einem Port zu lauschen, der nicht für den Porttyp http_port_t aufgeführt ist, geben Sie den Befehl semanage port ein, um einen Port zur Richtlinienkonfiguration hinzuzufügen[9]:

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

Die Option -a fügt einen neuen Eintrag hinzu; die Option -t definiert einen Typ; und die Option -p definiert ein Protokoll

  • Das letzte Argument ist die hinzuzufügende Portnummer

Sich weiterentwickelnde Regeln und fehlerhafte Anwendungen

Anwendungen können fehlerhaft sein, was dazu führt, dass SELinux den Zugriff verweigert

  • Außerdem entwickeln sich die SELinux-Regeln weiter – SELinux hat möglicherweise noch nie eine Anwendung gesehen, die auf eine bestimmte Weise läuft, was dazu führen kann, dass der Zugriff verweigert wird, obwohl die Anwendung wie erwartet funktioniert
  • Wenn beispielsweise eine neue Version von PostgreSQL veröffentlicht wird, führt diese möglicherweise Aktionen aus, die die aktuelle Richtlinie noch nicht kennt, was dazu führt, dass der Zugriff verweigert wird, obwohl er eigentlich erlaubt sein sollte

Verwenden Sie in solchen Situationen nach einer Zugriffsverweigerung das Dienstprogramm audit2allow, um ein benutzerdefiniertes Richtlinienmodul zu erstellen, das den Zugriff erlaubt

  • Informationen zur Verwendung von audit2allow finden Sie in Abschnitt 11.3.8, „Zugriff zulassen: audit2allow“

Probleme beheben

Die folgenden Abschnitte helfen bei der Fehlerbehebung

  • Sie behandeln: die Überprüfung von Linux-Berechtigungen, die vor den SELinux-Regeln geprüft werden; mögliche Ursachen dafür, dass SELinux den Zugriff verweigert, aber keine Verweigerungen protokolliert werden; Handbuchseiten für Dienste, die Informationen zu Labeling und Booleschen Werten enthalten; permissive Domänen, um einem einzelnen Prozess statt dem gesamten System permissives Verhalten zu ermöglichen; das Suchen und Anzeigen von Verweigerungsmeldungen; das Analysieren von Verweigerungen; sowie das Erstellen benutzerdefinierter Policy-Module mit audit2allow

Linux-Berechtigungen

Wenn der Zugriff verweigert wird, überprüfen Sie die Standard-Linux-Berechtigungen

  • Wie in Kapitel 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
  • SELinux-Richtlinienregeln werden nach den DAC-Regeln überprüft
  • SELinux-Richtlinienregeln werden nicht angewendet, wenn DAC-Regeln den Zugriff bereits verweigert haben

Wenn der Zugriff verweigert wird und keine SELinux-Verweigerungen protokolliert werden, verwenden Sie den folgenden Befehl, um die Standard-Linux-Berechtigungen anzuzeigen:

ls -l /var/www/html/index.html
-rw-r----- 1 root root 0 2009-05-07 11:06 index.html

In diesem Beispiel gehört die Datei index.html dem Root-Benutzer und der Root-Gruppe

  • Der Root-Benutzer verfügt über Lese- und Schreibrechte (-rw), und Mitglieder der Root-Gruppe haben Leserechte (-r-)
  • Alle anderen haben keinen Zugriff (---)
  • Standardmäßig erlauben solche Berechtigungen httpd nicht, diese Datei zu lesen
  • Um dieses Problem zu beheben, verwenden Sie den Befehl chown, um den Eigentümer und die Gruppe zu ändern
  • Dieser Befehl muss als root ausgeführt werden:
sudo chown apache:apache /var/www/html/index.html

Dies setzt die Standardkonfiguration voraus, in der httpd als Linux-Apache-Benutzer läuft

  • Wenn Sie httpd mit einem anderen Benutzer ausführen, ersetzen Sie apache:apache durch diesen Benutzer

Informationen zur Verwaltung von Linux-Berechtigungen finden Sie im Entwurf „Permissions“ des Fedora Documentation Project

Mögliche Ursachen für stille Zugriffsverweigerungen

In bestimmten Situationen werden AVC-Verweigerungsmeldungen möglicherweise nicht protokolliert, wenn SELinux den Zugriff verweigert

  • Anwendungen und Systembibliotheksfunktionen versuchen oft, mehr Zugriff zu erlangen, als für die Ausführung ihrer Aufgaben erforderlich ist
  • 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
  • Diese Regeln sind in Standardrichtlinien üblich
  • Der Nachteil von „dontaudit“ ist, dass, obwohl SELinux den Zugriff verweigert, keine Verweigerungsmeldungen protokolliert werden, was die Fehlerbehebung erschwert

Um „dontaudit“-Regeln vorübergehend zu deaktivieren, sodass alle Verweigerungen protokolliert werden, geben Sie als Root den folgenden Befehl ein:

sudo semodule -DB

Die Option -D deaktiviert die „dontaudit“-Regeln; die Option -B erstellt die Richtlinie neu

  • Versuchen Sie nach dem Ausführen von semodule -DB 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
  • Seien Sie vorsichtig bei der Entscheidung, welche Verweigerungen zugelassen werden sollen, da einige ignoriert und durch dontaudit-Regeln behandelt werden sollten
  • Wenn Sie Zweifel haben oder Rat suchen, wenden Sie sich an andere SELinux-Benutzer und -Entwickler in einer SELinux-Mailingliste, wie fedora-selinux-list

Um die Richtlinie neu zu erstellen und dontaudit -Regeln zu aktivieren, geben Sie als Root den folgenden Befehl ein:

sudo semodule -B

Dadurch wird die Richtlinie in ihren ursprünglichen Zustand zurückversetzt

  • Für eine vollständige Liste der dontaudit-Regeln führen Sie den Befehl sesearch --dontaudit aus
  • Grenzen Sie die Suche mit der Option -s ‚'domain‘' und dem Befehl grep ein
Beispiel
sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;

Siehe Abschnitt „Raw Audit Messages“ und Abschnitt „[ [sealert-Meldungen]]“ für Informationen zur Analyse von Zugriffsverweigerungen

Handbuchseiten für Dienste

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 httpd beim Zugriff auf NFS-Volumes)

  • Diese Informationen können in der Standard-Handbuchseite oder in der Handbuchseite enthalten sein, die mit dem Dienstprogramm sepolicy manpage automatisch aus der SELinux-Richtlinie für jede Dienstdomäne generiert werden kann
  • Solche Handbuchseiten sind im Format '‚Dienstname‘'_selinux benannt
  • Solche Handbuchseiten werden auch mit dem Paket selinux-policy-doc ausgeliefert

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. ermöglichen

  • Weitere Manpages mit SELinux-Informationen für Dienste sind unter anderem:
  • Samba: Die Manpage samba_selinux(8) beschreibt beispielsweise, dass die Aktivierung des Booleschen Werts samba_enable_home_dirs es Samba ermöglicht, Benutzer-Home-Verzeichnisse freizugeben
  • 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

Die Informationen in den Handbuchseiten helfen Ihnen dabei, die richtigen Dateitypen und Booleans zu konfigurieren, um zu verhindern, dass SELinux den Zugriff verweigert

Weitere Informationen zur sepolicy-Handbuchseite finden Sie im Abschnitt „Generieren von Handbuchseiten: sepolicy-Handbuchseite

Permissive Domänen

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

  • Früher war es nicht möglich, eine einzelne Domäne permissiv zu machen (denken Sie daran: Prozesse laufen in Domänen)
  • In bestimmten Situationen führte dies dazu, dass das gesamte System zur Fehlerbehebung permissiv gemacht wurde

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

  • 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

Permissive Domänen haben folgende Verwendungszwecke:

  • 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
  • Sie ermöglichen es einem Administrator, Richtlinien für neue Anwendungen zu erstellen
  • 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
  • Das Tool audit2allow konnte dann zur Erstellung der Richtlinie herangezogen werden
  • Dies stellte das gesamte System einem Risiko aus
  • Mit permissiven Domänen kann nur die Domäne in der neuen Richtlinie als permissiv markiert werden, ohne das gesamte System einem Risiko auszusetzen

Eine Domäne permissiv machen

Um eine Domäne permissiv zu machen, führen Sie den Befehl semanage permissive -a ‚'domain‘' aus, wobei ‚'domain‘' die Domäne ist, die Sie permissiv machen möchten

Geben Sie beispielsweise als Root den folgenden Befehl ein, um die Domäne httpd_t (die Domäne, in der der Apache-HTTP-Server läuft) permissiv zu machen:

sudo semanage permissive -a httpd_t

Um eine Liste der Domänen anzuzeigen, die Sie als permissiv markiert haben, führen Sie als Root den Befehl semodule -l | grep permissive aus

Beispiel
sudo semodule -l | grep permissive
permissive_httpd_t (null)
permissivedomains (null)

Wenn Sie eine Domäne nicht mehr als permissiv festlegen möchten, führen Sie den Befehl semanage permissive -d ‚'domain‘' als Root aus

Beispiel
sudo semanage permissive -d httpd_t

Deaktivieren von permissiven Domänen

Das Modul permissivedomains.pp enthält alle Deklarationen für permissive Domänen, die auf dem System vorhanden sind

  • Um alle permissiven Domänen zu deaktivieren, geben Sie als Root den folgenden Befehl ein:
sudo semodule -d permissivedomains
Hinweis
Sobald ein Richtlinienmodul über den Befehl semodule -d deaktiviert wurde, wird es nicht mehr in der Ausgabe des Befehls semodule -l angezeigt

Um alle Richtlinienmodule einschließlich der deaktivierten anzuzeigen, geben Sie als Root den folgenden Befehl ein:

sudo semodule --list-modules=full

Ablehnungen für permissive Domänen

Die SYSCALL -Meldung unterscheidet sich bei permissiven Domänen

  • Im Folgenden finden Sie ein Beispiel für eine AVC-Ablehnung (und den zugehörigen Systemaufruf) vom Apache-HTTP-Server:
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm= „httpd“ path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
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
8 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

Standardmäßig ist die Domäne httpd_t nicht permissiv, weshalb die Aktion verweigert wird und die SYSCALL -Meldung success=no enthält

  • Das Folgende ist ein Beispiel für eine AVC-Verweigerung in derselben Situation, mit dem Unterschied, dass der Befehl semanage permissive -a httpd_t ausgeführt wurde, um die Domäne httpd_t permissiv zu machen:
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u: object_r:samba_share_t:s0 tclass=file
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="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

In diesem Fall wurde zwar eine AVC-Ablehnung protokolliert, der Zugriff wurde jedoch nicht verweigert, wie durch success=yes in der SYSCALL -Meldung angezeigt wird

Weitere Informationen zu permissiven Domänen finden Sie in Dan Walshs Blogeintrag „Permissive Domains“

Suchen und Anzeigen von Verweigerungen

Dieser Abschnitt setzt voraus, dass die Pakete setroubleshoot, setroubleshoot-server, dbus und audit installiert sind und dass die Daemons auditd, rsyslogd und setroubleshootd laufen

  • Informationen zum Starten dieser Daemons finden Sie im Abschnitt „ Welche Protokolldatei wird verwendet“ für Informationen zum Starten dieser Daemons
  • Es stehen eine Reihe von Dienstprogrammen zum Suchen und Anzeigen von SELinux-AVC-Meldungen zur Verfügung, wie beispielsweise ausearch, aureport und sealert

ausearch

Das audit-Paket enthält das Dienstprogramm ausearch, mit dem die Protokolle des audit-Daemons nach Ereignissen anhand verschiedener Suchkriterien durchsucht werden können.[10]

Das Dienstprogramm ausearch greift auf /var/log/audit/audit.log zu und muss daher als Root-Benutzer ausgeführt werden:

Suche nach Befehl
alle Verweigerungen ausearch -m avc,user_avc,selinux_err,user_selinux_err
Verweigerungen für den heutigen Tag ausearch -m avc -ts today
Verweigerungen der letzten 10 Minuten ausearch -m avc -ts recent

Um nach SELinux-AVC-Meldungen für einen bestimmten Dienst zu suchen, verwenden Sie die Option -c ‚'comm-name‘', wobei ‚'comm-name‘' der Name der ausführbaren Datei ist, zum Beispiel httpd für den Apache-HTTP-Server und smbd für Samba:

sudo ausearch -m avc -c httpd
sudo ausearch -m avc -c smbd

Bei jedem ausearch Befehl wird empfohlen, entweder die Option --interpret (-i) für bessere Lesbarkeit oder die Option --raw (-r) für die Skriptverarbeitung zu verwenden

  • Weitere Optionen für ausearch finden Sie in der Handbuchseite ausearch(8)

aureport

Das Audit-Paket enthält das Dienstprogramm aureport, das zusammenfassende Berichte der Audit-Systemprotokolle erstellt. [11] Das Dienstprogramm aureport greift auf /var/log/audit/audit.log zu und muss daher als Root-Benutzer ausgeführt werden

  • Um eine Liste der SELinux-Ablehnungsmeldungen und deren Häufigkeit anzuzeigen, führen Sie den Befehl aureport -a aus

Nachfolgend finden Sie eine Beispielausgabe, die zwei Ablehnungen enthält:

sudo aureport -a
AVC-Bericht
==========================
# Datum Uhrzeit Befehl Subjekt Systemaufruf Klasse Berechtigung Objekt Ereignis
======================================
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
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

sealert

Das Paket setroubleshoot-server stellt das Dienstprogramm sealert bereit, das die von setroubleshoot-server übersetzten Ablehnungsmeldungen ausliest.[12] Ablehnungen werden IDs zugewiesen, wie in /var/log/messages zu sehen ist

Das Folgende ist ein Beispiel für eine Ablehnung aus messages:

setroubleshoot: SELinux verhindert den Zugriff von /usr/sbin/httpd auf name_bind über den tcp_socket

Für vollständige SELinux-Meldungen führen Sie sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7

In diesem Beispiel lautet die Ablehnungs-ID 8c123656-5dda-4e5d-8791-9e3bd03786b7

  • Die Option -l nimmt eine ID als Argument entgegen
  • Die Ausführung des Befehls sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7 liefert eine detaillierte Analyse, warum SELinux den Zugriff verweigert hat, sowie eine mögliche Lösung, um den Zugriff zu ermöglichen

Wenn Sie das X Window System verwenden, die Pakete setroubleshoot und setroubleshoot-server installiert haben und die Daemons setroubleshootd, dbus und auditd laufen, wird eine Warnung angezeigt, wenn der Zugriff von SELinux verweigert wird:

„Eine AVC-Ablehnungsmeldung“

Ein Klick auf Anzeigen startet die sealert GUI, mit der Sie das Problem beheben können:

Datei:Bild3.png

Alternativ können Sie den Befehl sealert -b ausführen, um die sealert GUI zu starten

  • Um eine detaillierte Analyse aller Verweigerungsmeldungen anzuzeigen, führen Sie den Befehl sealert -l \* aus

Rohdaten der Audit-Meldungen

Rohdaten der Audit-Meldungen werden in /var/log/audit/audit.log protokolliert

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 httpd_t läuft) versuchte, auf die Datei /var/www/html/file1 (mit dem Typ samba_share_t gekennzeichnet):

type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm -0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
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="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

>{ getattr }

Der Eintrag in den geschweiften Klammern gibt die verweigerte Berechtigung an

  • Der Eintrag getattr zeigt an, dass der Quellprozess versucht hat, die Statusinformationen der Zieldatei zu lesen
  • Dies geschieht vor dem Lesen von Dateien
  • Diese Aktion wird verweigert, da die Datei, auf die zugegriffen wird, ein falsches Label hat
  • Häufig vorkommende Berechtigungen sind getattr, read und write

>comm=„‚'httpd‘'“

Die ausführbare Datei, die den Prozess gestartet hat

  • Der vollständige Pfad der ausführbaren Datei findet sich im Abschnitt exe= der Systemaufruf-Meldung (SYSCALL), der in diesem Fall exe=„/usr/sbin/httpd“ lautet


„>path=“'/var/www/html/file1"

Der Pfad zu dem Objekt (Ziel), auf das der Prozess zuzugreifen versuchte


>scontext=„‚'unconfined_u:system_r:httpd_t:s0‘'“

Der SELinux-Kontext des Prozesses, der die abgelehnte Aktion versucht hat

  • In diesem Fall ist es der SELinux-Kontext des Apache-HTTP-Servers, der in der Domäne httpd_t läuft

>tcontext=„‚'unconfined_u:object_r:samba_share_t:s0‘'“

Der SELinux-Kontext des Objekts (Ziels), auf das der Prozess zugreifen wollte

  • In diesem Fall ist es der SELinux-Kontext von file1
  • Beachten Sie, dass der Typ
samba_share_t für Prozesse, die in der httpd_t Domäne laufen, nicht zugänglich ist

In bestimmten Situationen kann der tcontext mit dem scontext übereinstimmen, beispielsweise wenn ein Prozess versucht, einen Systemdienst auszuführen, der Eigenschaften des laufenden Prozesses, wie beispielsweise die Benutzer-ID, ändert

  • Außerdem kann der tcontext mit dem scontext ü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

Aus der Systemaufruf-Meldung (SYSCALL) sind zwei Punkte von Interesse: * success=‚'no‘': gibt an, ob die Verweigerung (AVC) durchgesetzt wurde oder nicht

success=no bedeutet, dass der Systemaufruf nicht erfolgreich war (SELinux hat den Zugriff verweigert). success=yes bedeutet, dass der Systemaufruf erfolgreich war

  • Dies ist bei permissiven Domänen oder unconfined Domänen zu beobachten, wie beispielsweise unconfined_service_t und kernel_t
  • exe=„'/usr/sbin/httpd: der vollständige Pfad zu der ausführbaren Datei, die den Prozess gestartet hat; in diesem Fall ist dies exe=„/usr/sbin/httpd“

Ein falscher Dateityp ist eine häufige Ursache dafür, dass SELinux den Zugriff verweigert

  • Um mit der Fehlerbehebung zu beginnen, vergleichen Sie den Quellkontext (scontext) mit dem Zielkontext (tcontext )
  • Sollte der Prozess (scontext) auf ein solches Objekt (tcontext) zugreifen? Beispielsweise sollte der Apache-HTTP-Server (httpd_t) nur auf Typen zugreifen, die in der Handbuchseite httpd_selinux(8) angegeben sind, wie httpd_sys_content_t, public_content_t'‚ usw., sofern nicht anders konfiguriert

sealert-Meldungen

Verweigerungen werden IDs zugewiesen, wie in ‘/var/log/messages

  • Das Folgende ist ein Beispiel für eine AVC-Verweigerung (protokolliert in messages), die auftrat, als der Apache-HTTP-Server (der in der Domäne httpd_t läuft) versuchte, auf die Datei /var/www/html/file1 (mit dem Typ samba_share_t gekennzeichnet) zuzugreifen:

‚'hostname‘' setroubleshoot: SELinux verhindert, dass httpd (httpd_t) „getattr“ auf /var/www/html/file1 (samba_share_t) ausführt

  • Für vollständige SELinux-Meldungen führen Sie sealert -l 32eee32b-21ca-4846-a22f-0ba050206786 aus

Führen Sie wie vorgeschlagen den Befehl sealert -l 32eee32b-21ca-4846-a22f-0ba050206786 aus, um die vollständige Meldung anzuzeigen

Dieser Befehl funktioniert nur auf dem lokalen Rechner und zeigt dieselben Informationen an wie die sealert GUI:

sealert -l 32eee32b-21ca-4846-a22f-0ba050206786

SELinux verhindert, dass httpd mit getattr auf die Datei /var/www/html/file1 zugreift

          • Das Plugin restorecon (92,2 % Zuverlässigkeit) schlägt vor ************************

Wenn Sie das Label korrigieren möchten Das Standard-Label für /var/www/html/file1 sollte httpd_sys_content_t lauten Dann können Sie restorecon ausführen Führen Sie

sudo /sbin/restorecon -v /var/www/html/file1
          • Das Plugin public_content (Vertrauenswürdigkeit 7,83) schlägt vor ********************

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 Führen Sie Folgendes aus

sudo semanage fcontext -a -t public_content_t ‚/var/www/html/file1‘

sudo restorecon -v ‚/var/www/html/file1‘

***** Das Plugin catchall (Vertrauenswürdigkeit 1,41) schlägt vor **************************

Wenn Sie der Meinung sind, dass httpd standardmäßig getattr-Zugriff auf die Datei file1 erhalten sollte

  • Dann sollten Sie dies als Fehler melden
  • Sie können ein lokales Richtlinienmodul erstellen, um diesen Zugriff zuzulassen

Erlauben Sie diesen Zugriff vorerst durch Ausführung von:

sudo ausearch -c ‚httpd‘ --raw | audit2allow -M my-httpd
sudo semodule -i my-httpd.pp
Zusätzliche Informationen:
Quellkontext system_u:system_r:httpd_t:s0

Zielkontext unconfined_u:object_r:samba_share_t:s0

Zielobjekte /var/www/html/file1 [ Datei ]
Quelle httpd
Quellpfad httpd
Port <Unbekannt>
Host hostname.redhat.com
Quell-RPM-Pakete
Ziel-RPM-Pakete
Richtlinien-RPM selinux-policy-3.13.1-166.el7.noarch

Selinux aktiviert True

Richtlinientyp targeted
Durchsetzungsmodus Enforcing
Hostname hostname.redhat.com
Plattform Linux hostname.redhat.com
                              3.10.0-693.el7.x86_64 #1 SMP Do, 6
  • Juli 19:56:57
                              EDT 2017 x86_64 x86_64

Anzahl der Warnmeldungen 2

Erstmals gesehen 20.07.2017 02:52:11 EDT
Zuletzt gesehen 20.07.2017 02:52:11 EDT
Lokale ID 32eee32b-21ca-4846-a22f-0ba050206786

Rohdaten der Audit-Meldungen

 type=AVC msg=audit(1500533531.140:295): avc: abgelehnt { getattr } für pid=24934 comm="httpd" path="/var/www/html/file1" dev="vda1" ino=31457414 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file

Hash: httpd,httpd_t,samba_share_t,file,getattr

>Zusammenfassung

Eine kurze Zusammenfassung der abgelehnten Aktion

  • Dies entspricht der Ablehnung in /var/log/messages
  • In diesem Beispiel wurde dem Prozess httpd der Zugriff auf eine Datei (file1) verweigert, die mit dem Typ samba_share_t gekennzeichnet ist

>Detaillierte Beschreibung

Eine ausführlichere Beschreibung

  • In diesem Beispiel ist file1 mit dem Typ samba_share_t gekennzeichnet
  • Dieser Typ wird für Dateien und Verzeichnisse verwendet, die Sie über Samba exportieren möchten
  • 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

>Zugriff gewähren

Ein Vorschlag, wie der Zugriff gewährt werden kann

  • Dies kann das Umbenennen von Dateien, das Aktivieren eines booleschen Werts oder das Erstellen eines lokalen Richtlinienmoduls sein
  • 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

>Befehl zur Behebung des Problems

Ein vorgeschlagener Befehl, um den Zugriff zu gewähren und die Zugriffsverweigerung zu beheben

  • In diesem Beispiel wird der Befehl angegeben, den Typ von file1 in public_content_t zu ändern, der sowohl für den Apache-HTTP-Server als auch für Samba zugänglich ist
Zusätzliche Informationen

Informationen, die in Fehlerberichten nützlich sind, wie der Name und die Version des Richtlinienpakets (selinux-policy-3.13.1-166.el7.noarch), die jedoch möglicherweise nicht zur Klärung der Ursache für die Zugriffsverweigerung beitragen

Rohdaten der Audit-Meldungen

Die Rohdaten der Audit-Meldungen aus /var/log/audit/audit.log, die mit der Verweigerung in Verbindung stehen

  • Informationen zu den einzelnen Elementen der AVC-Verweigerung finden Sie in Abschnitt 11.3.6, „Rohdaten der Audit-Meldungen“

Zugriff zulassen: audit2allow

Warnung
Verwenden Sie das Beispiel in diesem Abschnitt nicht in der Produktion
  • Es dient lediglich zur Veranschaulichung der Verwendung des Dienstprogramms audit2allow

Das Dienstprogramm audit2allow sammelt Informationen aus den Protokollen abgelehnter Vorgänge und generiert daraus SELinux-Policy-Zulassungsregeln.[13] Nachdem Sie die Ablehnungsmeldungen gemäß Abschnitt 11.3.7, „sealert-Meldungen“, analysiert haben und sofern keine Label-Änderungen oder Boolesche Werte den Zugriff erlaubt haben, verwenden Sie audit2allow, um ein lokales Policy-Modul zu erstellen

  • Wenn der Zugriff von SELinux verweigert wird, generiert die Ausführung von audit2allow Type-Enforcement-Regeln, die den zuvor verweigerten Zugriff erlauben

Sie sollten audit2allow nicht als erste Option zum Erstellen eines lokalen Richtlinienmoduls verwenden, wenn Sie eine SELinux-Ablehnung feststellen

  • Die Fehlerbehebung sollte mit einer Überprüfung beginnen, ob ein Labeling-Problem vorliegt
  • Der zweithäufigste Fall ist, dass Sie eine Prozesskonfiguration geändert und vergessen haben, SELinux darüber zu informieren
  • Weitere Informationen finden Sie im Whitepaper „Die vier Hauptursachen für SELinux-Fehler“

Das folgende Beispiel zeigt die Verwendung von audit2allow zum Erstellen eines Policy-Moduls: # Eine Verweigerungsmeldung und der zugehörige Systemaufruf werden in der Datei /var/log/audit/audit.log protokolliert: type=AVC msg=audit(1226270358

848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
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="certwatch" exe="/usr/bin/certwatch" subj=system_u: system_r:certwatch_t:s0 key=(null)

In diesem Beispiel wurde certwatch der Schreibzugriff auf ein Verzeichnis verweigert, das mit dem Typ var_t gekennzeichnet ist

  • Analysieren Sie die Ablehnungsmeldung gemäß Abschnitt 11.3.7, „sealert-Meldungen“
  • Wenn keine Label-Änderungen vorgenommen wurden oder Booleane den Zugriff erlaubt haben, verwenden Sie audit2allow, um ein lokales Richtlinienmodul zu erstellen
  1. Geben Sie den folgenden Befehl ein, um eine für Menschen lesbare Beschreibung zu erstellen, warum der Zugriff verweigert wurde

Das Dienstprogramm audit2allow liest die Datei /var/log/audit/audit.log und muss daher als Root-Benutzer ausgeführt werden:

sudo audit2allow -w -a
type=AVC msg=audit(1226270358.848:238): avc: verweigert { schreiben } für pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
       Ursache:
               Fehlende Type Enforcement (TE)-Zulassungsregel

Sie können audit2allow verwenden, um ein ladbares Modul zu generieren, das diesen Zugriff erlaubt

Die Befehlszeilenoption -a bewirkt, dass alle Audit-Protokolle gelesen werden

  • Die Option -w erzeugt eine für Menschen lesbare Beschreibung
  • Wie gezeigt, wurde der Zugriff aufgrund einer fehlenden Type Enforcement-Regel verweigert
  1. Geben Sie den folgenden Befehl ein, um die Type Enforcement-Regel anzuzeigen, die den verweigerten Zugriff erlaubt:
sudo audit2allow -a
certwatch_t
allow certwatch_t var_t:dir write;
Wichtig
Fehlende Type Enforcement-Regeln werden in der Regel durch Fehler in der SELinux-Richtlinie verursacht und sollten in Red Hat Bugzilla gemeldet werden
  • Erstellen Sie für das Produkt Red 

Hat Enterprise Linux und wählen Sie die Komponente selinux-policy aus

  • Fügen Sie die Ausgabe der Befehle audit2allow -w -a und audit2allow -a in solche Fehlerberichte ein
  1. Um die von audit2allow -a' angezeigte Regel zu verwenden, geben Sie als Root den folgenden Befehl ein, um ein benutzerdefiniertes Modul zu erstellen
  • Die Option -M erstellt eine Type-Enforcement-Datei (.te) mit dem durch -M angegebenen Namen in Ihrem aktuellen Arbeitsverzeichnis:
sudo audit2allow -a -M mycertwatch
******************** WICHTIG ********** *************
Um dieses Richtlinienpaket zu aktivieren, führen Sie Folgendes aus:
semodule -i mycertwatch.pp
  1. Außerdem kompiliert audit2allow die Type Enforcement-Regel in ein Richtlinienpaket (.pp):

sudo ls

mycertwatch.pp mycertwatch.te

Um das Modul zu installieren, geben Sie als Root den folgenden Befehl ein:

sudo semodule -i ‚'mycertwatch.pp‘'
Wichtig
Mit audit2allow erstellte Module gewähren möglicherweise mehr Zugriff als erforderlich
  • Es wird empfohlen, mit audit2allow erstellte Richtlinien zur Überprüfung an die Upstream-SELinux-Liste zu senden
  • Wenn Sie glauben, dass die Richtlinie einen Fehler enthält, melden Sie diesen bitte in Red Hat Bugzilla

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 grep, um die Eingabe für audit2allow einzugrenzen

  • Das folgende Beispiel zeigt, wie man mit grep nur Ablehnungsmeldungen im Zusammenhang mit certwatch an audit2allow sendet:
sudo grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2
******************** WICHTIG ***************** ******
Um dieses Richtlinienpaket zu aktivieren, führen Sie Folgendes aus:
 semodule -i mycertwatch2.pp

[8] Dateien in /etc/selinux/targeted/contexts/files/ definieren Kontexte für Dateien und Verzeichnisse

  • Dateien in diesem Verzeichnis werden von den Dienstprogrammen restorecon und setfiles gelesen, um Dateien und Verzeichnisse in ihre Standardkontexte zurückzusetzen

[9] Der Befehl semanage port -a fügt einen Eintrag zur Datei /etc/selinux/targeted/modules/active/ports.local hinzu

  • Beachten Sie, dass diese Datei standardmäßig nur von root eingesehen werden kann

[10] Weitere Informationen zu ausearch finden Sie in der Manpage von ausearch(8)

[11] Weitere Informationen zu aureport finden Sie in der Manpage zu aureport(8)

[12] Weitere Informationen zu sealert finden Sie in der Manpage zu sealert(8)

[13] Weitere Informationen zu audit2allow finden Sie in der Manpage zu audit2allow(1)