GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lesen und Korrigieren von SELinux-Ablehnungsmeldungen

Security Enhanced Linux (SELinux) ist ein Sicherheitsframework, das den Zugriff auf Anwendungen, Dateien usw. innerhalb eines Linux-Systems zulässt und verweigert. Eine vollständige Übersicht über SELinux finden Sie unter Was ist SELinux.

In diesem Artikel werden wir untersuchen, was passiert, wenn der Zugriff auf eine gewünschte Datei oder Anwendung verweigert wird. Welche Nachrichten sehen Sie, wo werden diese Nachrichten gespeichert und was bedeuten die Informationen eigentlich? In welchen anormalen Situationen, die durch Fehlalarme und Geisterverleugnungen verursacht werden, könnten Sie sich befinden? All das werden wir hier untersuchen.

Was ist eine Ablehnung?

Eine Leugnung ist das Ereignis, das immer dann generiert wird, wenn einem Dienst, einer Anwendung, einer Datei usw. der Zugriff durch das SELinux-System verweigert wird. In diesem Fall wird die Ablehnung im Access Vector Cache (AVC) zwischengespeichert. Manchmal sehen Sie eine Ablehnungsnachricht, die als AVC-Verweigerung bezeichnet wird .

Wo werden Ablehnungen protokolliert?

Jetzt werden diese AVC-Verweigerungen, ähnlich wie alles andere in Linux, vom System protokolliert. Wo diese Meldungen protokolliert werden, hängt davon ab, welche System-Daemons ausgeführt werden.

  • auditd on - /var/log/audit/audit.log
  • Audit aus; rsyslogd on - /var/log/messages
  • setroubleshootd, rsyslogd und auditd on - Beide Speicherorte, obwohl die Meldungen in /var/log/messages leichter zu verstehen sind

Wie sieht eine Ablehnung aus?

Manchmal wird auf Ihrem Desktop eine Denial-Warnung angezeigt. Wenn Sie Anzeigen auswählen , enthält diese Benachrichtigung Details zu dem Fehler und manchmal sogar eine Lösung zur Lösung des Problems.

Eine andere Sache, die Sie tun können, ist, die folgenden Befehle auszuführen, um die Ablehnungsnachrichten herauszuziehen:

[root@server ~]# grep "SELinux is preventing" /var/log/messages

Hier ist die Ausgabe in einer zugänglicheren Sprache, und wenn Sie sorgfältig lesen, wird eine Lösung präsentiert:

