Die Ăbersetzung des Artikels wurde speziell fĂŒr die Studierenden des Kurses erstellt .

Hier erhalten Sie Antworten auf wichtige Fragen ĂŒber das Leben, das Universum und alles andere in Linux mit verbesserter Sicherheit.
âEine wichtige Wahrheit ist, dass die Dinge nicht immer das sind, was 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 â Ăberwachung, Backup, Implementierung, Konfiguration, Aktualisierung usw. â sind wir auch fĂŒr die Sicherheit unserer Systeme verantwortlich. Sogar fĂŒr Systeme, bei denen ein externer Anbieter empfiehlt, die verstĂ€rkte Sicherheit zu deaktivieren. Es Ă€hnelt der Arbeit aus âMission: Impossibleâ.
Angesichts dieses Dilemmas entscheiden sich einige Systemadministratoren fĂŒr die , weil sie denken, dass sie die Antwort auf die groĂe Frage des Lebens, des Universums und allem niemals erfahren werden. Und, wie wir alle wissen, lautet diese Antwort 42.
Im Geiste von âPer Anhalter durch die Galaxisâ sind hier 42 Antworten auf wichtige Fragen zum Management und zur Nutzung in Ihren Systemen.
1. SELinux ist ein System zur erzwungenen Zugriffskontrolle, was bedeutet, dass jeder Prozess ein Label (label) hat. Jede Datei, jedes Verzeichnis und jedes Systemobjekt hat ebenfalls 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 Typenzwang (der Prozesse aufgrund von Typen voneinander isoliert).
3. Das richtige Label-Format user:role:type:level (optional).
4. Das Ziel der Bereitstellung von Mehrschichtigkeits-Sicherheit (Multi-Level Security â MLS) besteht darin, Prozesse (DomĂ€nen) basierend auf dem Sicherheitslevel der Daten, die sie verwenden werden, zu verwalten. Beispielsweise kann ein geheimer Prozess keine streng geheimen Daten lesen.
5. Die GewĂ€hrleistung von Mehrkategorischer Sicherheit (Multi-Category Security â MCS) schĂŒtzt Ă€hnliche Prozesse voreinander (z. B. virtuelle Maschinen, OpenShift-Mechanismen, SELinux-Sandboxen, Container usw.).
6. Kernel-Parameter zur Ănderung der SELinux-Modi beim Booten:
autorelabel=1â zwingt das System, die Neuauszeichnung durchzufĂŒhrenselinux=0â das Kernel lĂ€dt keine SELinux-Infrastrukturenforcing=0â startet im permissiven Modus
7. Wenn Sie das gesamte System neu kennzeichnen mĂŒssen:
# touch /.autorelabel
#reboot
Wenn die systemweite Kennzeichnung zahlreiche Fehler enthĂ€lt, mĂŒssen Sie möglicherweise im permissiven Modus starten, damit die Neubezeichnung 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ĂŒfung des SELinux-Status: # sestatus
11. Konfigurationsdatei: /etc/selinux/config
12. Wie funktioniert SELinux? Hier ist ein Beispiel fĂŒr die Kennzeichnung eines Webservers Apache:
- 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. interagieren. Viele Befehle akzeptieren das Argument -Z um den Kontext anzuzeigen, zu erstellen und zu Àndern:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
Kontexte werden gesetzt, wenn Dateien unter BerĂŒcksichtigung des Kontexts ihres ĂŒbergeordneten Verzeichnisses erstellt werden (mit einigen Ausnahmen). RPM kann Kontexte sowohl wĂ€hrend der Installation setzen.
14. Es gibt vier HauptgrĂŒnde fĂŒr SELinux-Fehler, die in den Punkten 15-21 unten ausfĂŒhrlicher beschrieben sind:
- Kennzeichnungsprobleme
- Wegen etwas, das SELinux wissen sollte
- Fehler in der SELinux-Richtlinie/Anwendung
- Ihre Informationen könnten gefÀhrdet sein
15. Kennzeichnungsproblem: Wenn Ihre Dateien in /srv/myweb falsch gekennzeichnet 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 - Stellen Sie den Kontext wieder her (in beiden FĂ€llen):
# restorecon -vR /srv/myweb
16. Kennzeichnungsproblem: 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 dem Label:
# chcon -t httpd_system_content_t /var/www/html/index.html - Ăndern Sie den Kontextbefehl mit dem Verweis-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 den Port 8585 abhö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-Richtlinie zur Laufzeit ohne Kenntnisse ĂŒber das Ăberschreiben der SELinux-Richtlinie zu Ă€ndern. 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ĂŒr eine dauerhafte Einstellung fĂŒgen Sie hinzu
-P. Zum Beispiel:# setsebool httpd_enable_ftp_server 1 -P
20. Politiken/App SELinux können Fehler enthalten, darunter:
- Ungewöhnliche Code-Pfade
- Konfigurationen
- Umleitung von stdout
- Dateideskriptor-Lecks
- AusfĂŒhrbarer Speicher
- Schlecht gestaltete Bibliotheken
Erstellen Sie Tickets (senden Sie keinen Bericht an Bugzilla; in Bugzilla gibt es kein SLA).
21. Ihre Informationen könnten gefÀhrdet sein, wenn Sie eingeschrÀnkte Domains haben, die versuchen:
- Kernmodule zu laden
- Den enforced Modus von SELinux zu deaktivieren
- In
etc_t/shadow_t - iptables-Regeln zu Àndern
22. SELinux-Tools zur Entwicklung von Politikmodulen:
# yum -y install setroubleshoot setroubleshoot-server
Starten Sie neu oder starten Sie auditd nach der Installation.
23. Verwenden Sie
journalctl zum Ausgeben einer Liste aller Protokolle, die mit setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Verwenden Sie journalctl zum Ausgeben einer Liste aller Protokolle, 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 dem Vorschlag mehrerer möglicher Lösungen.
Zum Beispiel aus journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux verhindert, dass httpd auf die Datei /var/www/html/index.html zugreift. FĂŒr vollstĂ€ndige Nachrichten 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 reparieren möchten,
Das Standardlabel von /var/www/html/index.html sollte httpd_syscontent_t sein.
Dann können Sie restorecon ausfĂŒhren.
Tun Sie
# /sbin/restorecon -v /var/www/html/index.html26. Protokollierung: SELinux speichert Informationen an vielen Orten:
- /var/log/messages
- /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. Um SELinux Access Vector Cache (AVC) Nachrichten fĂŒr einen bestimmten Dienst zu finden:
# ausearch -m avc -c httpd
29. Das Tool audit2allow sammelt Informationen aus Protokollen ĂŒber verbotene Operationen und generiert dann SELinux-Berechtigungsregeln. Zum Beispiel:
- Um eine lesbare Beschreibung des Zugriffsverweigerungsgrundes zu erstellen:
# audit2allow -w -a - Um die Regel zur Durchsetzung von Typen, die den verbotenen Zugriff erlauben, anzuzeigen:
# audit2allow -a - Um ein benutzerdefiniertes Modul zu erstellen:
# audit2allow -a -M mypolicy - Option
-Merstellt eine Datei zur Durchsetzung des Typs (.te) mit dem angegebenen Namen und kompiliert die Regel in ein Politikpaket (.pp):mypolicy.pp mypolicy.te - Um ein benutzerdefiniertes Modul zu installieren:
# semodule -i mypolicy.pp
30. Um einen einzelnen Prozess (Domain) im permissive Modus auszufĂŒhren: # semanage permissive -a httpd_t
31. Wenn Sie nicht mehr möchten, dass die Domain permissive ist: # semanage permissive -d httpd_t
32. Um alle permissiven Domains zu deaktivieren: # semodule -d permissivedomains
33. Aktivierung der MLS-Politik von SELinux: # yum install selinux-policy-mls
in /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Stellen Sie sicher, dass SELinux im permissiven Modus funktioniert: # setenforce 0
Verwenden Sie das Skript fixfiles, um sicherzustellen, dass die Dateien beim nÀchsten Neustart neu markiert werden:
# fixfiles -F onboot # reboot
34. Erstellen Sie einen Benutzer mit einem bestimmten MLS-Bereich: # useradd -Z staff_u john
Verwenden Sie den Befehl useradd, ordnen Sie den 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. Bestimmen Sie einen bestimmten Bereich fĂŒr den Benutzer: # semanage login --modify --range s2:c100 john
37. Um das Label im Heimatverzeichnis des Benutzers zu korrigieren (falls erforderlich): # chcon -R -l s2:c100 /home/john
38. Um die aktuellen Kategorien anzuzeigen: # chcat -L
39. Um Kategorien zu Àndern oder eigene zu erstellen, Àndern 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
-tDateikontext-rRollenkontext-uBenutzerkontext
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. Also bitte: keine Panik und aktivieren Sie SELinux.
Links:
- indem
- von Dan Walsh
- indem
- indem
Quelle: habr.com
