Eine Übersetzung des Artikels wurde speziell für Studenten des Linux Administrator Kurses erstellt.
Hier erhalten Sie Antworten auf wichtige Fragen zum Leben, dem Universum und all dem, was Sie unter Linux mit erhöhter Sicherheit tun können."Die wichtige Wahrheit ist, dass die Dinge nicht immer so sind, wie sie zu sein scheinen ..."
»Douglas Adams, Per Anhalter durch die Galaxis
Sicherheit Zuverlässigkeit verbessern. Compliance. Politik. Vier Reiter der Apokalypse des Sysadmins. Neben unseren täglichen Aufgaben - Überwachen, Sichern, Implementieren, Konfigurieren, Aktualisieren usw. - sind wir auch für die Sicherheit unserer Systeme verantwortlich. Sogar auf Systemen, auf denen ein Drittanbieter empfiehlt, die erweiterte Sicherheit zu deaktivieren. Dies ähnelt der Arbeit von
Ethan Hunt von Mission Impossible.
Angesichts dieses Dilemmas entscheiden sich einige Systemadministratoren für die Einnahme der
blauen Pille, weil sie glauben, die Antwort auf die große Frage des Lebens, des Universums und all dessen nie zu kennen. Und wie wir alle wissen, ist diese Antwort 42.
Im Sinne des „Per Anhalter durch die Galaxis“ finden Sie hier 42 Antworten auf wichtige Fragen zur Verwaltung und Verwendung von
SELinux auf Ihren Systemen.
1. SELinux ist ein System zur erzwungenen Zugriffskontrolle, dh jeder Prozess ist mit einem Label versehen. Jede Datei, jedes Verzeichnis und jedes Systemobjekt verfügt auch über Tags. Richtlinienregeln steuern den Zugriff zwischen gekennzeichneten Prozessen und Objekten. Der Kernel setzt diese Regeln durch.
2. Die beiden wichtigsten Konzepte sind:
Beschriftung - Beschriftung (Dateien, Prozesse, Ports usw.) und
Typenerzwingung (die Prozesse basierend auf Typen voneinander isoliert).
3. Das richtige Etikettenformat lautet
user:role:type:level
(optional).
4. Ziel der Bereitstellung von
Multi-Level-Sicherheit (MLS ) ist die Verwaltung von Prozessen (Domänen) auf der Grundlage des Sicherheitsniveaus der von ihnen verwendeten Daten. Beispielsweise kann ein geheimer Prozess keine streng geheimen Daten lesen.
5. Durch Sicherstellen der
Multi-Category-Sicherheit (MCS ) werden ähnliche Prozesse voneinander geschützt (z. B. virtuelle Maschinen, OpenShift-Mechanismen, SELinux-Sandboxen, Container usw.).
6. Kernel-Parameter zum Ändern der SELinux-Modi beim Booten:
autorelabel=1
zwingt das System, die Markierung neu zu startenselinux=0
Kernel lädt die SELinux-Infrastruktur nichtenforcing=0
Laden im zulässigen Modus
7. Wenn Sie das gesamte System neu markieren müssen:
# touch /.autorelabel
#reboot
Wenn die Systemkennzeichnung eine große Anzahl von Fehlern enthält, müssen Sie möglicherweise im zulässigen Modus starten, damit die Kennzeichnung erfolgreich ist.
8. So überprüfen Sie, ob SELinux aktiviert ist:
# getenforce
9. So aktivieren / deaktivieren Sie SELinux vorübergehend:
# setenforce [1|0]
10. Überprüfen des SELinux-Status:
# sestatus
11. Konfigurationsdatei:
/etc/selinux/config
12. Wie funktioniert SELinux? Hier ein Beispiel für die Beschriftung des Apache-Webservers:
/usr/sbin/httpd→httpd_exec_t
: /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
- Starten Sie das Skript:
/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 von httpd_t
kann mit einem Objekt mit der Bezeichnung 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
Kontexte werden festgelegt, wenn Dateien basierend auf dem Kontext ihres übergeordneten Verzeichnisses erstellt werden (mit einigen Ausnahmen). RPMs können Kontexte wie während der Installation festlegen.14. Es gibt vier Hauptursachen für SELinux-Fehler, die in den folgenden Absätzen 15-21 ausführlicher beschrieben werden:
- Beschriftungsprobleme
- Wegen etwas, das SELinux wissen muss
- Fehler in der SELinux-Richtlinie / -Anwendung
- Ihre Daten könnten kompromittiert sein.
15. Problem beim Markieren : Wenn Ihre Dateien in
/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
- Den Kontext wiederhergestellt haben (für beide Fälle):
# restorecon -vR /srv/myweb
16. Das Problem beim Markieren: Wenn Sie die Datei verschieben, anstatt sie zu kopieren, behält die Datei ihren ursprünglichen Kontext bei. So beheben Sie dieses Problem:
- Ändern Sie den Kontextbefehl mit der Bezeichnung:
# chcon -t httpd_system_content_t /var/www/html/index.html
- Ändern Sie den Kontextbefehl mit der Verknüpfungsbezeichnung:
# chcon --reference /var/www/html/ /var/www/html/index.html
# restorecon -vR /var/www/html/
den Kontext wieder her (in beiden Fällen): # restorecon -vR /var/www/html/
17. Wenn
SELinux wissen muss, dass HTTPD Port 8585 überwacht, teilen Sie SELinux Folgendes mit:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux muss die booleschen Werte kennen, mit denen Sie Teile der SELinux-Richtlinie zur Laufzeit ändern können, ohne die SELinux-Richtlinien neu schreiben zu müssen. Wenn Sie beispielsweise möchten, dass httpd eine E-Mail sendet, geben
# setsebool -P httpd_can_sendmail 1
ein:
# setsebool -P httpd_can_sendmail 1
19. SELinux muss die logischen Werte kennen, um SELinux-Einstellungen zu aktivieren / deaktivieren:
- So zeigen Sie alle booleschen Werte an:
# getsebool -a
- So zeigen Sie eine Beschreibung der einzelnen
# semanage boolean -l
: # semanage boolean -l
- So legen Sie einen booleschen Wert fest:
# setsebool [_boolean_] [1|0]
-P
für eine dauerhafte Installation -P
. Zum Beispiel: # setsebool httpd_enable_ftp_server 1 -P
20. SELinux-Richtlinien / -Anwendungen können Fehler enthalten, einschließlich:
- Ausgefallene Code-Pfade
- Konfigurationen
- Stdout umleiten
- Dateideskriptor leckt
- Ausführbarer Speicher
- Schlecht gebaute Bibliotheken
Offene Tickets (senden Sie keinen Bericht an Bugzilla; es gibt keine SLA in Bugzilla).
21. Ihre Informationen können kompromittiert werden, wenn Sie über eingeschränkte Domains verfügen, die versuchen:
- Laden Sie die Kernel-Module herunter
- Deaktivieren Sie den erzwungenen SELinux-Modus
- Schreiben Sie in
etc_t/shadow_t
- Iptables-Regeln ändern
22. SELinux-Tools zum Entwickeln von Richtlinienmodulen:
# yum -y install setroubleshoot setroubleshoot-server
auditd
nach der Installation neu oder starten
auditd
neu.
23. Verwenden
journalctl
So listen Sie alle mit der
setroubleshoot
verbundenen
setroubleshoot
:
# journalctl -t setroubleshoot --since=14:20
24. Verwenden Sie
journalctl
um alle Protokolle
journalctl
, die einem bestimmten SELinux-Label zugeordnet sind. Zum Beispiel:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. Wenn ein SELinux-Fehler auftritt, verwenden Sie das
setroubleshoot
mit einigen möglichen Lösungen.
Zum Beispiel aus
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 / messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Protokollierung: Suche nach SELinux-Fehlern im Überwachungsprotokoll:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. So suchen Sie nach SELinux Access Vector Cache (AVC) -Nachrichten für einen bestimmten Dienst:
# ausearch -m avc -c httpd
29. Das Dienstprogramm
audit2allow
erfasst Informationen aus Protokollen verbotener Vorgänge und generiert dann SELinux-Berechtigungsrichtlinienregeln. Zum Beispiel:
- So erstellen Sie eine lesbare Beschreibung des Grundes für die Zugriffsverweigerung:
# audit2allow -w -a
- So zeigen Sie eine Durchsetzungsregel an, die den Zugriff verweigert:
# audit2allow -a
- So erstellen Sie ein benutzerdefiniertes Modul:
# audit2allow -a -M mypolicy
- Die Option
-M
erstellt eine Typ-Durchsetzungsdatei (.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 Verwendung im zulässigen Modus:
# semanage permissive -a httpd_t
31. Wenn die Domain nicht länger zulässig sein soll:
# semanage permissive -d httpd_t
32. So deaktivieren Sie alle zulässigen Domänen:
# semodule -d permissivedomains
33. Aktivieren der MLS SELinux-Richtlinie:
# yum install selinux-policy-mls
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
# yum install selinux-policy-mls
/etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
# setenforce 0
Sie sicher, dass sich SELinux im zulässigen Modus befindet:
# setenforce 0
Verwenden Sie das Skript
fixfiles
um sicherzustellen, dass die Dateien beim nächsten Neustart erneut markiert werden:
# fixfiles -F onboot # reboot
34. Erstellen Sie einen Benutzer mit einem bestimmten MLS-Bereich:
# useradd -Z staff_u john
useradd
den neuen Benutzer mit dem Befehl
useradd
dem vorhandenen SELinux-Benutzer zu (in diesem Fall
staff_u
).
35. So zeigen Sie die Korrespondenz 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 Beschriftung im
# chcon -R -l s2:c100 /home/john
des Benutzers (falls erforderlich):
# chcon -R -l s2:c100 /home/john
38. So zeigen Sie die aktuellen Kategorien an:
# chcat -L
39. Um Kategorien zu ändern oder eigene zu erstellen, 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, einer bestimmten 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 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. Deshalb bitte: Keine Panik und SELinux einschalten.Referenzen: