ProHoster > Blog > Verwaltung > SELinux-Spickzettel für Systemadministratoren: 42 Antworten auf wichtige Fragen
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“.
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).
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:
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
15Etikettierungsproblem: 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
16Etikettierungsproblem: 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
18SELinux 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
19SELinux 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).
21Ihre 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:
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:
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: