Zum Inhalt springen

Linux/SELinux/11 Fehlerbehebung: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
'''SELinux/DOC/11 Troubleshooting'''
‚‘'SELinux/DOC/11 Fehlerbehebung'‚‘


== Beschreibung ==
== Beschreibung ==
; Troubleshooting
; Fehlerbehebung
The following chapter describes what happens when SELinux denies access; the top three causes of problems; where to find information about correct labeling; analyzing SELinux denials; and creating custom policy modules with '''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'‚‘.


== What Happens when Access is Denied ==
== Was passiert, wenn der Zugriff verweigert wird ==
SELinux decisions, such as allowing or disallowing access, are cached. This cache is known as the Access Vector Cache (AVC). Denial messages are logged when SELinux denies access. These denials are also known as "AVC denials", and are logged to a different location, depending on which daemons are running:
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
! | Daemon
! | Log Location
! | Protokollort
|-
|-
|| auditd on
|| auditd aktiv
|| '''/var/log/audit/audit.log'''
|| ‚‘'/var/log/audit/audit.log'‚‘
|-
|-
|| auditd off; rsyslogd on
|| auditd aus; rsyslogd ein
|| '''/var/log/messages'''
|| ‚‘'/var/log/messages'‚‘
|-
|-
|| setroubleshootd, rsyslogd, and auditd on
|| setroubleshootd, rsyslogd und auditd ein
|| '''/var/log/audit/audit.log'''. Easier-to-read denial messages also sent to '''/var/log/messages'''
|| ‚‘'/var/log/audit/audit.log'‚‘. Besser lesbare Verweigerungsmeldungen werden ebenfalls an ‚‘'/var/log/messages'‚‘ gesendet
|-
|-
|}
|}


If you are running the X Window System, have the setroubleshoot and setroubleshoot-server packages installed, and the '''setroubleshootd''' and '''auditd''' daemons are running, a warning is displayed when access is denied by SELinux:
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:
[[Image:Bild1.png|top]]
[[Image:Bild1.png|top]]


Clicking on '''Show''' presents a detailed analysis of why SELinux denied access, and a possible solution for allowing access. If you are not running the X Window System, it is less obvious when access is denied by SELinux. For example, users browsing your website may receive an error similar to the following:
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:
Forbidden
Zugriff verweigert


You don't have permission to access ''file name'' on this server
Sie haben keine Berechtigung, auf ‚'Dateiname‘' auf diesem Server zuzugreifen


For these situations, if DAC rules (standard Linux permissions) allow access, check '''/var/log/messages''' and '''/var/log/audit/audit.log''' for '''"SELinux is preventing"''' and '''"denied"''' errors respectively. This can be done by running the following commands as the root user:
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
sudo grep „SELinux is preventing“ /var/log/messages
  sudo grep „denied“ /var/log/audit/audit.log


== Top Three Causes of Problems ==
== Die drei häufigsten Ursachen für Probleme ==
The following sections describe the top three causes of problems: labeling problems, configuring Booleans and ports for services, and evolving SELinux rules.
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.


=== Labeling Problems ===
=== Probleme mit der Labeling ===
On systems running SELinux, all processes and files are labeled with a label that contains security-relevant information. This information is called the SELinux context. If these labels are wrong, access may be denied. An incorrectly labeled application may cause an incorrect label to be assigned to its process. This may cause SELinux to deny access, and the process may create mislabeled files.
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.


A common cause of labeling problems is when a non-standard directory is used for a service. For example, instead of using '''/var/www/html/''' for a website, an administrator wants to use '''/srv/myweb/'''. On Red Hat Enterprise Linux, the '''/srv''' directory is labeled with the '''var_t''' type. Files and directories created in '''/srv''' inherit this type. Also, newly-created objects in top-level directories (such as '''/myserver''') may be labeled with the '''default_t''' type. SELinux prevents the Apache HTTP Server ('''httpd''') from accessing both of these types. To allow access, SELinux must know that the files in '''/srv/myweb/''' are to be accessible to '''httpd''':
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 '
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/myweb(/.*)?"
‚‘/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(/.*)?


This '''semanage''' command adds the context for the '''/srv/myweb/''' directory (and all files and directories under it) to the SELinux file-context configuration[8]. The '''semanage''' utility does not change the context. As root, run the '''restorecon''' utility to apply the changes:
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
  sudo restorecon -R -v /srv/myweb


See Section “[[Persistent Changes: semanage fcontext]]” for further information about adding contexts to the file-context configuration.
Weitere Informationen zum Hinzufügen von Kontexten zur Dateikontextskonfiguration finden Sie im Abschnitt „[[Persistente Änderungen: semanage fcontext]].


==== What is the Correct Context? ====
==== Was ist der richtige Kontext? ====
The '''matchpathcon''' utility checks the context of a file path and compares it to the default label for that path. The following example demonstrates using '''matchpathcon''' on a directory that contains incorrectly labeled files:
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/*
  matchpathcon -V /var/www/html/*
  /var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
   
  /var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
/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 this example, the '''index.html''' and '''page1.html''' files are labeled with the '''user_home_t''' type. This type is used for files in user home directories. Using the '''mv''' command to move files from your home directory may result in files being labeled with the '''user_home_t''' type. This type should not exist outside of home directories. Use the '''restorecon''' utility to restore such files to their correct type:
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
  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
  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


To restore the context for all files under a directory, use the '''-R''' option:
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/index.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


See Section&nbsp“[[Checking the Default SELinux Context]]” for a more detailed example of '''matchpathcon'''.
Siehe Abschnitt&nbsp„[[Überprüfen des Standard-SELinux-Kontexts] ]“ für ein detaillierteres Beispiel zu ‚‘'matchpathcon'‚‘.


=== How are Confined Services Running? ===
=== Wie werden eingeschränkte Dienste ausgeführt? ===
Services can be run in a variety of ways. To cater for this, you need to specify how you run your services. This can be achieved through Booleans that allow parts of SELinux policy to be changed at runtime, without any knowledge of SELinux policy writing. This allows changes, such as allowing services access to NFS volumes, without reloading or recompiling SELinux policy. Also, running services on non-default port numbers requires policy configuration to be updated using the '''semanage''' command.
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 z. B. 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'‚‘.


For example, to allow the Apache HTTP Server to communicate with MariaDB, enable the '''httpd_can_network_connect_db''' Boolean:
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


If access is denied for a particular service, use the '''getsebool''' and '''grep''' utilities to see if any Booleans are available to allow access.  
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.  


For example, use the '''getsebool -a | grep ftp''' command to search for FTP related Booleans:
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
  ftpd_use_nfs --> off
  ftpd_use_nfs --> off
Zeile 84: Zeile 91:
  tftp_anon_write --> off
  tftp_anon_write --> off


For a list of Booleans and whether they are on or off, run the '''getsebool -a''' command. For a list of Booleans, an explanation of what each one is, and whether they are on or off, run the '''semanage boolean -l''' command as root. See Section 4.6, “Booleans” for information about listing and configuring Booleans.
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“.


=== Port Numbers ===
=== Portnummern ===
Depending on policy configuration, services may only be allowed to run on certain port numbers. Attempting to change the port a service runs on without changing policy may result in the service failing to start. For example, run the '''semanage port -l | grep http''' command as root to list '''http''' related ports:
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 ‚‘'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
  http_cache_port_t             udp     3130
  http_cache_port_t udp 3130
  http_port_t                   tcp     80, 443, 488, 8008, 8009, 8443
  http_port_t tcp 80, 443, 488, 8008, 8009, 8443
  pegasus_http_port_t           tcp     5988
  pegasus_http_port_t tcp 5988
  pegasus_https_port_t           tcp     5989
  pegasus_https_port_t tcp 5989


The '''http_port_t''' port type defines the ports Apache HTTP Server can listen on, which in this case, are TCP ports 80, 443, 488, 8008, 8009, and 8443. If an administrator configures '''httpd.conf''' so that '''httpd''' listens on port 9876 ('''Listen 9876'''), but policy is not updated to reflect this, the following command fails:
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
  sudo systemctl start httpd.service
  Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.
(‚‘'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
  sudo systemctl status httpd.service
  httpd.service - The Apache HTTP Server
  httpd.service – Der Apache-HTTP-Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Geladen: geladen (/usr/lib/systemd/system/httpd.service; deaktiviert)
   Active: failed (Result: exit-code) since Thu 2013-08-15 09:57:05 CEST; 59s ago
   Aktiv: fehlgeschlagen (Ergebnis: Exit-Code) seit Do 15.08.2013 09:57:05 MESZ; vor 59 s
   Process: 16874 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=0/SUCCESS)
   Prozess: 16874 ExecStop=/usr/sbin/httpd $OPTIONS -k graceful-stop (code=exited, status=0/SUCCESS)
   Process: 16870 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
   Prozess: 16870 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)


An SELinux denial message similar to the following is logged to '''/var/log/audit/audit.log''':
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
  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


To allow '''httpd''' to listen on a port that is not listed for the '''http_port_t''' port type, enter the '''semanage port''' command to add a port to policy configuration[9]:
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
  sudo semanage port -a -t http_port_t -p tcp 9876


The '''-a''' option adds a new record; the '''-t''' option defines a type; and the '''-p''' option defines a protocol. The last argument is the port number to add.
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.


=== Evolving Rules and Broken Applications ===
=== Sich weiterentwickelnde Regeln und fehlerhafte Anwendungen ===
Applications may be broken, causing SELinux to deny access. Also, SELinux rules are evolving – SELinux may not have seen an application running in a certain way, possibly causing it to deny access, even though the application is working as expected. For example, if a new version of PostgreSQL is released, it may perform actions the current policy has not seen before, causing access to be denied, even though access should be allowed.
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.


For these situations, after access is denied, use the '''audit2allow''' utility to create a custom policy module to allow access. See Section 11.3.8, “Allowing Access: audit2allow” for information about using '''audit2allow'''.
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“.


== Fixing Problems ==
== Probleme beheben ==
The following sections help troubleshoot issues. They go over: checking Linux permissions, which are checked before SELinux rules; possible causes of SELinux denying access, but no denials being logged; manual pages for services, which contain information about labeling and Booleans; permissive domains, for allowing one process to run permissive, rather than the whole system; how to search for and view denial messages; analyzing denials; and creating custom policy modules with '''audit2allow'''.
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 Permissions ===
=== Linux-Berechtigungen ===
When access is denied, check standard Linux permissions. As mentioned in Chapter 1, ''Introduction'', most operating systems use a Discretionary Access Control (DAC) system to control access, allowing users to control the permissions of files that they own. SELinux policy rules are checked after DAC rules. SELinux policy rules are not used if DAC rules deny access first.
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.


If access is denied and no SELinux denials are logged, use the following command to view the standard Linux permissions:
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
  ls -l /var/www/html/index.html
  -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 this example, '''index.html''' is owned by the root user and group. The root user has read and write permissions ('''-rw'''), and members of the root group have read permissions ('''-r-'''). Everyone else has no access ('''---'''). By default, such permissions do not allow '''httpd''' to read this file. To resolve this issue, use the '''chown''' command to change the owner and group. This command must be run as root:
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
  sudo chown apache:apache /var/www/html/index.html


This assumes the default configuration, in which '''httpd''' runs as the Linux Apache user. If you run '''httpd''' with a different user, replace '''apache:apache''' with that user.
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.


See the Fedora Documentation Project "Permissions" draft for information about managing Linux permissions.
Informationen zur Verwaltung von Linux-Berechtigungen finden Sie im Entwurf „Permissions“ des Fedora Documentation Project.


=== Possible Causes of Silent Denials ===
=== Mögliche Ursachen für stille Zugriffsverweigerungen ===
In certain situations, AVC denial messages may not be logged when SELinux denies access. Applications and system library functions often probe for more access than required to perform their tasks. To maintain the least privilege without filling audit logs with AVC denials for harmless application probing, the policy can silence AVC denials without allowing permission by using ''dontaudit'' rules. These rules are common in standard policy. The downside of dontaudit is that, although SELinux denies access, denial messages are not logged, making troubleshooting more difficult.
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.


To temporarily disable dontaudit rules, allowing all denials to be logged, enter the following command as root:
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


The '''-D''' option disables dontaudit rules; the '''-B''' option rebuilds policy. After running '''semodule -DB''', try exercising the application that was encountering permission problems, and see if SELinux denials — relevant to the application — are now being logged. Take care in deciding which denials should be allowed, as some should be ignored and handled by dontaudit rules. If in doubt, or in search of guidance, contact other SELinux users and developers on an SELinux list, such as fedora-selinux-list.
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 z. B. fedora-selinux-list.


To rebuild policy and enable '''dontaudit''' rules, enter the following command as root:
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


This restores the policy to its original state. For a full list of dontaudit rules, run the '''sesearch --dontaudit''' command. Narrow down searches using the '''-s ''domain''''' option and the '''grep''' command. For example:
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. Zum Beispiel:
  sesearch --dontaudit -s smbd_t | grep squid
   
sesearch --dontaudit -s smbd_t | grep squid
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : tcp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;
dontaudit smbd_t squid_port_t : udp_socket name_bind ;


See Section “[[Raw Audit Messages]]” and Section “[[sealert Messages]]” for information about analyzing denials.
Siehe Abschnitt „[[Raw Audit Messages]]“ und Abschnitt „[ [sealert-Meldungen]]“ für Informationen zur Analyse von Zugriffsverweigerungen.


=== Manual Pages for Services ===
=== Handbuchseiten für Dienste ===
Manual pages for services contain valuable information, such as what file type to use for a given situation, and Booleans to change the access a service has (such as '''httpd''' accessing NFS volumes). This information may be in the standard manual page or in the manual page that can be automatically generated from the SELinux policy for every service domain using the '''sepolicy manpage''' utility. Such manual pages are named in the '''''service-name''_selinux''' format. Such manual pages are also shipped with the selinux-policy-doc package.
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. 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. Solche Handbuchseiten sind im Format ‚‘''‚Dienstname‘'_selinux'‚‘ benannt. Solche Handbuchseiten werden auch mit dem Paket selinux-policy-doc ausgeliefert.


For example, the httpd_selinux(8) manual page has information about what file type to use for a given situation, as well as Booleans to allow scripts, sharing files, accessing directories inside user home directories, and so on. Other manual pages with SELinux information for services include:
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: the samba_selinux(8) manual page for example describes that enabling the '''samba_enable_home_dirs''' Boolean allows Samba to share users home directories.
* 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: the nfsd_selinux(8) manual page describes SELinux nfsd policy that allows users to setup their nfsd processes in as secure a method as possible.
* 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.


The information in manual pages helps you configure the correct file types and Booleans, helping to prevent SELinux from denying access.
Die Informationen in den Handbuchseiten helfen Ihnen dabei, die richtigen Dateitypen und Booleans zu konfigurieren, um zu verhindern, dass SELinux den Zugriff verweigert.


See Section “[[Generating Manual Pages]]: '''sepolicy manpage'''” for further information about '''sepolicy manpage'''.
Weitere Informationen zur ‚‘'sepolicy-Handbuchseite'‚‘ finden Sie im Abschnitt „[[Generieren von Handbuchseiten]]: ‚‘'sepolicy-Handbuchseite'‚‘”.


=== Permissive Domains ===
=== Permissive Domänen ===
When SELinux is running in permissive mode, SELinux does not deny access, but denials are logged for actions that would have been denied if running in enforcing mode. Previously, it was not possible to make a single domain permissive (remember: processes run in domains). In certain situations, this led to making the whole system permissive to troubleshoot issues.
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 allow an administrator to configure a single process (domain) to run permissive, rather than making the whole system permissive. SELinux checks are still performed for permissive domains; however, the kernel allows access and reports an AVC denial for situations where SELinux would have denied access.
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 domains have the following uses:  
Permissive Domänen haben folgende Verwendungszwecke:  
* They can be used for making a single process (domain) run permissive to troubleshoot an issue without putting the entire system at risk by making it permissive.
* 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.
* They allow an administrator to create policies for new applications. Previously, it was recommended that a minimal policy be created, and then the entire machine put into permissive mode, so that the application could run, but SELinux denials still logged. The '''audit2allow''' could then be used to help write the policy. This put the whole system at risk. With permissive domains, only the domain in the new policy can be marked permissive, without putting the whole system at risk.
* 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.


==== Making a Domain Permissive ====
==== Eine Domäne permissiv machen ====
To make a domain permissive, run the '''semanage permissive -a ''domain''''' command, where ''domain'' is the domain you want to make permissive. For example, enter the following command as root to make the '''httpd_t''' domain (the domain the Apache HTTP Server runs in) permissive:
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
   
sudo semanage permissive -a httpd_t


To view a list of domains you have made permissive, run the '''semodule -l | grep permissive''' command as root. For example:
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)


If you no longer want a domain to be permissive, run the '''semanage permissive -d ''domain''''' command as root. For example:
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:
  sudo semanage permissive -d httpd_t
  sudo semanage permissive -d httpd_t


==== Disabling Permissive Domains ====
==== Deaktivieren von permissiven Domänen ====
The '''permissivedomains.pp''' module contains all of the permissive domain declarations that are presented on the system. To disable all permissive domains, enter the following command as root:
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
  sudo semodule -d permissivedomains


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


Once a policy module is disabled through the '''semodule -d''' command, it is no longer showed in the output of the '''semodule -l''' command. To see all policy modules including disabled, enter the following command as root:
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
  sudo semodule --list-modules=full


==== Denials for Permissive Domains ====
==== Ablehnungen für permissive Domänen ====
The '''SYSCALL''' message is different for permissive domains. The following is an example AVC denial (and the associated system call) from the Apache HTTP Server:
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=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=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 (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)


By default, the '''httpd_t''' domain is not permissive, and as such, the action is denied, and the '''SYSCALL''' message contains '''success=no'''. The following is an example AVC denial for the same situation, except the '''semanage permissive -a httpd_t''' command has been run to make the '''httpd_t''' domain permissive:
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=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 this case, although an AVC denial was logged, access was not denied, as shown by '''success=yes''' in the '''SYSCALL''' message.
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.


See Dan Walsh's "Permissive Domains" blog entry for further information about permissive domains.
Weitere Informationen zu permissiven Domänen finden Sie in Dan Walshs Blogeintrag „Permissive Domains“.


=== Searching For and Viewing Denials ===
=== Suchen und Anzeigen von Verweigerungen ===
This section assumes the setroubleshoot, setroubleshoot-server, dbus and audit packages are installed, and that the '''auditd''', '''rsyslogd''', and '''setroubleshootd''' daemons are running. See Section “[[Which Log File is Used]]” for information about starting these daemons. A number of utilites are available for searching for and viewing SELinux AVC messages, such as '''ausearch''', '''aureport''', and '''sealert'''.
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 ===
=== ausearch ===
The audit package provides the '''ausearch''' utility that can query the '''audit''' daemon logs for events based on different search criteria.[10] The '''ausearch''' utility accesses '''/var/log/audit/audit.log''', and as such, must be run as the root user:
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:
{|
{|
|-
|-
! | Searching For
! | Suche nach
! | Command
! | Befehl
|-
|-
|| all denials
|| alle Verweigerungen
|| '''ausearch -m avc,user_avc,selinux_err,user_selinux_err'''
|| ‚‘'ausearch -m avc,user_avc,selinux_err,user_selinux_err'‚‘
|-
|-
|| denials for that today
|| Verweigerungen für den heutigen Tag
|| '''ausearch -m avc -ts today'''
|| ‚‘'ausearch -m avc -ts today'‚‘
|-
|-
|| denials from the last 10 minutes
|| Verweigerungen der letzten 10 Minuten
|| '''ausearch -m avc -ts recent'''
|| ‚‘'ausearch -m avc -ts recent'‚‘
|-
|-
|}
|}


To search for SELinux AVC messages for a particular service, use the '''-c ''comm-name''''' option, where ''comm-name'' is the executable’s name, for example, '''httpd''' for the Apache HTTP Server, and '''smbd''' for 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 smbd
sudo ausearch -m avc -c httpd
  sudo ausearch -m avc -c smbd


With each '''ausearch''' command, it is advised to use either the '''--interpret''' ('''-i''') option for easier readability, or the '''--raw''' ('''-r''') option for script processing. See the ausearch(8) manual page for further '''ausearch''' options.
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 ===
=== aureport ===
The audit package provides the '''aureport''' utility, which produces summary reports of the audit system logs. [11] The '''aureport''' utility accesses '''/var/log/audit/audit.log''', and as such, must be run as the root user. To view a list of SELinux denial messages and how often each one occurred, run the '''aureport -a''' command. The following is example output that includes two denials:
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
  sudo aureport -a
AVC-Bericht
   
   
  AVC Report
======================================
  # Datum Uhrzeit Befehl Subjekt Systemaufruf Klasse Berechtigung Objekt Ereignis
  ======================================
  ======================================
# date time comm subj syscall class permission obj event
  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
  1. 05/01/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. 05/03/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 ===
=== sealert ===
The setroubleshoot-server package provides the '''sealert''' utility, which reads denial messages translated by setroubleshoot-server.[12] Denials are assigned IDs, as seen in '''/var/log/messages'''. The following is an example denial from '''messages''':
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 is preventing /usr/sbin/httpd from name_bind access on the tcp_socket. For complete SELinux messages. run sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7
  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 this example, the denial ID is '''8c123656-5dda-4e5d-8791-9e3bd03786b7'''. The '''-l''' option takes an ID as an argument. Running the '''sealert -l 8c123656-5dda-4e5d-8791-9e3bd03786b7''' command presents a detailed analysis of why SELinux denied access, and a possible solution for allowing access.
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.


If you are running the X Window System, have the setroubleshoot and setroubleshoot-server packages installed, and the '''setroubleshootd''', '''dbus''' and '''auditd''' daemons are running, a warning is displayed when access is denied by SELinux:
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:


[[Image:Bild2.png|top|alt="An AVC denial message"]]
[[Image:Bild2.png|top|alt=„Eine AVC-Ablehnungsmeldung“]]


Clicking on '''Show''' launches the '''sealert''' GUI, which allows you to troubleshoot the problem:
Ein Klick auf ‚‘'Anzeigen'‚‘ startet die ‚‘'sealert'‚‘ GUI, mit der Sie das Problem beheben können:


[[Image:Bild3.png|top]]
[[Image:Bild3.png|top]]


Alternatively, run the '''sealert -b''' command to launch the '''sealert''' GUI. To view a detailed analysis of all denial messages, run the '''sealert -l \*''' command.
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.


=== Raw Audit Messages ===
=== Rohdaten der Audit-Meldungen ===
Raw audit messages are logged to '''/var/log/audit/audit.log'''. The following is an example AVC denial message (and the associated system call) that occurred when the Apache HTTP Server (running in the '''httpd_t''' domain) attempted to access the '''/var/www/html/file1''' file (labeled with the '''samba_share_t''' type):
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=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=48 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 }''</div>
<div style="margin-left:0cm;">‚‘{ getattr }‚‘


<div style="margin-left:1cm;">The item in the curly brackets indicates the permission that was denied. The '''getattr''' entry indicates the source process was trying to read the target file's status information. This occurs before reading files. This action is denied due to the file being accessed having a wrong label. Commonly seen permissions include '''getattr''', '''read''', and '''write'''. </div>
<div style="margin-left:1cm;">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'‚‘.  


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


<div style="margin-left:1cm;">The executable that launched the process. The full path of the executable is found in the '''exe=''' section of the system call ('''SYSCALL''') message, which in this case, is '''exe="/usr/sbin/httpd"'''. </div>
<div style="margin-left:1cm;">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.  


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


<div style="margin-left:1cm;">The path to the object (target) the process attempted to access. </div>
<div style="margin-left:1cm;">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''"</div>
<div style="margin-left:0cm;"
>scontext=„‚'unconfined_u:system_r:httpd_t:s0‘'


<div style="margin-left:1cm;">The SELinux context of the process that attempted the denied action. In this case, it is the SELinux context of the Apache HTTP Server, which is running in the '''httpd_t''' domain. </div>
<div style="margin-left:1cm;">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.  


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


<div style="margin-left:1cm;">The SELinux context of the object (target) the process attempted to access. In this case, it is the SELinux context of '''file1'''. Note that the '''samba_share_t''' type is not accessible to processes running in the '''httpd_t''' domain. </div>
<div style="margin-left:1cm;">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.  


<div style="margin-left:1cm;">In certain situations, the '''tcontext''' may match the '''scontext''', for example, when a process attempts to execute a system service that will change characteristics of that running process, such as the user ID. Also, the '''tcontext''' may match the '''scontext''' when a process tries to use more resources (such as memory) than normal limits allow, resulting in a security check to see if that process is allowed to break those limits. </div>
<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. 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.  


From the system call ('''SYSCALL''') message, two items are of interest: * '''success=''no''''': indicates whether the denial (AVC) was enforced or not. '''success=no''' indicates the system call was not successful (SELinux denied access). '''success=yes''' indicates the system call was successful. This can be seen for permissive domains or unconfined domains, such as '''unconfined_service_t''' and '''kernel_t'''.
Aus der Systemaufruf-Meldung (‚‘'SYSCALL'‚‘) sind zwei Punkte von Interesse: * ‚‘'success='no‘''‚‘: gibt an, ob die Verweigerung (AVC) durchgesetzt wurde oder nicht.
* '''exe="''/usr/sbin/httpd''"''': the full path to the executable that launched the process, which in this case, is '''exe="/usr/sbin/httpd"'''.
‚‘'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“‚‘'.


An incorrect file type is a common cause for SELinux denying access. To start troubleshooting, compare the source context ('''scontext''') with the target context ('''tcontext'''). Should the process ('''scontext''') be accessing such an object ('''tcontext''')? For example, the Apache HTTP Server ('''httpd_t''') should only be accessing types specified in the httpd_selinux(8) manual page, such as '''httpd_sys_content_t''', '''public_content_t''', and so on, unless configured otherwise.
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 Messages ===
=== sealert-Meldungen ===
Denials are assigned IDs, as seen in '''/var/log/messages'''. The following is an example AVC denial (logged to '''messages''') that occurred when the Apache HTTP Server (running in the '''httpd_t''' domain) attempted to access the '''/var/www/html/file1''' file (labeled with the '''samba_share_t''' type):
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 is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
'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


As suggested, run the '''sealert -l 32eee32b-21ca-4846-a22f-0ba050206786''' command to view the complete message. This command only works on the local machine, and presents the same information as the '''sealert''' GUI:
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
  sealert -l 32eee32b-21ca-4846-a22f-0ba050206786
SELinux is preventing httpd from getattr access on the file /var/www/html/file1.
SELinux verhindert, dass httpd mit getattr auf die Datei /var/www/html/file1 zugreift.
***** Das Plugin restorecon (92,2 % Zuverlässigkeit) schlägt vor ************************


*****  Plugin restorecon (92.2 confidence) suggests  ************************
Wenn Sie das Label korrigieren möchten.
 
Das Standard-Label für /var/www/html/file1 sollte httpd_sys_content_t lauten.
If you want to fix the label.
Dann können Sie restorecon ausführen.
/var/www/html/file1 default label should be httpd_sys_content_t.
Führen Sie
Then you can run restorecon.
Do
  sudo /sbin/restorecon -v /var/www/html/file1
  sudo /sbin/restorecon -v /var/www/html/file1
  ***** Plugin public_content (7.83 confidence) suggests  ********************
   
***** Das Plugin public_content (Vertrauenswürdigkeit 7,83) schlägt vor ********************


If you want to treat file1 as public content
Wenn Sie file1 als öffentlichen Inhalt behandeln möchten
Then you need to change the label on file1 to public_content_t or public_content_rw_t.
Dann müssen Sie die Label von file1 in public_content_t oder public_content_rw_t ändern.
Do
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'
   
  ***** Plugin catchall (1.41 confidence) suggests  **************************
sudo restorecon -v /var/www/html/file1‘
  ***** Das Plugin catchall (Vertrauenswürdigkeit 1,41) schlägt vor **************************


If you believe that httpd should be allowed getattr access on the file1 file by default.
Wenn Sie der Meinung sind, dass httpd standardmäßig getattr-Zugriff auf die Datei file1 erhalten sollte.
* Then you should report this as a bug.
* Dann sollten Sie dies als Fehler melden.
* You can generate a local policy module to allow this access.
* Sie können ein lokales Richtlinienmodul erstellen, um diesen Zugriff zuzulassen.


Do
Erlauben
allow this access for now by executing:
Sie diesen Zugriff vorerst durch Ausführung von:
  sudo ausearch -c 'httpd' --raw | audit2allow -M my-httpd
  sudo ausearch -c ‚httpd‘ --raw | audit2allow -M my-httpd
  sudo semodule -i my-httpd.pp
  sudo semodule -i my-httpd.pp


  Additional Information:
  Zusätzliche Informationen:
  Source Context                system_u:system_r:httpd_t:s0
  Quellkontext system_u:system_r:httpd_t:s0
  Target Context                unconfined_u:object_r:samba_share_t:s0
   
  Target Objects                /var/www/html/file1 [ file ]
Zielkontext unconfined_u:object_r:samba_share_t:s0
  Source                        httpd
  Zielobjekte /var/www/html/file1 [ Datei ]
  Source Path                  httpd
  Quelle httpd
  Port                         <Unknown>
  Quellpfad httpd
  Host                         hostname.redhat.com
  Port <Unbekannt>
  Source RPM Packages
  Host hostname.redhat.com
  Target RPM Packages
  Quell-RPM-Pakete
  Policy RPM                   selinux-policy-3.13.1-166.el7.noarch
  Ziel-RPM-Pakete
  Selinux Enabled              True
  Richtlinien-RPM selinux-policy-3.13.1-166.el7.noarch
  Policy Type                  targeted
   
  Enforcing Mode                Enforcing
Selinux aktiviert True
  Host Name                    hostname.redhat.com
  Richtlinientyp targeted
  Platform                      Linux hostname.redhat.com
  Durchsetzungsmodus Enforcing
                               3.10.0-693.el7.x86_64 #1 SMP Thu Jul 6 19:56:57
  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
                               EDT 2017 x86_64 x86_64
  Alert Count                  2
   
  First Seen                    2017-07-20 02:52:11 EDT
Anzahl der Warnmeldungen 2
  Last Seen                    2017-07-20 02:52:11 EDT
  Erstmals gesehen 20.07.2017 02:52:11 EDT
  Local ID                     32eee32b-21ca-4846-a22f-0ba050206786
  Zuletzt gesehen 20.07.2017 02:52:11 EDT
 
  Lokale ID 32eee32b-21ca-4846-a22f-0ba050206786
Raw Audit Messages
   type=AVC msg=audit(1500533531.140:295): avc: denied  { getattr } for  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
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
 
Hash: httpd,httpd_t,samba_share_t,file,getattr
<div style="margin-left:0cm;">Summary</div>


<div style="margin-left:1cm;">A brief summary of the denied action. This is the same as the denial in '''/var/log/messages'''. In this example, the '''httpd''' process was denied access to a file ('''file1'''), which is labeled with the '''samba_share_t''' type. </div>
<div style="margin-left:0cm;">Zusammenfassung


<div style="margin-left:0cm;">Detailed Description</div>
<div style="margin-left:1cm;">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.
<div style="margin-left:0cm;">Detaillierte Beschreibung


<div style="margin-left:1cm;">A more verbose description. In this example, '''file1''' is labeled with the '''samba_share_t''' type. This type is used for files and directories that you want to export using Samba. The description suggests changing the type to a type that can be accessed by the Apache HTTP Server and Samba, if such access is required. </div>
<div style="margin-left:1cm;">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.  


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


<div style="margin-left:1cm;">A suggestion for how to allow access. This may be relabeling files, enabling a Boolean, or making a local policy module. In this case, the suggestion is to label the file with a type accessible to both the Apache HTTP Server and Samba. </div>
<div style="margin-left:1cm;">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.  


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


<div style="margin-left:1cm;">A suggested command to allow access and resolve the denial. In this example, it gives the command to change the '''file1''' type to '''public_content_t''', which is accessible to the Apache HTTP Server and Samba. </div>
<div style="margin-left:1cm;">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.  


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


<div style="margin-left:1cm;">Information that is useful in bug reports, such as the policy package name and version ('''selinux-policy-3.13.1-166.el7.noarch'''), but may not help towards solving why the denial occurred. </div>
<div style="margin-left:1cm;">Informationen, die in Fehlerberichten nützlich sind, wie z. 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;">Raw Audit Messages</div>
<div style="margin-left:0cm;" >Rohdaten der Audit-Meldungen


<div style="margin-left:1cm;">The raw audit messages from '''/var/log/audit/audit.log''' that are associated with the denial. See Section&nbsp;11.3.6, “Raw Audit Messages” for information about each item in the AVC denial. </div>
<div style="margin-left:1cm;">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“.  


=== Allowing Access: audit2allow ===
=== Zugriff zulassen: audit2allow ===
'''Warning'''
‚‘'Warnung'‚‘


Do not use the example in this section in production. It is used only to demonstrate the use of the '''audit2allow''' utility.
Verwenden Sie das Beispiel in diesem Abschnitt nicht in der Produktion. Es dient lediglich zur Veranschaulichung der Verwendung des Dienstprogramms ‚‘'audit2allow'‚‘.


The '''audit2allow''' utility gathers information from logs of denied operations and then generates SELinux policy allow rules.[13] After analyzing denial messages as per Section&nbsp;11.3.7, “sealert Messages”, and if no label changes or Booleans allowed access, use '''audit2allow''' to create a local policy module. When access is denied by SELinux, running '''audit2allow''' generates Type Enforcement rules that allow the previously denied access.
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. Wenn der Zugriff von SELinux verweigert wird, generiert die Ausführung von ‚‘'audit2allow'‚‘ Type-Enforcement-Regeln, die den zuvor verweigerten Zugriff erlauben.


You should not use '''audit2allow''' to generate a local policy module as your first option when you see an SELinux denial. Troubleshooting should start with a check if there is a labeling problem. The second most often case is that you have changed a process configuration, and you forgot to tell SELinux about it. For more information, see the Four Key Causes of SELinux Errors white paper.
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“.


The following example demonstrates using '''audit2allow''' to create a policy module: # A denial message and the associated system call are logged to the '''/var/log/audit/audit.log''' file:  
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=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)
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 this example, '''certwatch''' was denied the write access to a directory labeled with the '''var_t''' type. Analyze the denial message as per Section&nbsp;11.3.7, “sealert Messages”. If no label changes or Booleans allowed access, use '''audit2allow''' to create a local policy module.
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.
# Enter the following command to produce a human-readable description of why the access was denied. The '''audit2allow''' utility reads '''/var/log/audit/audit.log''', and as such, must be run as the root user:  
# 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
sudo audit2allow -w -a
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=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
         Was caused by:
         Ursache:
                 Missing type enforcement (TE) allow rule.
                 Fehlende Type Enforcement (TE)-Zulassungsregel.
 
       
        You can use audit2allow to generate a loadable module to allow this access.
Sie können audit2allow verwenden, um ein ladbares Modul zu generieren, das diesen Zugriff erlaubt.
The '''-a''' command-line option causes all audit logs to be read. The '''-w''' option produces the human-readable description. As shown, access was denied due to a missing Type Enforcement rule.
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.
# Enter the following command to view the Type Enforcement rule that allows the denied access:  
# Geben Sie den folgenden Befehl ein, um die Type Enforcement-Regel anzuzeigen, die den verweigerten Zugriff erlaubt:  
sudo audit2allow -a
sudo audit2allow -a


Zeile 408: Zeile 435:
allow certwatch_t var_t:dir write;
allow certwatch_t var_t:dir write;


; Important
; Wichtig
: Missing Type Enforcement rules are usually caused by bugs in the SELinux policy, and should be reported in Red Hat Bugzilla. For Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux, create bugs against the '''Red&nbsp;Hat&nbsp;Enterprise&nbsp;Linux''' product, and select the '''selinux-policy''' component. Include the output of the '''audit2allow -w -a''' and '''audit2allow -a''' commands in such bug reports.
: 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;
# To use the rule displayed by '''audit2allow -a''', enter the following command as root to create a custom module. The '''-M''' option creates a Type Enforcement file ('''.te''') with the name specified with '''-M''', in your current working directory:  
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.
# 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
  sudo audit2allow -a -M mycertwatch
  ******************** IMPORTANT ***********************
  ******************** WICHTIG ********** *************
  To make this policy package active, execute:
  Um dieses Richtlinienpaket zu aktivieren, führen Sie Folgendes aus:


  semodule -i mycertwatch.pp
  semodule -i mycertwatch.pp
# Also, '''audit2allow''' compiles the Type Enforcement rule into a policy package ('''.pp'''):  
# Außerdem kompiliert ‚‘'audit2allow'‚‘ die Type Enforcement-Regel in ein Richtlinienpaket (‚‘'.pp'‚‘):
sudo ls
 
  mycertwatch.pp mycertwatch.te
sudo ls
To install the module, enter the following command as the root:  
  mycertwatch.pp mycertwatch.te
  sudo semodule -i ''mycertwatch.pp''
Um das Modul zu installieren, geben Sie als Root den folgenden Befehl ein:  
  sudo semodule -i 'mycertwatch.pp‘'


; Important
; Wichtig
: Modules created with '''audit2allow''' may allow more access than required. It is recommended that policy created with '''audit2allow''' be posted to the upstream SELinux list for review. If you believe there is a bug in the policy, create a bug in Red Hat Bugzilla.
: 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.


If you have multiple denial messages from multiple processes, but only want to create a custom policy for a single process, use the '''grep''' utility to narrow down the input for '''audit2allow'''. The following example demonstrates using '''grep''' to only send denial messages related to '''certwatch''' through '''audit2allow''':
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
  sudo grep certwatch /var/log/audit/audit.log | audit2allow -R -M mycertwatch2
  ******************** IMPORTANT ***********************
  ******************** WICHTIG ***************** ******
  To make this policy package active, execute:
  Um dieses Richtlinienpaket zu aktivieren, führen Sie Folgendes aus:
   semodule -i mycertwatch2.pp
   semodule -i mycertwatch2.pp


[8] Files in '''/etc/selinux/targeted/contexts/files/''' define contexts for files and directories. Files in this directory are read by the '''restorecon''' and '''setfiles''' utilities to restore files and directories to their default contexts.
[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] The '''semanage port -a''' command adds an entry to the '''/etc/selinux/targeted/modules/active/ports.local''' file. Note that by default, this file can only be viewed by root.
[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] See the ausearch(8) manual page for further information about '''ausearch'''.
[10] Weitere Informationen zu ‚‘'ausearch'‚‘ finden Sie in der Manpage von ausearch(8).


[11] See the aureport(8) manual page for further information about '''aureport'''.
[11] Weitere Informationen zu ‚‘'aureport'‚‘ finden Sie in der Manpage zu aureport(8).


[12] See the sealert(8) manual page for further information about '''sealert'''.
[12] Weitere Informationen zu ‚‘'sealert'‚‘ finden Sie in der Manpage zu sealert(8).


[13] See the audit2allow(1) manual page for more information about '''audit2allow'''.
[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:23 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 z. B. 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 z. B. 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. 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.

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. 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. 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. Zum 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 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'‚‘.

  • ‚‘'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 z. 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.
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).