1. Einführung in SELinuxSELinux ist ein Sicherheitsmechanismus auf Kernel-Ebene. SELinux ist seit Linux 2.6 in den Kernel integriert. Da SELinux auf Kernel-Ebene ist, erfordern alle Änderungen an den Konfigurationsdateien einen Neustart des Betriebssystems, damit sie wirksam werden. Der SELinux-Mechanismus ist jetzt in die gängigen Linux-Versionen integriert und CentOS/RHEL aktiviert den SELinux-Mechanismus standardmäßig. Systemressourcen werden von Prozessen gelesen und geändert. Um die Sicherheit von Systemressourcen zu gewährleisten, verwendet traditionelles Linux die Konzepte von Benutzer- und Dateiberechtigungen, um den Zugriff auf Ressourcen einzuschränken. Dies geschieht, indem der initiierende Benutzer des Prozesses mit den Dateiberechtigungen verglichen wird, um die Sicherheit von Systemressourcen zu gewährleisten. Dies ist eine Methode der diskretionären Zugriffskontrolle (DAC). Da jedoch die Anforderungen an die Sicherheit von Systemressourcen steigen, ist unter Linux ein Mechanismus zur Verbesserung der Sicherheit (SELinux) entstanden. Dieser Mechanismus fügt zusätzlich zu den Berechtigungen weitere Beschränkungen für Prozesse und Dateien hinzu, um die Zugriffsbedingungen zu verbessern. Diese Methode ist die obligatorische Zugriffskontrolle (MAC). Der intuitivste Vergleich zwischen diesen beiden Methoden besteht darin, dass Root beim herkömmlichen DAC auf alle Dateien zugreifen kann, unter MAC jedoch selbst Root nur auf die Dateien zugreifen kann, die durch die Einstellungen zugelassen sind. Das Funktionsprinzip ist wie folgt: 2. Grundkonzepte von SELinuxWir wissen, dass der Sicherheitsmechanismus des Betriebssystems eigentlich zwei Dinge einschränkt: Prozesse und Systemressourcen (Dateien, Netzwerk-Sockets, Systemaufrufe usw.). Wie wir bereits wissen, begrenzt das Linux-Betriebssystem unsere Systemressourcen durch die Konzepte von Benutzern und Gruppen. Wir wissen, dass jeder Prozess zur Ausführung einen Benutzer benötigt. In SELinux sind für diese beiden Dinge zwei grundlegende Konzepte definiert: Domäne und Kontext. 2.1 Art der ArbeitUnter SELinux gelten verschiedene Regeln. SELinux aktiviert oder deaktiviert diese Regeln je nach Arbeitstyp (on|off<Boolescher Wert 1|0>) und schränkt dann durch Aktivieren und Deaktivieren der Regeln gezielt das Lesen von Dateien für verschiedene Prozesse ein. getsebool -a oder sestatus -b # Überprüfen Sie, ob jede Regel unter dem aktuellen Arbeitstyp aktiviert ist oder nicht setsebool -P Regelname [0|1] # Ändert das Öffnen und Schließen der angegebenen Regel unter dem aktuellen Arbeitstyp. -P bedeutet, dass die Datei gleichzeitig geändert wird, um sie dauerhaft zu machen Die Domäne wird verwendet, um den Prozess einzuschränken, und der Kontext wird verwendet, um die Systemressourcen einzuschränken. 2.2. Einführung in den SicherheitskontextDer Sicherheitskontext ist im Prozess und in der Datei vorhanden. Der Kontext wird zusammen mit dem Prozess im Speicher gespeichert, und der Kontext der Datei wird in ihrem entsprechenden Inode gespeichert. Wenn ein Prozess auf eine Datei zugreift, muss er daher zuerst den Inode lesen und dann bestimmen, ob er auf die Datei zugreifen kann.
Wir können den Befehl ps -Z verwenden, um die Domäneninformationen des aktuellen Prozesses anzuzeigen, dh die SELinux-Informationen des Prozesses:
Über den Befehl ls -Z können wir die Dateikontextinformationen anzeigen, d. h. die SELinux-Informationen der Datei:
Wir werden später untersuchen, was diese Felder darstellen. 3. StrategieIn SELinux steuern wir, indem wir Richtlinien definieren, welche Domänen auf welche Kontexte zugreifen können. In SELinux gibt es viele voreingestellte Richtlinienmodi. Normalerweise müssen wir keine Richtlinien selbst definieren, es sei denn, wir müssen bestimmte Dienste oder Programme schützen. In CentOS/RHEL wird standardmäßig die Zielstrategie verwendet. Was ist also die Zielstrategie? Die Zielrichtlinie definiert, dass nur der Zielprozess durch SELinux eingeschränkt wird und Nichtzielprozesse nicht durch SELinux eingeschränkt werden. Normalerweise sind unsere Netzwerkanwendungen Zielprozesse wie httpd, mysqld, dhcpd usw. Unsere CentOS SELinux-Konfigurationsdatei ist in der Datei selinux im Verzeichnis /etc/sysconfig/ gespeichert. Wir können den Inhalt darin überprüfen:
4. SELinux-ModusEs gibt drei Arbeitsmodi von SELinux: Erzwingen, Permissiv und Deaktiviert. ① Durchsetzungsmodus: Jede Aktion, die gegen die Richtlinie verstößt, wird verboten und als Kernel-Information aufgezeichnet ②Permissiver Modus: Aktionen, die gegen die Richtlinie verstoßen, werden nicht verboten, es wird jedoch eine Warnmeldung angezeigt ③ Deaktivierter Modus: Das Deaktivieren von SELinux ist dasselbe wie ein System ohne SELinux. Wenn wir nicht viel über SELinux wissen, setzen wir den Modus normalerweise auf „Deaktiviert“, damit beim Zugriff auf einige Netzwerkanwendungen keine Probleme auftreten. Wie oben erwähnt, ist die Hauptkonfigurationsdatei von SELinux /etc/sysconfig/selinux
Die Verwendung des Befehls zum Ändern des Arbeitsmodus ist nur im Moment gültig. Wenn Sie beim Booten wirksam werden möchten und zwischen deaktiviertem und den beiden anderen Modi wechseln möchten, können Sie nur die Parameter der Konfigurationsdatei ändern und dann neu starten. Die Konfigurationsdatei ist /etc/selinux/config. Sie können sie auch über die Datei /etc/sysconfig/selinux ändern. Tatsächlich ist diese Datei eine Softlink-Datei von /etc/selinux/config. Der Standardarbeitsmodus unseres SELinux ist „enforcing“, wir können ihn auf „permissive“ oder „disabled“ ändern. Wenn wir den aktuellen Arbeitsstatus von SELinux anzeigen möchten, können wir ihn mit dem Befehl getenforce anzeigen:
Der aktuelle Arbeitsmodus ist „erzwingend“. Wenn wir den aktuellen SELinux-Arbeitszustand festlegen möchten, können wir ihn mit dem Befehl setenforce [0|1] ändern. setenforce 0 bedeutet, ihn auf „permissiv“ zu setzen, und 1 bedeutet „erzwingend“. [Hinweis:] Das Einstellen von SELinux über setenforce ist nur eine vorübergehende Änderung und wird ungültig, wenn das System neu gestartet wird. Wenn Sie also eine dauerhafte Änderung vornehmen möchten, ändern Sie die SELinux-Hauptkonfigurationsdatei
Mit dem Befehl ls -Z können wir die Kontextinformationen unserer Datei, also SELinux-Informationen, anzeigen.
Wir haben festgestellt, dass es im Vergleich zum herkömmlichen ls-Befehl ein zusätzliches system_u:object_r:admin_home_t:s0 hat. Lassen Sie uns die Bedeutung dieser Anweisung analysieren.
①system_u: bezieht sich auf SElinux-Benutzer, root stellt die Root-Kontoidentität dar, user_u stellt normale Benutzer ohne Berechtigungen dar und system_u stellt Systemprozesse dar. Der Identitätstyp kann über den Benutzer bestätigt werden und wird im Allgemeinen mit Rollen verwendet. Unterschiedliche Identitäten haben unterschiedliche Berechtigungen, wenn sie mit unterschiedlichen Rollen verwendet werden. Obwohl Sie den Befehl su verwenden können, um Benutzer zu wechseln, ändert sich der SElinux-Benutzer nicht. Die Benutzeridentität bleibt beim Wechsel zwischen Konten unverändert. Die Benutzeridentität hat in einer gezielten Richtlinienumgebung keine wesentlichen Auswirkungen. ②object_r: object_r hat im Allgemeinen die Rolle eines Dateiverzeichnisses, system_r hat im Allgemeinen die Rolle eines Prozesses und in einer gezielten Richtlinienumgebung hat der Benutzer im Allgemeinen die Rolle system_r. Die Benutzerrolle ähnelt dem Konzept der Benutzergruppe. Unterschiedliche Rollen haben unterschiedliche Identitätsberechtigungen. Ein Benutzer kann mehrere Rollen haben, aber immer nur eine Rolle gleichzeitig verwenden. In der Zielrichtlinienumgebung haben Rollen keine wirkliche Auswirkung. In der Zielrichtlinienumgebung ist die Rolle aller Prozessdateien die Rolle system_r. ③admin_home: Dateien und Prozesse haben einen Typ, und SElinux schränkt die Zugriffsberechtigungen basierend auf der jeweiligen Typkombination ein. 5. BeispieleSchauen wir uns den Kontextwert und die SELinux-Zugriffskontrolle anhand eines Beispiels an Wenn ich beispielsweise einen Webserver erstellt habe, wissen wir, dass der Standardspeicherort für Webseiten des WWW-Servers im Verzeichnis /var/www/html liegt. Wenn wir hier eine neue index.html-Testseite erstellen, unseren WWW-Server starten und aktualisieren, können wir ihren Inhalt sehen. Wenn wir zu diesem Zeitpunkt eine index.html-Seite in unserem /home-Verzeichnis erstellen, sie dann in das Verzeichnis /var/www/html verschieben und die Seite dann aktualisieren, wird sie dann immer noch normal angezeigt? Zuerst starten wir unseren httpd-Dienst:
Öffnen Sie dann den Browser und geben Sie unsere 127.0.0.1 ein, um darauf zuzugreifen. Die Schnittstelle, die Sie jetzt sehen, ist die Apache-Testschnittstelle: Da sich derzeit keine Seite unter /var/www/html befindet:
Als nächstes erstellen wir eine index.html-Seite im /home-Verzeichnis und verschieben sie dann in unser /var/www/html-Verzeichnis
Zu diesem Zeitpunkt sollten wir unter normalen Umständen zur Seite index.html springen, da sich im HTML-Verzeichnis eine Seite index.html befindet. Wenn wir die Browserseite zu diesem Zeitpunkt aktualisieren, sollten wir zur Seite index.html springen. Tatsächlich haben wir jedoch festgestellt, dass sich die Seite immer noch auf dieser Testseite befindet. Warum ist das so? Dies hängt mit unserer SELinux-Sicherheitsrichtlinie zusammen. Wir können in das Verzeichnis /var/log/audit gehen, um die Datei audit.log anzuzeigen und die Fehlerinformationen zu finden.
Aus dieser Protokolldatei können wir ersehen, dass der Grund, warum die Seite index.html beim Aktualisieren nicht angezeigt wird, in unserer SELinux-Sicherheitsrichtlinie liegt. Verwenden wir den Befehl ls -Z, um uns die Kontextinformationen der gerade verschobenen Datei index.html anzusehen.
Wir haben festgestellt, dass der Typ des dritten Felds home_root_t ist. Warum ist das so? Da wir diese Datei index.html gerade im Verzeichnis /home erstellt haben, erbt sie standardmäßig die SELinux-Typinformationen des übergeordneten Verzeichnisses. Wir können die Kontextinformationen des Verzeichnisses /home überprüfen:
Wir können sehen, dass sein drittes Feld mit dem von index.html identisch ist, das wir gerade gesehen haben. Dies zeigt, dass der Kontextwert der Datei vom übergeordneten Verzeichnis beeinflusst wird. Normalerweise erben sie den Kontextwert des übergeordneten Verzeichnisses. Einige durch die Installation von Diensten generierte Dateikontextwerte sind jedoch Ausnahmen und erben nicht den Kontextwert des übergeordneten Verzeichnisses. Der Dienst erstellt ihre Kontextwerte automatisch. Wenn beispielsweise der http-Dienst nicht installiert ist, gibt es unter dem Verzeichnis /var/ kein www-Verzeichnis. Nach der Installation des httpd-Dienstes erstellt der Dienst automatisch das erforderliche Verzeichnis und definiert die Kontextwerte der mit dem Dienst verbundenen Verzeichnisse und Dateien. Sie erben nicht den Kontextwert des übergeordneten Verzeichnisses.
Zu diesem Zeitpunkt stellen wir fest, dass der Kontexttyp unseres Verzeichnisses /var/www/html httpd_sys_content_t ist, während der Typ der gerade verschobenen index.html home_root_t ist. Da unser SELinux-Arbeitsmodus zu diesem Zeitpunkt erzwungen wird, sind Aktionen, die gegen die Richtlinie verstoßen, verboten. Daher werden die Informationen in unserer index.html nicht angezeigt, wenn wir die Seite aktualisieren. Wie sollten wir dieses Problem also zu diesem Zeitpunkt lösen? Normalerweise gibt es zwei Lösungen: ① Stellen Sie den SELinux-Arbeitsmodus direkt auf „Deaktiviert“, damit kein Problem beim Abfangen von Richtlinien auftritt. In diesem Fall verfügt unser System jedoch nicht über den SELinux-Sicherheitsschutz. ②Stellen Sie unsere Dateikontextinformationen mit dem Befehl restorecon oder chcon wieder her Mit dem Befehl restorecon kann der Standardkontext einer Datei wiederhergestellt werden:
Mit dem Befehl chcon können die Kontextinformationen einer Datei geändert werden. Normalerweise verwenden wir eine Referenzdatei, um Änderungen vorzunehmen:
Hier stellen wir den Standardkontext unserer Datei mit dem Befehl restorecon wieder her:
Wir können sehen, dass nach Verwendung des Befehls restorecon die Kontextinformationen von index.html die Kontextinformationen des übergeordneten Verzeichnisses html erben. Zu diesem Zeitpunkt können wir den Inhalt unserer index.html sehen, indem wir die Seite aktualisieren. Durch dieses Beispiel verstehen wir die Beziehung zwischen den Kontextinformationen der Datei und SELinux und wissen, wie wir den Fehler finden, indem wir die Informationen der Protokolldatei /var/log/audit/audit.log anzeigen und die Kontextinformationen unserer Datei mit dem Befehl restorecon reparieren. 6. SELinux-ProtokollverwaltungDie Protokolldatensätze der von SELinux blockierten Prozesse werden in der Datei /var/log/audit/audit.log gespeichert. Der Inhalt dieser Datei lässt sich für den Benutzer jedoch nur sehr schlecht lesen. Sie können unter cat /var/log/audit/audit.log nachsehen. Daher stellt uns das System das Tool Sealert zur Verfügung, das uns beim Organisieren der Protokolldatei hilft. Das Tool Sealert benötigt etwas Zeit, um die Protokolldatei zu verarbeiten. Bitte haben Sie etwas Geduld. Darüber hinaus erfordert die Protokollierungsfunktion von SELinux die Aktivierung des Dienstes auditd.service. Lernen wir das Tool Sealert anhand eines Beispiels kennen (Apache SELinux-Konfiguration): 1. Stellen Sie sicher, dass der httpd-Dienst auf diesem Computer konfiguriert und eingeschaltet ist 2. Der Befehl /usr/sbin/httpd startet einen Prozess zum Lesen von Dateien mit der Endung .html im Verzeichnis /var/www/html/. Erstellen Sie nun eine Datei ~/index.html in Ihrem Home-Verzeichnis, schreiben Sie beliebigen Inhalt hinein und verschieben Sie die neu erstellte Datei nach /var/www/html/. 3. Wir verwenden den Browser, um die lokale IP in die Adressleiste einzugeben und zu prüfen, ob der Zugriff erfolgreich war oder nicht. Wenn die folgende Schnittstelle angezeigt wird, bedeutet dies, dass der Zugriff fehlgeschlagen ist. 4. Wir haben sichergestellt, dass es bei der Konfiguration des Dienstes keine Probleme gab. Zu diesem Zeitpunkt sollten wir davon ausgehen, dass SELinux unseren Zugriff möglicherweise blockiert. Wir übergeben den Befehl
Überprüfen Sie das SELinux-Protokoll und suchen Sie das Schlüsselwort httpd. Lesen Sie den Inhalt. Der Inhalt in der folgenden Abbildung ist das, was uns hauptsächlich interessiert. Der Rest ist der Inhalt von /var/log/audit/audit.log, den wir ignorieren können. Schließlich haben wir der Lösung Priorität eingeräumt, die die wenigsten Änderungen erforderte, nämlich die Änderung des SELinux-Labels. 5. Befehle ausführen
Ändern Sie einfach die Datei in die Standardbezeichnung, auf die httpd zugreifen kann 6. Rufen Sie die Ergebnisse erneut über den Browser auf und zeigen Sie sie an. Diesmal ist es erfolgreich. Oben finden Sie Einzelheiten zum Verständnis von SELinux unter Linux. Weitere Informationen zu Linux SELinux finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Border-Radius IE8-kompatible Verarbeitungsmethode
>>: Zusammenfassung zur Anwendung dekorativer Elemente im Webdesign
Inhaltsverzeichnis Grundlegende Anweisungen und V...
Ich habe einen Server, auf dem mehrere Docker-Con...
Ausgehend von diesem Artikel dient eine neue Arti...
Verwenden Sie Javascript, um ein Dropdown-Menü zu...
MySQL ist ein relationales Datenbankverwaltungssy...
Inhaltsverzeichnis App.vue sub1.vue sub2.vue Zusa...
1. Reinigen Sie vor der Installation gründlich rp...
Vorwort Wir müssen häufig etwas basierend auf bes...
Inhaltsverzeichnis Definition Die Rolle des Curso...
Laut canisue (http://caniuse.com/#search=border-r...
In diesem Artikel verwenden wir die Libudev-Bibli...
In diesem Artikel wird der spezifische Code zur I...
Es gibt offensichtliche Unterschiede zwischen der...
Methode 1: Verwenden Sie das Zielereignisattribut...
Inhaltsverzeichnis Vorwort 1. Verwenden Sie for.....