Sep 22 13:35:24 server setroubleshoot[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module. For complete SELinux messages run: sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b
Sep 22 13:35:24 server platform-python[3999]: SELinux is preventing rhsmcertd-worke from read access on the file virt.module.#012#012*****  Plugin catchall_boolean (89.3 confidence) suggests   ******************#012#012If you want to allow daemons to dump core#012Then you must tell SELinux about this by enabling the 'daemons_dump_core' boolean.#012#012Do#012setsebool -P daemons_dump_core 1#012#012*****  Plugin catchall (11.6 confidence) suggests   **************************#012#012If you believe that rhsmcertd-worke should be allowed read access on the virt.module file by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke#012# semodule -X 300 -i my-rhsmcertdworke.pp#012

Diese Ausgabe ist tatsächlich sehr hilfreich, da uns der erste Eintrag oben Folgendes liefert:

For complete SELinux messages run: sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b

Wenn Sie den vorgeschlagenen Befehl ausführen, erhalten Sie eine sehr ausführliche, aber unkomplizierte Zusammenfassung dessen, was passiert ist und was Sie tun können, um das Problem zu beheben. Unten zu sehen:

    [root@server ~]# sealert -l 97a1c0df-81ed-4c08-ba27-41c5067b713b
    SELinux is preventing rhsmcertd-worke from read access on the file virt.module.
    
    *****  Plugin catchall_boolean (89.3 confidence) suggests   ******************
    
    If you want to allow daemons to dump core
    Then you must tell SELinux about this by enabling the 'daemons_dump_core' boolean.
    
    Do
    setsebool -P daemons_dump_core 1
    
    *****  Plugin catchall (11.6 confidence) suggests   **************************
    
    If you believe that rhsmcertd-worke should be allowed read access on the virt.module file by default.
    Then you should report this as a bug.
    You can generate a local policy module to allow this access.
    Do
    allow this access for now by executing:
    # ausearch -c 'rhsmcertd-worke' --raw | audit2allow -M my-rhsmcertdworke
    # semodule -X 300 -i my-rhsmcertdworke.pp
    
    
    Additional Information:
    Source Context                system_u:system_r:rhsmcertd_t:s0
    Target Context                system_u:object_r:root_t:s0
    Target Objects                virt.module [ file ]
    Source                        rhsmcertd-worke
    Source Path                   rhsmcertd-worke
    Port                          <Unknown>
    Host                          server.example.com
    Source RPM Packages           
    Target RPM Packages           
    Policy RPM                    selinux-policy-3.14.3-41.el8_2.5.noarch
    Selinux Enabled               True
    Policy Type                   targeted
    Enforcing Mode                Enforcing
    Host Name                     server.example.com
    Platform                      Linux server.example.com
                                  4.18.0-193.13.2.el8_2.x86_64 #1 SMP Mon Jul 13
                                  23:17:28 UTC 2020 x86_64 x86_64
    Alert Count                   265
    First Seen                    2020-06-24 13:55:40 EDT
    Last Seen                     2020-09-22 13:35:09 EDT
    Local ID                      97a1c0df-81ed-4c08-ba27-41c5067b713b
    
    Raw Audit Messages
    type=AVC msg=audit(1600796109.687:168): avc:  denied  { read } for  pid=3912 comm="rhsmcertd-worke" name="virt.module" dev="dm-0" ino=50331783 scontext=system_u:system_r:rhsmcertd_t:s0 tcontext=system_u:object_r:root_t:s0 tclass=file permissive=0
    
    
    Hash: rhsmcertd-worke,rhsmcertd_t,root_t,file,read

[ Den Lesern hat auch gefallen: Zugriff auf die SELinux-Richtliniendokumentation ]

Sie können auch den folgenden Befehl für die rohen Audit-Meldungen verwenden, obwohl sie deutlich weniger hilfreich sind (und sie sind in sealert enthalten Ausgabe).

[root@server ~]# grep "denied"/var/log/audit/audit.log

Hier ist die Sprache weniger benutzerfreundlich und es gibt keine empfohlenen Schritte.

type=AVC msg=audit(1600796109.687:168): avc:  denied  { read } for  pid=3912 comm="rhsmcertd-worke" name="virt.module" dev="dm-0" ino=50331783 scontext=system_u:system_r:rhsmcertd_t:s0 tcontext=system_u:object_r:root_t:s0 tclass=file permissive=0

Geisterleugnungen

Zu besonderen Anlässen (besondere , wie in ihrer Fähigkeit, Frustration zu erzeugen), kann das SELinux AVC einen Dienst ablehnen, ohne den Benutzer darauf hinzuweisen, dass die Ablehnung aufgetreten ist. Wenn dies passiert, ist ein wenig forensisches Graben erforderlich. Kürzlich hat mein Kollege und außergewöhnlicher Autor Ken Hess ein Dokumentenverwaltungssystem auf einer virtuellen CentOS-Maschine installiert. Während dieser Installation konnte das DMS ohne Erklärung nicht installiert werden. Nach einem langen, frustrierenden Fehlerbehebungsprozess entdeckte Ken, dass es wiederholte Ablehnungsmeldungen in /var/log/audit/audit.log gab .

type=AVC msg=audit(1602171971.334:438): avc: denied { write } for pid=12398 comm="httpd" name="31b32f0dfa1f50d778065b767582bb9b.js" dev="dm-0" ino=553885 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=file permissive=0

Bei weiterer Prüfung von /var/log/messages , fand er Folgendes:

Oct 8 12:33:17 dms python: SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25.#012#012***** Plugin catchall_boolean (32.5 confidence) suggests ******************#012#012If you want to allow httpd to can network connect#012Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean.#012#012Do#012setsebool -P httpd_can_network_connect 1#012#012***** Plugin catchall_boolean (32.5 confidence) suggests ******************#012#012If you want to allow httpd to can sendmail#012Then you must tell SELinux about this by enabling the 'httpd_can_sendmail' boolean.#012#012Do#012setsebool -P httpd_can_sendmail 1#012#012***** Plugin catchall_boolean (32.5 confidence) suggests ******************#012#012If you want to allow nis to enabled#012Then you must tell SELinux about this by enabling the 'nis_enabled' boolean.#012#012Do#012setsebool -P nis_enabled 1#012#012***** Plugin catchall (4.5 confidence) suggests ***************************#012#012If you believe that httpd should be allowed name_connect access on the port 25 tcp_socket by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# ausearch -c 'httpd' --raw | audit2allow -M my-httpd#012# semodule -i my-httpd.pp#012 Oct 8 12:33:20 dms setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25. For complete SELinux messages run: sealert -l ce75fc38-5696-4b21-b099-7780db5960f3

Endlich etwas Nützliches. Dann führte er diesen Befehl aus:

# sealert -l ce75fc38-5696-4b21-b099-7780db5960f3

Wer hat diese Informationen bereitgestellt:

[user@host ~] # SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25. ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can network connect Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean. Do setsebool -P httpd_can_network_connect 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can sendmail Then you must tell SELinux about this by enabling the 'httpd_can_sendmail' boolean. Do setsebool -P httpd_can_sendmail 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow nis to enabled Then you must tell SELinux about this by enabling the 'nis_enabled' boolean. Do setsebool -P nis_enabled 1 ***** Plugin catchall (4.5 confidence) suggests *************************** If you believe that httpd should be allowed name_connect access on the port 25 tcp_socket by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # ausearch -c 'httpd' --raw | audit2allow -M my-httpd # semodule -i my-httpd.pp Additional Information:
    
Additional Information: [root@dms dms]# more sealert.txt SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 25. ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can network connect Then you must tell SELinux about this by enabling the 'httpd_can_network_connect' boolean. Do setsebool -P httpd_can_network_connect 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow httpd to can sendmail Then you must tell SELinux about this by enabling the 'httpd_can_sendmail' boolean. Do setsebool -P httpd_can_sendmail 1 ***** Plugin catchall_boolean (32.5 confidence) suggests ****************** If you want to allow nis to enabled Then you must tell SELinux about this by enabling the 'nis_enabled' boolean. Do setsebool -P nis_enabled 1 ***** Plugin catchall (4.5 confidence) suggests *************************** If you believe that httpd should be allowed name_connect access on the port 25 tcp_socket by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # ausearch -c 'httpd' --raw | audit2allow -M my-httpd # semodule -i my-httpd.pp Additional Information: Source Context system_u:system_r:httpd_t:s0 Target Context system_u:object_r:smtp_port_t:s0 Target Objects port 25 [ tcp_socket ] Source httpd Source Path /usr/sbin/httpd Port 25 Host dms Source RPM Packages Target RPM Packages Policy RPM selinux-policy-3.13.1-252.el7.noarch Selinux Enabled True Policy Type targeted Enforcing Mode Permissive Host Name dms Platform Linux dms 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x86_64 x86_64 Alert Count 2 First Seen 2020-10-08 12:33:15 CDT Last Seen 2020-10-08 12:33:15 CDT Local ID ce75fc38-5696-4b21-b099-7780db5960f3 Raw Audit Messages type=AVC msg=audit(1602178395.253:461): avc: denied { name_connect } for pid=12565 comm="httpd" dest=25 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:smtp_port_t :s0 tclass=tcp_socket permissive=1 Hash: httpd,httpd_t,smtp_port_t,tcp_socket,name_connect

Als ich Ken bat, seine Erfahrungen zu bewerten, hatte er Folgendes zu sagen:

Es ist schwer zu wissen, wann ein Fehler oder das Fehlen eines Fehlers von SELinux verursacht wird. Wenn Sie Firewall-Ausnahmen, Dateisystemberechtigungen und Anwendungsvoraussetzungen überprüft haben, besteht Ihr nächster Schritt darin, SELinux-Kontextprobleme zu überprüfen. Die häufigste Abhilfe besteht darin, SELinux zu deaktivieren, indem Sie es in den Permissive-Modus versetzen, was keine gute Idee ist, da dies Ihr System anfällig macht. Die bessere Methode besteht darin, die Dateien /var/log/messages und /var/log/audit/audit.log auf SELinux-Denials zu überprüfen und von dort aus daran zu arbeiten, die Denials individuell zu beheben, bis Ihre Anwendung funktioniert. SELinux muss dazu im Enforcing-Modus bleiben.

Die Fehlerbehebungsliste sieht beim Einrichten einer neuen Anwendung wie folgt aus:

1. Überprüfen Sie die Firewall-Ausnahmen für die Ports Ihrer Anwendung.

2. Überprüfen Sie die Dateisystemberechtigungen, um sicherzustellen, dass Ihr Dienstkonto über die erforderlichen Lese-, Schreib- und Ausführungsberechtigungen verfügt.

3. Überprüfen Sie die Voraussetzungen und Abhängigkeiten Ihrer Anwendung.

4. Überprüfen Sie die Dateien /var/log/messages und /var/log/audit/audit.log auf SELinux-Denials.

Der SELinux Permissive-Modus kann kurz verwendet werden, um zu überprüfen, ob SELinux die Ursache dafür ist, dass Ihre Anwendung nicht funktioniert. Sobald Sie festgestellt haben, dass es sich um das Problem handelt, kehren Sie in den Erzwingungsmodus zurück und beginnen Sie, relevante Kontexte zu ändern. Siehe diese Informationen für SELinux-Kontexte.

[ Verbessern Sie Ihre Fähigkeiten zur Verwaltung und Verwendung von SELinux mit diesem hilfreichen Leitfaden. ] 

Abschluss

SELinux ist ein effektives Sicherheits-Framework, das bei richtiger Implementierung unglaublich nützlich sein kann. Wie bei jedem guten Sicherheitssystem werden Sie im Laufe der Zeit Ablehnungen haben. Zu wissen, was mit den Ihnen zur Verfügung stehenden Informationen zu tun ist, ist von größter Bedeutung, um eventuell vorhandene Probleme zu lösen oder legitime Prozesse durch das System zuzulassen. Jetzt wissen Sie, wo die Protokolle aufbewahrt werden und wie Sie sie am besten interpretieren. In Zukunft können Sie auf alle SELinux-Warnungen reagieren, die auf Ihrem System angezeigt werden.


Linux
  1. So deaktivieren Sie SELinux vorübergehend oder dauerhaft

  2. Linux-Umgebungsvariablen:Lesen und Festlegen auf einem Linux-VPS

  3. So lesen und schreiben Sie als beliebiger Benutzer auf Windows NTFS-Laufwerken

  4. Gewusst wie:DRBD-Replikation und -Konfiguration

  5. Wie kann man eine Linux-Kernel-Panik lesen, verstehen, analysieren und debuggen?

So installieren und konfigurieren Sie SeedDMS

SELinux Fehlerbehebung und Fallstricke

So lesen Sie die Ausgabe und Verwendung von Linux Top Command

So richten Sie Webmail ein und lesen es

So installieren und konfigurieren Sie Grafana

Journalctl:So lesen und bearbeiten Sie Systemd-Protokolle