1. Präambel
Security-Enhanced Linux (SELinux) ist ein Linux-Kernel-Modul und ein Sicherheitssubsystem von Linux.
SELinux wurde hauptsächlich von der NSA entwickelt. Linux-Kernel 2.6 und höher integrieren bereits SELinux-Module.
SELinux ist sehr komplex und enthält viele konzeptionelle Dinge, die schwer zu lernen sind. Viele Linux-Systemadministratoren haben SELinux ausgeschaltet, weil sie es problematisch finden.
Wenn du SELinux meisterst und es richtig benutzt, denke ich, dass das ganze System im Grunde den Punkt erreichen kann, an dem es "unzerstörbar" ist (denk immer daran, dass es keine absolute Sicherheit gibt).
Die Beherrschung der Grundkonzepte von SELinux sowie einfache Konfigurationsmethoden ist ein Pflichtkurs für jeden Linux-Systemadministrator.
Dieser Artikel basiert auf CentOS 7.4.1708.
Dieser Artikel ist rein ein persönlicher Lernaustausch und Austausch, Fehler sind unvermeidlich, nur zur Referenz! Wenn ihr einen Fehler findet, weist ihn bitte an, vielen Dank!
2. Die Rolle von SELinux und der Mechanismus zur Erlaubnisverwaltung
2.1 Die Rolle von SELinux
Die Hauptfunktion von SELinux besteht darin, die Ressourcen zu minimieren, auf die Serviceprozesse im System zugegriffen werden können (das Prinzip der minimalen Privilegien).
Stell dir vor, wenn ein Netzwerkdienst, der als Root läuft, eine 0-Day-Schwachstelle hat, können Hacker diese Schwachstelle ausnutzen, um auf deinem Server als Root alles zu tun, was sie wollen. Ist das nicht beängstigend?
SELinux ist hier, um dieses Problem zu lösen.
2.2 DAC
In einem Betriebssystem, das SELinux nicht verwendet, entscheidet der Faktor, ob eine Ressource zugänglich ist, ob eine Ressource die Berechtigungen des entsprechenden Benutzers besitzt (lesen, schreiben, ausführen).
Solange der Prozess, der auf diese Ressource zugreift, die oben genannten Bedingungen erfüllt, kann man darauf zugreifen.
Das fatalste Problem ist, dass Root-Nutzer keiner Regulierung unterliegen und alle Ressourcen im System ohne Einschränkungen zugänglich sind.
Der Hauptteil dieses Berechtigungsmanagementmechanismus ist der Benutzer, auch bekannt als autonome Zugriffskontrolle (DAC).
2.3 MAC
In einem Betriebssystem, das SELinux verwendet, bestimmen nicht nur die oben genannten Faktoren die Faktoren, die bestimmen, ob eine Ressource zugänglich ist, sondern auch, ob jeder Prozesstyp Zugriff auf einen bestimmten Ressourcentyp hat.
So ist es notwendig, selbst wenn ein Prozess als Wurzel läuft, den Prozesstyp und die Ressourcentypen, auf die zugegriffen werden darf, zu bestimmen, bevor entschieden wird, ob Zugriff auf eine Ressource erlaubt wird. Der aktive Raum des Prozesses kann ebenfalls auf ein Minimum komprimiert werden.
Selbst ein Serviceprozess, der als Root läuft, hat in der Regel nur Zugriff auf die benötigten Ressourcen. Selbst wenn ein Programm verwundbar ist, ist der Umfang der Auswirkungen auf die Ressourcen beschränkt, auf die es zugreifen darf. Die Sicherheit wird stark erhöht.
Der Hauptbestandteil dieses Berechtigungsmanagementmechanismus ist der Prozess, auch bekannt als obligatorische Zugriffskontrolle (MAC).
MAC ist in zwei Arten unterteilt: Eine heißt Category Security (MCS)-Modus, die andere Multi-Level Security (MLS)-Modus.
Die folgenden Aktionen befinden sich im MCS-Modus.
2.4 Vergleich von DAC und MAC
Hier ist ein Bild zur Veranschaulichung.
Wie Sie sehen können, kann im DAC-Modus das entsprechende Verzeichnis auf die Berechtigungen des jeweiligen Benutzers zugreifen. Im MAC-Modus ist sie auch durch die Anzahl der Verzeichnisse begrenzt, auf die Prozesse zugreifen dürfen.
3. Grundlegende Konzepte von SELinux
3.1 Thema
Das kann vollständig mit einem Prozess gleichgesetzt werden.
Hinweis: Zur Verständlichkeit wird der Prozess, sofern nicht anders angegeben, als Hauptteil unten betrachtet.
3.2 Ziel
Ressourcen, die vom Schulleiter genutzt werden. Es können Dateien, Verzeichnisse, Ports, Geräte usw. sein.
Hinweis: Zur Verständlichkeit werden, sofern nicht anders angegeben, die folgenden Dokumente oder Verzeichnisse als Objekte betrachtet.
3.3 Politik & Regel
In der Regel gibt es eine große Anzahl von Dateien und Prozessen im System, und um Zeit und Overhead zu sparen, regulieren wir in der Regel nur bestimmte Prozesse selektiv.
Und welche Prozesse reguliert werden müssen und wie sie kontrolliert werden, wird durch die Richtlinie bestimmt.
In einer Richtlinie gibt es mehrere Regeln. Einige Regeln können je nach Bedarf aktiviert oder deaktiviert werden (im Folgenden als boolesche Regeln bezeichnet).
Die Regeln sind modular und erweiterbar. Beim Installieren einer neuen Anwendung kann die Anwendung Regeln hinzufügen, indem neue Module hinzugefügt werden. Benutzer können Regeln auch manuell hinzufügen oder abziehen.
Im CentOS 7-System gibt es drei Sätze von Richtlinien, nämlich:
1. Zielgerichtet: Kontrolliert die meisten Netzwerkdienstprozesse. Dies ist die vom System standardmäßig verwendete Richtlinie (alle unten werden verwendet).
2. Mindest: Basierend auf den Zielen werden nur ausgewählte Netzwerkdienstprozesse reguliert. Im Allgemeinen nicht.
3. MLS: Mehrstufiger Sicherheitsschutz. Reguliere alle Prozesse. Das ist die strengste Richtlinie, und die Konfiguration ist sehr schwierig. Im Allgemeinen wird es nur verwendet, wenn es extrem hohe Sicherheitsanforderungen gibt.
Richtlinien können in /etc/selinux/config eingestellt werden.
3.4 Sicherheitskontext
Der Sicherheitskontext steht im Mittelpunkt von SELinux.
Sicherheitskontext Ich unterteile ihn in "Prozesssicherheitskontext" und "Dokumentensicherheitskontext".
Ein Prozesssicherheitskontext entspricht typischerweise mehreren Dokumentensicherheitskontexten.
Nur wenn der Sicherheitskontext der beiden übereinstimmt, kann ein Prozess auf die Datei zugreifen. Ihre Korrespondenz wird durch die Regeln in der Police bestimmt.
Der Dateisicherheitskontext wird davon bestimmt, wo die Datei erstellt wurde und welcher Prozess sie erstellt hat. Und das System hat einen Satz von Standardwerten, und Benutzer können auch diese Werte einstellen.
Es ist wichtig zu beachten, dass das blosse Verschieben von Dateien den Sicherheitskontext Ihrer Dateien nicht verändert.
Die Struktur und Bedeutung des Sicherheitskontexts
Der Sicherheitskontext hat vier Felder, die durch Doppelpunkte getrennt sind. Form wie: system_u:object_r:admin_home_t:s0.
3.5 SELinux-Arbeitsmodus
SELinux hat drei Betriebsmodi, nämlich:
1. Durchsetzung: Erzwungener Modus. Verstöße gegen die SELinux-Regeln werden blockiert und in die Protokolle eingeloggt.
2. Erlaubt: Toleranzmodus. Verstöße gegen die SELinux-Regeln werden nur in den Protokollen protokolliert. Im Allgemeinen zum Debuggen.
3. deaktiviert: SELinux ausschalten.
SELinux-Arbeitsmodus kann in /etc/selinux/config eingestellt werden.
Wenn du von deaktiviert auf durchsetzend oder erlaubend wechseln möchtest, musst du das System neu starten. Und umgekehrt.
Die Durchsetzungs- und Ermächtigungsmodi können mit dem Befehl Setenforce 1|0 schnell gewechselt werden.
Es ist wichtig zu beachten, dass der erste Neustart nach dem Einschalten von SELinux langsamer sein kann, wenn das System mit ausgeschaltetem SELinux läuft. Weil das System einen sicheren Kontext für die Dateien auf der Festplatte erstellen muss (ich sagte, ich habe etwa 10 Minuten neu gestartet und dachte, es sei tot...... )。
SELinux-Protokolle müssen mit Hilfe von auditd.service protokolliert werden, bitte deaktivieren Sie sie nicht.
3.6 SELinux-Arbeitsablauf
Hier ist ein Zitat aus einem Bild, ohne große Erklärung.
Hinweis: Der obige Sicherheitstext bezieht sich auf den Sicherheitskontext.
4. Grundlegende SELinux-Operationen
4.1 Abfrage des Sicherheitskontexts einer Datei oder eines Verzeichnisses
Basisverwendung von Befehlen
ls -Z
Anwendungsbeispiele
Abfrage des Sicherheitskontexts von /etc/hosts.
ls -Z /etc/hosts
Ausführungsergebnisse
-rw-r--r--. Root Root system_u:object_r:net_conf_t:s0 /etc/hosts
4.2 Abfrage des Sicherheitskontexts des Prozesses
Basisverwendung von Befehlen
ps auxZ | grep -v grep | grep
Anwendungsbeispiele
Abfrage des Sicherheitskontexts von Nginx-bezogenen Prozessen.
ps auxZ | grep -v grep | grep nginx
Ausführungsergebnisse
system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: Master Process /usr/sbin/nginx
system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: Arbeiterprozess
4.3 Manuelle Änderung des Sicherheitskontexts einer Datei oder eines Verzeichnisses
Basisverwendung von Befehlen
CHCON [...]
Optionsfunktion -u Ändern Sie das Benutzerfeld des Sicherheitskontexts -r Ändern Sie das Rollenfeld des Sicherheitskontexts -t Ändern Sie das Typfeld des Sicherheitskontexts -l Ändern Sie das Ebenenfeld des Sicherheitskontexts --reference Ändern Sie den Sicherheitskontext entsprechend der angegebenen Datei oder dem Verzeichnis -R Rekursive Operation -h Ändern Sie den Sicherheitskontext der Soft-Link (ändern Sie die entsprechende Datei des Soft-Link ohne diese Option)
Anwendungsbeispiele
Ändere den Sicherheitskontext des Tests auf aaa_u:bbb_r:ccc_t:s0.
CHCON -U aaa_u -R bbb_r -T ccc_t Test
4.4 Setzen Sie den Sicherheitskontext einer Datei oder eines Verzeichnisses auf ihren Standardwert zurück
Basisverwendung von Befehlen
restorecon [Optionen] [...]
Optionsfunktion – V Druckoperation-Prozedur – R-rekursive Operation
Anwendungsbeispiele
Nachdem du einige Webdateien zum Verzeichnis deines Nginx-Servers hinzugefügt hast, setze den korrekten Sicherheitskontext für diese neuen Dateien.
restorecon -R /usr/share/nginx/html/
4.5 Boolesche Regeln und ihren Status im System abfragen
Basisverwendung von Befehlen
getsebool -a
Da der Befehl entweder alle Regeln oder nur eine Regel abfragt, fragt er normalerweise zuerst alle Regeln ab und filtert dann mit grep.
Anwendungsbeispiele
Abfrage von boolesche Regeln im Zusammenhang mit httpd.
getsebool -a | grep httpd
Ausführungsergebnisse
httpd_anon_write --> weg
httpd_builtin_scripting -->
httpd_can_check_spam --> weg
httpd_can_connect_ftp --> weg
#以下省略
4.6 Wechsel einer booleschen Regel
Basisverwendung von Befehlen
setsebool [Option]
Die Optionsfunktion -P Neustart tritt weiterhin in Kraft
Anwendungsbeispiele
Schalten Sie httpd_anon_write Regeln ein.
setsebool -P httpd_anon_write on
4.7 Fügen Sie einen Standard-Sicherheitskontext für ein Verzeichnis hinzu
Basisverwendung von Befehlen
semanage fcontext -a -t "(/.*)?"
Hinweis: Der Standard-Sicherheitskontext eines Verzeichnisses oder einer Datei kann durch Verwendung des Befehls semanage fcontext -l in Kombination mit grep-Filterung angezeigt werden.
Anwendungsbeispiele
Nachdem du ein neues Seitenverzeichnis /usr/share/nginx/html2 zu Nginx hinzugefügt hast, musst du denselben Standard-Sicherheitskontext wie für das ursprüngliche Verzeichnis festlegen.
semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"
4.8 Hinzufügen von Ports, die von bestimmten Prozesstypen erlaubt sind
Basisverwendung von Befehlen
semanage port -a -t -p
Hinweis: Die für verschiedene Diensttypen erlaubten Portnummern können mit dem Befehl semanage port -l mit grep-Filterung angezeigt werden.
Anwendungsbeispiele
Für Nginx musst du Port 10080 für HTTP-Dienste verwenden.
Semanage Port -a -t http_port_t -p TCP 10080
5. SELinux-Fehleranalyse und -behebung
5.1 Verständnis von SELinux-Logs
Wenn SELinux aktiviert ist, gilt ein normales Verhalten vieler Dienste als Verstoß (sowohl im Titel als auch in den folgenden Fehlern).
Derzeit müssen wir SELinux-Verletzungsprotokolle verwenden, um sie zu analysieren und zu lösen.
SELinux-Verstößprotokolle werden in /var/log/audit/audit.log gespeichert.
/var/log/audit/audit.log 的内容大概是这样的。
type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(keine) old-ses=4294967295 ses=25 res=1
type=USER_START msg=audit(1507898701.421:516): pid=8523 uid=0 auid=0 ses=25 subj=system_u:system_r:crond_t:s0:c0.c1023 msg='op=PAM:session_open grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? ADDR=? terminal=cron res=Erfolg'
...
Die Datei enthält viel Inhalt und ist mit vielen Systemaudit-Logs vermischt, die nichts mit SELinux-Fehlern zu tun haben. Wir nutzen das Sealert-Tool zur Unterstützung der Analyse (wenn die Eingabe den Befehl nicht findet, installiere das SeTroubleshoot-Paket).
5.2 Fehler mit Versiegelung analysieren
Basisverwendung von Befehlen
Sealert -a /var/log/audit/audit.log
Nach der Ausführung des Befehls muss das System sich Zeit nehmen, um die Verstöße in den Protokollen zu analysieren und einen Analysebericht zu erstellen. |