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

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

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

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

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

-Douglas Adams, Per Anhalter durch die Galaxis

Sicherheit. Erhöhte Zuverlässigkeit. Korrespondenz. Politik. Vier Reiter der Apokalypse Systemadministrator. Neben unseren täglichen Aufgaben – Überwachung, Backup, Implementierung, Konfiguration, Aktualisierung etc. – sind wir auch für die Sicherheit unserer Systeme verantwortlich. Sogar die Systeme, bei denen der Drittanbieter empfiehlt, die erweiterte Sicherheit zu deaktivieren. Es fühlt sich an wie Arbeit Ethan Hunt aus „Mission: Impossible“.

Angesichts dieses Dilemmas entscheiden sich einige Systemadministratoren dafür blaue Pille, weil sie denken, dass sie nie die Antwort auf die große Frage nach dem Leben, dem Universum und all dem erfahren werden. Und wie wir alle wissen, lautet die Antwort 42.

Ganz im Sinne von „Per Anhalter durch die Galaxis“ finden Sie hier 42 Antworten auf wichtige Fragen zur Kontrolle und Nutzung. SELinux auf Ihren Systemen.

1. SELinux ist ein erzwungenes Zugriffskontrollsystem, was bedeutet, dass jeder Prozess eine Bezeichnung hat. Jede Datei, jedes Verzeichnis und jedes Systemobjekt verfügt außerdem über Beschriftungen. Richtlinienregeln steuern den Zugriff zwischen markierten Prozessen und Objekten. Der Kernel erzwingt diese Regeln.

2. Die beiden wichtigsten Konzepte sind: Beschriftung — Markierungen (Dateien, Prozesse, Ports usw.) und Geben Sie Erzwingung ein (wodurch Prozesse basierend auf Typen voneinander isoliert werden).

3. Richtiges Etikettenformat user:role:type:level (Optional).

4. Der Zweck der Bereitstellung mehrstufiger Sicherheit (Mehrstufige Sicherheit – MLS) besteht darin, Prozesse (Domänen) auf der Grundlage des Sicherheitsniveaus der von ihnen verwendeten Daten zu verwalten. Beispielsweise kann ein geheimer Prozess keine streng geheimen Daten lesen.

5. Gewährleistung der Sicherheit mehrerer Kategorien (Sicherheit in mehreren Kategorien – MCS) schützt ähnliche Prozesse voreinander (z. B. virtuelle Maschinen, OpenShift-Engines, SELinux-Sandboxes, Container usw.).

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

  • autorelabel=1 → bewirkt, dass das System eine Neuetikettierung durchführt
  • selinux=0 → Der Kernel lädt die SELinux-Infrastruktur nicht
  • enforcing=0 → Laden im permissiven Modus

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

# touch /.autorelabel
#reboot

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

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

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

10 SELinux-Status prüfen: # sestatus

11 Konfigurationsdatei: /etc/selinux/config

12 Wie funktioniert SELinux? Hier ist eine Beispielmarkierung für den Apache-Webserver:

  • Binäre Darstellung: /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
  • Skript starten: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Prozess: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Häfen: 80/tcp, 443/tcp → httpd_t, http_port_t

Prozess läuft im Kontext httpd_t, kann mit einem beschrifteten Objekt interagieren httpd_something_t.

13 Viele Befehle akzeptieren ein Argument -Z Kontext anzeigen, erstellen und ändern:

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

Kontexte werden erstellt, wenn Dateien basierend auf dem Kontext ihres übergeordneten Verzeichnisses erstellt werden (mit einigen Ausnahmen). RPMs können wie bei der Installation Kontexte herstellen.

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

  • Probleme mit der Kennzeichnung
  • Wegen etwas, das SELinux wissen muss
  • Fehler in der SELinux-Richtlinie/Anwendung
  • Ihre Daten könnten gefährdet sein

15 Etikettierungsproblem: wenn Ihre Dateien vorhanden sind /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
  • Wiederherstellen des Kontexts (für beide Fälle):
    # restorecon -vR /srv/myweb

16 Etikettierungsproblem: 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 Kontextbefehl mit der Bezeichnung:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ändern Sie den Kontextbefehl mit der Linkbezeichnung:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Stellen Sie den Kontext wieder her (für beide Fälle): # restorecon -vR /var/www/html/

