Spickzettel für Sysadmins zu SELinux: 42 Antworten auf wichtige Fragen

Die Übersetzung des Artikels wurde speziell für die Studierenden des Kurses erstellt. „Linux-Administrator“.

Spickzettel für Sysadmins zu SELinux: 42 Antworten auf wichtige Fragen

Hier erhalten Sie Antworten auf wichtige Fragen zum Leben, zum Universum und allem, was mit Linux zu tun hat, mit verbesserter Sicherheit.

„Eine wichtige Wahrheit, dass die Dinge nicht immer so sind, wie sie scheinen, ist allgemein bekannt…“

―Douglas Adams, Per Anhalter durch die Galaxis

Sicherheit. Erhöhung der Zuverlässigkeit. Compliance. Richtlinien. Die vier Reiter der Apokalypse für Systemadministratoren. Neben unseren täglichen Aufgaben – wie Monitoring, Backup, Implementierung, Konfiguration, Aktualisierung usw. – sind wir auch für die Sicherheit unserer Systeme verantwortlich. Selbst für die Systeme, bei denen ein Drittanbieter uns empfiehlt, die verstärkte Sicherheit abzuschalten. Das ist ähnlich der Arbeit von Ethan Hunt in „Mission: Impossible“.

Angesichts dieses Dilemmas entscheiden sich manche Systemadministratoren dafür, die blaue Pillezu nehmen, weil sie denken, dass sie niemals die Antwort auf die große Frage des Lebens, des Universums und allem dazwischen erfahren werden. Und, wie wir alle wissen, ist die Antwort 42.

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

1. SELinux ist ein System zur durchsetzenden Zugriffskontrolle, was bedeutet, dass jeder Prozess ein Label hat. Auch jede Datei, jedes Verzeichnis und jedes Systemobjekt verfügt über Labels. Die Richtlinienregeln steuern den Zugriff zwischen markierten Prozessen und Objekten. Der Kernel sorgt dafür, dass diese Regeln eingehalten werden.

2. Die beiden wichtigsten Konzepte sind: Labeling – Labeling (Dateien, Prozesse, Ports usw.) und Type enforcement (das Prozesse basierend auf Typen voneinander isoliert).

3. Das richtige Label-Format user:role:type:level (optional).

4. Das Ziel der Gewährleistung der mehrstufigen Sicherheit (Multi-Level Security – MLS) ist die Verwaltung von Prozessen (Domänen) basierend auf dem Sicherheitslevel der Daten, die sie verwenden werden. Zum Beispiel kann ein geheimer Prozess keine vertraulichen Daten lesen.

5. Die Gewährleistung der multikategorischen Sicherheit (Multi-Category Security – MCS) schützt ähnliche Prozesse voneinander (zum Beispiel virtuelle Maschinen, OpenShift-Mechanismen, SELinux-Sandboxen, Container usw.).

6. Kernel-Parameter zur Änderung der SELinux-Modi beim Booten:

  • autorelabel=1 → zwingt das System, die Neulabelisierung durchzuführen
  • selinux=0 → Der Kernel lädt die SELinux-Infrastruktur nicht
  • enforcing=0 → Start im permissiven Modus

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

# touch /.autorelabel
#reboot

Wenn die systemweite Kennzeichnung viele Fehler enthält, kann es erforderlich sein, im permissiven Modus zu starten, damit die Neulabelung erfolgreich ist.

8. Um zu überprüfen, ob SELinux aktiviert ist: # getenforce

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

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

11. Konfigurationsdatei: /etc/selinux/config

12. Wie funktioniert SELinux? Hier ist ein Beispiel für die Kennzeichnung eines Apache-Webservers:

  • Binäre Darstellung: /usr/sbin/httpd→httpd_exec_t
  • Konfigurationsverzeichnis: /etc/httpd→httpd_config_t
  • Verzeichnis der Protokolldateien: /var/log/httpd → httpd_log_t
  • Inhaltsverzeichnis: /var/www/html → httpd_sys_content_t
  • Startskript: /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 httpd_t, läuft, kann mit einem Objekt mit dem Label 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

Die Kontexte werden gesetzt, wenn Dateien basierend auf dem Kontext ihres übergeordneten Verzeichnisses erstellt werden (mit einigen Ausnahmen). RPM kann Kontexte sowohl während der Installation setzen.

14. Es gibt vier Hauptursachen für SELinux-Fehler, die in den Punkten 15-21 unten näher beschrieben werden:

  • Labeling-Probleme
  • Warum SELinux Bescheid wissen muss
  • Fehler in der SELinux-Politik/Anwendung
  • Ihre Informationen könnten gefährdet sein

15. Problem mit dem Labeling: wenn Ihre Dateien in /srv/myweb falsch gelabelt sind, kann der Zugriff verweigert werden. Hier sind einige Möglichkeiten, dies zu beheben:

  • Wenn Sie das Label kennen:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Wenn Sie die Datei mit dem entsprechenden Label kennen:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Den Kontext wiederherstellen (in beiden Fällen):
    # restorecon -vR /srv/myweb

16. Problem mit dem Labeling: Wenn Sie die Datei verschieben, anstatt sie zu kopieren, behält die Datei ihren ursprünglichen Kontext. Um dieses Problem zu beheben:

  • Ändern Sie den Kontext mit dem Label:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ändern Sie den Kontext mit Link-Label:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Stellen Sie den Kontext wieder her (in beiden Fällen): # restorecon -vR /var/www/html/

17. Wenn SELinux muss wissen, dass HTTPD Port 8585 hört, informieren Sie SELinux:

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

