Cheat Sheet für SELinux-Systemadministratoren: 42 Antworten auf wichtige Fragen

Eine Übersetzung des Artikels wurde speziell für Studenten des Linux Administrator Kurses erstellt.




Hier erhalten Sie Antworten auf wichtige Fragen zum Leben, dem Universum und all dem, was Sie unter Linux mit erhöhter Sicherheit tun können.

"Die wichtige Wahrheit ist, dass die Dinge nicht immer so sind, wie sie zu sein scheinen ..."

»Douglas Adams, Per Anhalter durch die Galaxis

Sicherheit Zuverlässigkeit verbessern. Compliance. Politik. Vier Reiter der Apokalypse des Sysadmins. Neben unseren täglichen Aufgaben - Überwachen, Sichern, Implementieren, Konfigurieren, Aktualisieren usw. - sind wir auch für die Sicherheit unserer Systeme verantwortlich. Sogar auf Systemen, auf denen ein Drittanbieter empfiehlt, die erweiterte Sicherheit zu deaktivieren. Dies ähnelt der Arbeit von Ethan Hunt von Mission Impossible.

Angesichts dieses Dilemmas entscheiden sich einige Systemadministratoren für die Einnahme der blauen Pille, weil sie glauben, die Antwort auf die große Frage des Lebens, des Universums und all dessen nie zu kennen. Und wie wir alle wissen, ist diese Antwort 42.

Im Sinne des „Per Anhalter durch die Galaxis“ finden Sie hier 42 Antworten auf wichtige Fragen zur Verwaltung und Verwendung von SELinux auf Ihren Systemen.

1. SELinux ist ein System zur erzwungenen Zugriffskontrolle, dh jeder Prozess ist mit einem Label versehen. Jede Datei, jedes Verzeichnis und jedes Systemobjekt verfügt auch über Tags. Richtlinienregeln steuern den Zugriff zwischen gekennzeichneten Prozessen und Objekten. Der Kernel setzt diese Regeln durch.

2. Die beiden wichtigsten Konzepte sind: Beschriftung - Beschriftung (Dateien, Prozesse, Ports usw.) und Typenerzwingung (die Prozesse basierend auf Typen voneinander isoliert).

3. Das richtige Etikettenformat lautet user:role:type:level (optional).

4. Ziel der Bereitstellung von Multi-Level-Sicherheit (MLS ) ist die Verwaltung von Prozessen (Domänen) auf der Grundlage des Sicherheitsniveaus der von ihnen verwendeten Daten. Beispielsweise kann ein geheimer Prozess keine streng geheimen Daten lesen.

5. Durch Sicherstellen der Multi-Category-Sicherheit (MCS ) werden ähnliche Prozesse voneinander geschützt (z. B. virtuelle Maschinen, OpenShift-Mechanismen, SELinux-Sandboxen, Container usw.).

6. Kernel-Parameter zum Ändern der SELinux-Modi beim Booten:

  • autorelabel=1 zwingt das System, die Markierung neu zu starten
  • selinux=0 Kernel lädt die SELinux-Infrastruktur nicht
  • enforcing=0 Laden im zulässigen Modus

7. Wenn Sie das gesamte System neu markieren müssen:

# touch /.autorelabel
#reboot


Wenn die Systemkennzeichnung eine große Anzahl von Fehlern enthält, müssen Sie möglicherweise im zulässigen Modus starten, damit die Kennzeichnung erfolgreich ist.

8. So überprüfen Sie, ob SELinux aktiviert ist: # getenforce

9. So aktivieren / deaktivieren Sie SELinux vorübergehend: # setenforce [1|0]

10. Überprüfen des SELinux-Status: # sestatus

11. Konfigurationsdatei: /etc/selinux/config

12. Wie funktioniert SELinux? Hier ein Beispiel für die Beschriftung des Apache-Webservers:

  • /usr/sbin/httpd→httpd_exec_t : /usr/sbin/httpd→httpd_exec_t
  • Konfigurationsverzeichnis: /etc/httpd→httpd_config_t
  • Protokolldateiverzeichnis: /var/log/httpd → httpd_log_t
  • Inhaltsverzeichnis: /var/www/html → httpd_sys_content_t
  • Starten Sie das Skript: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Prozess: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Ports: 80/tcp, 443/tcp → httpd_t, http_port_t

