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. 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.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