17 wenn SELinux müssen Sie kennendass HTTPD Port 8585 überwacht, teilen Sie SELinux mit:

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

18 SELinux müssen Sie kennen Boolesche Werte, die es ermöglichen, Teile der SELinux-Richtlinie zur Laufzeit zu ändern, ohne dass die SELinux-Richtlinie überschrieben wird. Wenn Sie beispielsweise möchten, dass httpd E-Mails sendet, geben Sie Folgendes ein: # setsebool -P httpd_can_sendmail 1

19 SELinux müssen Sie kennen logische Werte zum Aktivieren/Deaktivieren von SELinux-Einstellungen:

  • So sehen Sie alle booleschen Werte: # getsebool -a
  • Um jeweils eine Beschreibung anzuzeigen: # semanage boolean -l
  • So legen Sie einen booleschen Wert fest: # setsebool [_boolean_] [1|0]
  • Für eine dauerhafte Installation fügen Sie hinzu -P. Zum Beispiel: # setsebool httpd_enable_ftp_server 1 -P

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

  • Ungewöhnliche Codepfade
  • Konfigurationen
  • Standardausgabe umleiten
  • Dateideskriptorlecks
  • Ausführbarer Speicher
  • Schlecht gebaute Bibliotheken

Offene Tickets (reichen Sie keinen Bericht an Bugzilla ein; Bugzilla hat kein SLA).

21 Ihre Daten könnten gefährdet seinWenn Sie eingeschränkte Domänen haben, versuchen Sie Folgendes:

  • Laden Sie Kernelmodule
  • Deaktivieren Sie den erzwungenen SELinux-Modus
  • Schreiben Sie an etc_t/shadow_t
  • Ändern Sie die Iptables-Regeln

22 SELinux-Tools zur Entwicklung von Richtlinienmodulen:

# yum -y install setroubleshoot setroubleshoot-server

Neustart oder Neustart auditd nach der Installation.

23 Verwenden

journalctl

, um eine Liste aller zugehörigen Protokolle anzuzeigen setroubleshoot:

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

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

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25 Wenn ein SELinux-Fehler auftritt, verwenden Sie das Protokoll setroubleshoot mehrere Lösungsmöglichkeiten anbieten.
Zum Beispiel von 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 / Nachrichten
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27 Protokollierung: Suche nach SELinux-Fehlern im Audit-Protokoll:

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

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

# ausearch -m avc -c httpd

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

  • So erstellen Sie eine für Menschen lesbare Beschreibung, warum der Zugriff verweigert wird: # audit2allow -w -a
  • So zeigen Sie eine Typerzwingungsregel an, die den verweigerten Zugriff zulässt: # audit2allow -a
  • So erstellen Sie ein benutzerdefiniertes Modul: # audit2allow -a -M mypolicy
  • Option -M erstellt eine Typdurchsetzungsdatei (.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 Arbeit im permissiven Modus: # semanage permissive -a httpd_t

31 Wenn Sie nicht mehr möchten, dass die Domain freizügig ist: # semanage permissive -d httpd_t

32 So deaktivieren Sie alle permissiven Domänen: # semodule -d permissivedomains

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

SELINUX=permissive
SELINUXTYPE=mls

Stellen Sie sicher, dass SELinux im permissiven Modus ausgeführt wird: # setenforce 0
Verwenden Sie ein Skript fixfilesum sicherzustellen, dass die Dateien beim nächsten Neustart neu gekennzeichnet werden:

# fixfiles -F onboot # reboot

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

Verwenden des Befehls useraddOrdnen Sie den neuen Benutzer einem vorhandenen SELinux-Benutzer zu (in diesem Fall staff_u).

35 So zeigen Sie die Zuordnung 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 Bezeichnung des Home-Verzeichnisses des Benutzers (falls erforderlich): # chcon -R -l s2:c100 /home/john

38 So zeigen Sie aktuelle Kategorien an: # chcat -L

39 Um Kategorien zu ändern oder mit der Erstellung eigener Kategorien zu beginnen, 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, 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 ausgeführt werden:

  • 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. Also bitte: geraten Sie nicht in Panik und aktivieren Sie SELinux.

Links:

Source: habr.com

Kommentar hinzufügen