Ein Prozess, der im Kontext von httpd_t kann mit einem Objekt mit der Bezeichnung httpd_something_t .

13. Viele Befehle akzeptieren das Argument -Z , um den Kontext anzuzeigen, zu erstellen und zu ändern:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Kontexte werden festgelegt, wenn Dateien basierend auf dem Kontext ihres übergeordneten Verzeichnisses erstellt werden (mit einigen Ausnahmen). RPMs können Kontexte wie während der Installation festlegen.

14. Es gibt vier Hauptursachen für SELinux-Fehler, die in den folgenden Absätzen 15-21 ausführlicher beschrieben werden:

  • Beschriftungsprobleme
  • Wegen etwas, das SELinux wissen muss
  • Fehler in der SELinux-Richtlinie / -Anwendung
  • Ihre Daten könnten kompromittiert sein.

15. Problem beim Markieren : Wenn Ihre Dateien in /srv/myweb falsch markiert sind, kann der Zugriff verweigert werden. Hier sind einige Möglichkeiten, dies zu beheben:

  • Wenn Sie das Etikett kennen:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Wenn Sie eine Datei mit entsprechenden Markierungen kennen:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Den Kontext wiederhergestellt haben (für beide Fälle):
    # restorecon -vR /srv/myweb

16. Das Problem beim Markieren: Wenn Sie die Datei verschieben, anstatt sie zu kopieren, behält die Datei ihren ursprünglichen Kontext bei. So beheben Sie dieses Problem:

  • Ändern Sie den Kontextbefehl mit der Bezeichnung:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ändern Sie den Kontextbefehl mit der Verknüpfungsbezeichnung:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • # restorecon -vR /var/www/html/ den Kontext wieder her (in beiden Fällen): # restorecon -vR /var/www/html/

17. Wenn SELinux wissen muss, dass HTTPD Port 8585 überwacht, teilen Sie SELinux Folgendes mit:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux muss die booleschen Werte kennen, mit denen Sie Teile der SELinux-Richtlinie zur Laufzeit ändern können, ohne die SELinux-Richtlinien neu schreiben zu müssen. Wenn Sie beispielsweise möchten, dass httpd eine E-Mail sendet, geben # setsebool -P httpd_can_sendmail 1 ein: # setsebool -P httpd_can_sendmail 1

19. SELinux muss die logischen Werte kennen, um SELinux-Einstellungen zu aktivieren / deaktivieren:

  • So zeigen Sie alle booleschen Werte an: # getsebool -a
  • So zeigen Sie eine Beschreibung der einzelnen # semanage boolean -l : # semanage boolean -l
  • So legen Sie einen booleschen Wert fest: # setsebool [_boolean_] [1|0]
  • -P für eine dauerhafte Installation -P . Zum Beispiel: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux-Richtlinien / -Anwendungen können Fehler enthalten, einschließlich:

  • Ausgefallene Code-Pfade
  • Konfigurationen
  • Stdout umleiten
  • Dateideskriptor leckt
  • Ausführbarer Speicher
  • Schlecht gebaute Bibliotheken

Offene Tickets (senden Sie keinen Bericht an Bugzilla; es gibt keine SLA in Bugzilla).

21. Ihre Informationen können kompromittiert werden, wenn Sie über eingeschränkte Domains verfügen, die versuchen:

  • Laden Sie die Kernel-Module herunter
  • Deaktivieren Sie den erzwungenen SELinux-Modus
  • Schreiben Sie in etc_t/shadow_t
  • Iptables-Regeln ändern

22. SELinux-Tools zum Entwickeln von Richtlinienmodulen:

# yum -y install setroubleshoot setroubleshoot-server

auditd nach der Installation neu oder starten auditd neu.

23. Verwenden
 journalctl 
So listen Sie alle mit der setroubleshoot verbundenen setroubleshoot :

# journalctl -t setroubleshoot --since=14:20