18. SELinux muss wissen Logische Werte, die es ermöglichen, Teile der SELinux-Politik zur Laufzeit zu ändern, ohne Kenntnisse über die Neuinstallation der SELinux-Politik. Beispielsweise, wenn Sie möchten, dass httpd E-Mails sendet, geben Sie ein: # setsebool -P httpd_can_sendmail 1

19. SELinux muss wissen Logische Werte zum Aktivieren/Deaktivieren von SELinux-Einstellungen:

  • Um alle logischen Werte anzuzeigen: # getsebool -a
  • Um die Beschreibung jedes Wertes anzuzeigen: # semanage boolean -l
  • Um einen logischen Wert festzulegen: # setsebool [_boolean_] [1|0]
  • Fügen Sie für eine ständige Installation hinzu -Pverwendet. Zum Beispiel: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux-Richtlinien/Anwendungen können Fehler enthalten, darunter:

  • Ungewöhnliche Codepfade
  • Konfigurationen
  • stdout umleiten
  • Dateideskriptor-Lecks
  • Ausführbarer Speicher
  • Schlecht konstruierte Bibliotheken

Öffnen Sie Tickets (bitte melden Sie keinen Bericht in Bugzilla; in Bugzilla gibt es kein SLA).

21. Ihre Informationen könnten gefährdet sein, wenn Sie eingeschränkte Domains haben, die versuchen:

  • Kernel-Module zu laden
  • den enforced Modus von SELinux zu deaktivieren
  • in etc_t/shadow_t
  • iptables-Regeln zu ändern

22. SELinux-Tools zur Entwicklung von Richtlinienmodulen:

# yum -y install setroubleshoot setroubleshoot-server

Neustart oder Restart auditd nach der Installation.

23. Nutzen Sie

journalctl

um eine Liste aller Protokolle anzuzeigen, die mit setroubleshoot:

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

24. Nutzen Sie journalctl um eine Liste aller Protokolle anzuzeigen, die mit einem bestimmten SELinux-Label verbunden sind. Zum Beispiel:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Bei einem SELinux-Fehler verwenden Sie das Protokoll setroubleshoot mit Vorschlägen zu möglichen Lösungen.
Beispielsweise aus journalctl:

14. Jun 19:41:07 web1 setroubleshoot: SELinux verhindert, dass httpd auf die Datei /var/www/html/index.html zugreift. Für die komplette Nachricht führen Sie aus: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux verhindert, dass httpd auf die Datei /var/www/html/index.html zugreift.

***** Plugin restorecon (99,5 % Vertrauen) schlägt vor ************************

Wenn Sie das Label korrigieren möchten,
sollte das Standardlabel von /var/www/html/index.html httpd_syscontent_t sein.
Dann können Sie restorecon ausführen.
Tun Sie
# /sbin/restorecon -v /var/www/html/index.html

26. Protokollierung: SELinux protokolliert Informationen an vielen Orten:

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

27. Protokollierung: Fehler im SELinux-Audit-Log suchen:

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

28. Um SELinux Access Vector Cache (AVC)-Meldungen für einen bestimmten Dienst zu finden:

# ausearch -m avc -c httpd

29. Dienstprogramm audit2allow sammelt Informationen aus Protokollen verbotener Operationen und generiert dann SELinux-Berechtigungsrichtlinien. Zum Beispiel:

  • Um eine lesbare Beschreibung des Grundes für den Zugriffsverweigerung zu erstellen: # audit2allow -w -a
  • Um die Regel zur erzwungenen Verwendung von Typen anzuzeigen, die den verbotenen Zugriff erlaubt: # audit2allow -a
  • Um ein benutzerdefiniertes Modul zu erstellen: # audit2allow -a -M mypolicy
  • Option -M erstellt eine Datei zur erzwungenen Anwendung des Typs (.te) mit dem angegebenen Namen und kompiliert die Regel in ein Richtlinienpaket (.pp): mypolicy.pp mypolicy.te
  • Um das benutzerdefinierte Modul zu installieren: # semodule -i mypolicy.pp

30. Um einen einzelnen Prozess (Bereich) für den Betrieb im permissiven Modus zu konfigurieren: # semanage permissive -a httpd_t

31. Wenn Sie nicht mehr möchten, dass der Bereich permissiv ist: # semanage permissive -d httpd_t

32. Um alle permissiven Bereiche zu deaktivieren: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Stellen Sie sicher, dass SELinux im permissiven Modus läuft: # setenforce 0
Verwenden Sie das Skript fixfiles, um sicherzustellen, dass Dateien beim nächsten Neustart ummarkiert werden:

# fixfiles -F onboot # reboot

34. Ein Benutzer mit einem bestimmten MLS-Bereich erstellen: # useradd -Z staff_u john

Verwenden Sie den Befehl useradd, ordnen Sie einen neuen Benutzer einem vorhandenen SELinux-Benutzer zu (in diesem Fall, staff_u).

35. Um die Übereinstimmung zwischen SELinux- und Linux-Benutzern anzuzeigen: # semanage login -l

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

37. Um das Label im Home-Verzeichnis des Benutzers zu korrigieren (falls nötig): # chcon -R -l s2:c100 /home/john

38. Um die aktuellen Kategorien anzuzeigen: # chcat -L

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

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

40. Um einen Befehl oder ein Skript in einer bestimmten Datei, Rolle und Benutzerkontext auszuführen:

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

  • -t Dateikontext
  • -r Rollen-Kontext
  • -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 Zugang zum System gewähren müssen:

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

Und jetzt wissen Sie bereits die Antwort. Bitte: Keine Panik, und schalten Sie SELinux ein.

Links:

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster