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

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 in âMission: Impossibleâ.
Angesichts dieses Dilemmas entscheiden sich manche Systemadministratoren dafĂŒr, die zu 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 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ĂŒhrenselinux=0â Der Kernel lĂ€dt die SELinux-Infrastruktur nichtenforcing=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 -Zid -Zps -Znetstat -Zcp -Zmkdir -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. Verwenden Sie
journalctl um eine Liste aller Protokolle anzuzeigen, die mit setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Verwenden 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.html26. 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
-Merstellt 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
-tDateikontext-rRollen-Kontext-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 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:
- by
- von Dan Walsh
- by
- by
Quelle: habr.com