24. Verwenden Sie journalctl um alle Protokolle journalctl , die einem bestimmten SELinux-Label zugeordnet sind. Zum Beispiel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Wenn ein SELinux-Fehler auftritt, verwenden Sie das setroubleshoot mit einigen möglichen Lösungen.
Zum Beispiel aus journalctl :

 Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e # sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. ***** Plugin restorecon (99.5 confidence) suggests ************************ If you want to fix the label, /var/www/html/index.html default label should be httpd_syscontent_t. Then you can restorecon. Do # /sbin/restorecon -v /var/www/html/index.html 


26. Protokollierung: SELinux zeichnet Informationen an vielen Stellen auf:

  • / var / log / messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. Protokollierung: Suche nach SELinux-Fehlern im Überwachungsprotokoll:

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

28. So suchen Sie nach SELinux Access Vector Cache (AVC) -Nachrichten für einen bestimmten Dienst:

# ausearch -m avc -c httpd

29. Das Dienstprogramm audit2allow erfasst Informationen aus Protokollen verbotener Vorgänge und generiert dann SELinux-Berechtigungsrichtlinienregeln. Zum Beispiel:

  • So erstellen Sie eine lesbare Beschreibung des Grundes für die Zugriffsverweigerung: # audit2allow -w -a
  • So zeigen Sie eine Durchsetzungsregel an, die den Zugriff verweigert: # audit2allow -a
  • So erstellen Sie ein benutzerdefiniertes Modul: # audit2allow -a -M mypolicy
  • Die Option -M erstellt eine Typ-Durchsetzungsdatei (.te) mit dem angegebenen Namen und kompiliert die Regel in ein Richtlinienpaket (.pp): mypolicy.pp mypolicy.te
  • So installieren Sie ein benutzerdefiniertes Modul: # semodule -i mypolicy.pp

30. So konfigurieren Sie einen separaten Prozess (Domäne) für die Verwendung im zulässigen Modus: # semanage permissive -a httpd_t

31. Wenn die Domain nicht länger zulässig sein soll: # semanage permissive -d httpd_t

32. So deaktivieren Sie alle zulässigen Domänen: # semodule -d permissivedomains

33. Aktivieren der MLS SELinux-Richtlinie: # yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls
# yum install selinux-policy-mls
/etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls


# setenforce 0 Sie sicher, dass sich SELinux im zulässigen Modus befindet: # setenforce 0
Verwenden Sie das Skript fixfiles um sicherzustellen, dass die Dateien beim nächsten Neustart erneut markiert werden:

# fixfiles -F onboot # reboot

34. Erstellen Sie einen Benutzer mit einem bestimmten MLS-Bereich: # useradd -Z staff_u john

useradd den neuen Benutzer mit dem Befehl useradd dem vorhandenen SELinux-Benutzer zu (in diesem Fall staff_u ).

35. So zeigen Sie die Korrespondenz zwischen SELinux- und Linux-Benutzern an: # semanage login -l

36. Definieren Sie einen bestimmten Bereich für den Benutzer: # semanage login --modify --range s2:c100 john

37. So korrigieren Sie die Beschriftung im # chcon -R -l s2:c100 /home/john des Benutzers (falls erforderlich): # chcon -R -l s2:c100 /home/john

38. So zeigen Sie die aktuellen Kategorien an: # chcat -L

39. Um Kategorien zu ändern oder eigene zu erstellen, bearbeiten Sie die Datei wie folgt:

/etc/selinux/_< selinuxtype > _/setrans.conf

40. So führen Sie einen Befehl oder ein Skript in einer bestimmten Datei, einer bestimmten Rolle und einem bestimmten Benutzerkontext aus:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t Dateikontext
  • -r Rollenkontext
  • -u Benutzerkontext

41. Container, die mit deaktiviertem SELinux arbeiten:

  • Podman: # podman run --security-opt label=disable …
  • Docker: # docker run --security-opt label=disable …

42. Wenn Sie dem Container vollen Zugriff auf das System gewähren müssen:

  • Podman: # podman run --privileged …
  • Docker: # docker run --privileged …

Und jetzt wissen Sie bereits die Antwort. Deshalb bitte: Keine Panik und SELinux einschalten.

Referenzen:


Source: https://habr.com/ru/post/de484896/


All Articles