Systemadministration

Einführung in Selinux -Konzepte und -verwaltung

Einführung in Selinux -Konzepte und -verwaltung

Zielsetzung

Einführung in Selinux -Konzepte und -verwaltung

Betriebssystem- und Softwareversionen

Anforderungen

Schwierigkeit

MITTEL

Konventionen

Einführung

Selinux (Security Enhanced Linux) ist eine Implementierung eines obligatorischen Zugriffskontrollsystems (MAC) im Linux -Kernel. Diese Art der Zugriffskontrolle unterscheidet sich von diskretionären Zugriffskontrollsystemen (DAC) wie ACLs und Standard -UNIX UGO/RWX -Berechtigungen, um zu sein, wie der Zugriff auf eine Ressource bereitgestellt wird. Im Fall von MAC ist nicht der Eigentümer einer Ressource, der entscheidet, wer und wie darauf zugreifen kann. Es ist wichtig zu sagen, dass Selinux Regeln und Standard -Systemberechtigungen nicht gegenseitig ausschließen und erstere nach letzterem implementiert werden.

Möglicher Selinux -Status

Es gibt drei mögliche Status von Selinux: Behindert, zulässige und Durchsetzung. Im ersten Fall ist Selinux vollständig ausgeschaltet: Es hat keinen Einfluss auf das laufende System. Wenn im zulässigen Modus Selinux aktiv ist: Es protokolliert die Verstöße gegen die Richtlinien, aber es blockiert nichts, um sie zu blockieren. Schließlich erzwingt Selinux im Durchsetzung des Modus seine Richtlinien tatsächlich.

Es gibt viele Möglichkeiten, wie Sie den Selinux -Status in Ihrem System überprüfen können. Der erste verwendet den Befehl namens Getsforce. Dieser Befehl berichtet nur darüber, wie der drei oben erwähnte Status Selinux ist. Um eine ausführlichere Ausgabe zu haben, können Sie das Sestatus -Dienstprogramm verwenden. Dies ist die Ausgabe des Befehls in meinem System (CentOS 7):

Selinux Status: Aktiviert Selinuxfs Mount:/sys/fs/selinux selinux rootverzeichnis:/etc/selinux geladener Richtlinien Name: Ziel aktueller Modus: Durchsetzung der Modus aus Konfigurationsdatei: Durchsetzung der Richtlinie MLS Status: Enabled Policy Deny_Unknown Status: Zugelassene Max Kernel -Richtlinienversion Version : 28 

Einige nützliche Informationen werden bereitgestellt: Zunächst einmal Selinuxfs Mountpoint, In diesem Fall/sys/fs/selinux. Selinuxfs ist ein Pseudo -Dateisystem, genau wie /proc: Es wird zur Laufzeit vom Linux -Kernel besiedelt und enthält Dateien, die zum Dokumentieren des Selinux -Status nützlich sind. Der Selinux Root Directory ist stattdessen der Pfad, der zum Aufbewahren von Selinux -Konfigurationsdateien verwendet wird, wobei die wichtigste Beinigung/etc/selinux/config (ein symbolischer Link zu dieser Datei ist auch bei/etc/sysconfig/selinux vorhanden). Das direkte Ändern dieser Datei ist der einfachste Weg, um den SELinux -Status und -Modus zu ändern. Schauen wir uns einen kurzen Blick auf den Inhalt an:

$ cat/etc/selinux/config # Diese Datei steuert den Status von Selinux im System. # Selinux = kann einen dieser drei Werte nehmen: # Durchsetzung - Selinux -Sicherheitsrichtlinie wird durchgesetzt. # zulässt - Selinux druckt Warnungen anstatt durchzusetzen. # Deaktiviert - Es wird keine Selinux -Richtlinie geladen. Selinux = Enforcing # selinuxType = kann einen von drei zwei Werten erfolgen: # Zieltätige - Zielprozesse sind geschützt, # Minimum - Modifikation der gezielten Richtlinie. Nur ausgewählte Prozesse sind geschützt. # MLS - Sicherheitsschutz mit mehreren Ebenen. SelinuxType = gezielt 

Die Datei ist sehr gut kommentiert: Durch Ändern der Werte von Selinux- und SelinuxType -Variablen können wir jeweils den Selinux -Status und den Selinux -Modus festlegen. Die möglichen Modi sind: gezielt (Standard), Minimum und MLS. Der Zielmodus ist der Standardwert: Wenn dieser Modus aktiv ist, sind alle Zielprozesse geschützt. Der Mindestmodus ist eine Teilmenge der ersten, in der nur spezifische Prozesse geschützt sind. Schließlich die MLS-Richtlinie ist die anspruchsvollste, die auf dem Konzept der Sicherheitsklassifizierung basiert: Von nicht klassifiziert bis hochgeheim.

Ändern des Selinux -Status

Um den Selinux -Status zur Laufzeit zu ändern, können Sie die verwenden SetEnforce Befehl. Die Syntax ist wirklich einfach: Sie geben den Status an, den Sie SELinux einsetzen möchten, und wählen Sie zwischen Durchsetzung oder Ermöglichung oder einem Booleschen Wert, der auf den Durchsetzungsstatus verwiesen wird. Was Sie mit diesem Befehl nicht machen können, ist, Selinux vollständig zu deaktivieren. Um dies zu erreichen (nicht empfohlen) und andere anhaltende Änderungen vornehmen, müssen Sie die Hauptkonfigurationsdatei bearbeiten, wie oben angezeigt. Änderungen an dieser Datei werden nach einem Neustart angewendet.

Wie funktioniert Selinux??

Grundsätzlich arbeitet Selinux zum Konzept der Entitäten: Themen, Objekte und Handlungen. Ein Subjekt ist eine Anwendung oder ein Prozess (z. Schließlich ist eine Aktion das, was dieses spezielle Thema am Objekt ausführen kann. Ein Subjekt läuft unter einer bestimmten Domäne, die beispielsweise im Fall des HTTPD -Daemons ist httpd_t. Dies ist einfach überprüfbar, indem Sie einen Laufprozess mit dem PS -Befehl überprüfen: Alles, was wir tun müssen, ist, den -Z -Switch hinzuzufügen (-Z -Switch wird häufig Selinux auf den Befehlen zugeordnet, die ihn unterstützen, wie zum Beispiel LS):

$ PS -AUXZ | grep httpd 

Der obige Befehl gibt das folgende Ergebnis an (Ausgabe verkürzt):

System_U: System_R: httpd_t: S0 Apache 2340 0.0 0.2 221940 2956 ? S 14:20 0:00/usr/sbin/httpd -Dforground 

Das Ausführen unter der HTTPD_T -Domäne kann der HTTPD -Dienst (Subjekt) nur in den zugehörigen Selinux -Typen zugreifen. Eine sehr einfache Möglichkeit, dies zu überprüfen, besteht darin, das Verzeichnis /var /www zu überprüfen. Der HTTPD -Daemon muss in der Lage sein, darauf zugreifen können. Überprüfen Sie also, welchen Typ dieses Verzeichnis hat. Wir können es tun, indem wir den Befehl LS mit dem -Z -Switch verwenden:

$ ls -dz /var /www 

Die Befehle geben uns dieses Ergebnis:

System_U: Object_R: httpd_sys_content_t: s0 /var /www 

Die Ausgabe zeigt uns den vollständigen Selinux -Kontext und das Verzeichnis /var /www wird mit dem Typ TTPD_SYS_Content_T gekennzeichnet. Dies ist vollkommen sinnvoll: Die gezielte Selinux -Richtlinie ermöglicht einen Prozess, der unter der Domäne httpd_t ausgeführt wird, um auf alle mit dem Typ httpd_sys_content_t gekennzeichneten Dateien zuzugreifen, unabhängig davon, welche DAC -Berechtigungen auf der Datei festgelegt sind. Wenn der Prozess eine von der Richtlinie nicht erwartete Aktion versucht, protokolliert Selinux den Fehler und blockiert, wenn sie im Durchsetzung des Modus die Aktion selbst blockieren.

Selinux -Benutzer

Wir haben oben gesehen, wie eine Darstellung eines vollständigen Selinux -Kontextes strukturiert zu sein scheint:

System_U: Object_R: httpd_sys_content_t: s0 

Analysieren wir diese Struktur, indem Sie die ersten drei Teile berücksichtigen (der vierte wird auf den MLS -Modus verwiesen). Der erste Abschnitt handelt von den Selinux -Benutzern: Jeder Selinux -Benutzer hat unterschiedliche Einschränkungen und ist autorisiert
Um nur einen bestimmten Satz von Selinux -Rollen zu spielen, die Zugriff auf bestimmte Selinux -Domänen ermöglichen, die wiederum zugreifen können.

Selinux -Benutzer können Selinux -Rollen abspielen. In Selinux -Domänen haben Zugriff auf Selinux -Typen 

Um eine klare Vorstellung von den verfügbaren Selinux -Benutzern zu haben, können wir ausführen:

# Semanage User -l

Dieser Befehl gibt uns eine klare Gesamtansicht der Benutzer - Rollenbeziehungen: Rollen:

Selinux User Prefix MCS Level MCS Range Selinux Rollen Guest_u User S0 S0 Guest_r Root User S0 S0-S0: C0.C1023 Staff_R SYSADM_R SYSTEM_R CONCONDIMED_R STOPH_U Benutzer S0 S0-S0: C0.C1023 Staff_R SYSADM_R SYSTEM_R CONCONDIMED_R SYSADM_U Benutzer S0 S0-S0: C0.C1023 sysadm_r system_u user s0 s0-s0: c0.C1023 system_r conconfined_r conconfined_u Benutzer S0 S0-S0: C0.C1023 system_r conconfined_r user_u user s0 s0 user_r xguest_u user s0 s0 xguest_r 

Sehen wir kurz, was einige der beschriebenen Selinux -Benutzer zu tun haben:

Wie Sie sehen können, sind Selinux -Benutzer im Kontext identifizierbar, da das Suffix _u ist. Es sollte klar sein, dass sie eine völlig andere Sache sind als Systembenutzer. Es gibt eine Karte zwischen den beiden und es ist möglich, sie durch Laufen zu sehen Semanage Login -l Befehl:

# Semanage -l Anmeldung

Das gibt uns die folgende Ausgabe:

Login-Name Selinux User MLS/MCS Range Service __default__ conconfined_u S0-S0: C0.C1023 * root confined_u s0-s0: c0.C1023 * 

Das Systembenutzerroot wird dem Benutzer von Concongrained_u Selinux zugeordnet, weshalb keine Einschränkungen enthält. Keine anderen Benutzer werden explizit zugeordnet, sodass sie standardmäßig dem Benutzer von Concongrained_u Selinux zugeordnet sind.

SELINUX -Benutzer ändern

An diesem Punkt können Sie fragen, wie es möglich ist, eine Karte zwischen einem Systembenutzer und einem Selinux einzustellen. Wir erledigen diese Aufgabe mithilfe des Semanage -Anmeldebefehls. Im folgenden Beispiel ändere ich die Standardzuordnung und verknüpft den Dummy -Benutzer in meinem System mit dem Benutzer von Guest_u Selinux:

# Semanage Login -a -s Guest_u Dummy 

Der -A -Switch ist kurz für -add und es wird verwendet, um einen Datensatz hinzuzufügen, während der -S -Ein (kurz für -seuser) dem Selinux -Benutzer angibt, dem der Systembenutzer zugeordnet werden sollte. Lassen Sie uns nun erneut Semanage Login -l laufen lassen, um zu sehen, ob sich etwas geändert hat:

Login-Name Selinux User MLS/MCS Range Service __default__ conconfined_u S0-S0: C0.C1023 * Dummy Guest_u S0 * root confined_u s0-s0: c0.C1023 * system_u system_u s0-s0: c0.C1023 * 

Wie erwartet ist der System des Systems nun dem Guest_u Selinux -Benutzer zugeordnet, der, wie bereits erwähnt, keinen Zugriff auf das Netzwerk hat. Überprüfen wir es auf die einfachste Weise: Wir versuchen, Google zu pingen und zu sehen, was das Ergebnis ist:

[Dummy@LinuxConfig ~] $ Ping Google.Com Ping: Socket: Erlaubnis abgelehnt 

Wie erwartet darf der Dummy -Benutzer das Netzwerk nicht verwenden, sodass der Ping -Befehl fehlschlägt. Um die Zuordnung zu löschen, verwenden wir den -D -Schalter (kurz für -delete):

# Semanage Login -d -s Guest_u Dummy 

Der Dummy -Benutzer ist nicht spezifisch zuzuordnen und fällt auf den Benutzer von Concon Finy_u Selinux zurück. Da letzteres keine Einschränkungen hat, sollte es jetzt erfolgreich sein, wenn wir den obigen Befehl erneut versuchen:

[Dummy@LinuxConfig ~] $ Ping Google.Com Ping Google.com (216.58.205.206) 56 (84) Datenbytes. 64 Bytes von Mil04S29-in-F14.1e100.Netz (216.58.205.206): ICMP_SEQ = 1 TTL = 52 Zeit = 29.2 ms [] 

Beachten Sie, dass Änderungen bei der Zuordnung zwischen Benutzern und Selinux -Benutzern erst nach einer neuen Anmeldung wirksam sind.

Selinux -Rollen

Der zweite Teil in einem Selinux -Kontext betrifft Rollen. Wie Sie aus der Ausgabe von sehen können Semanage User -l Oben kann jeder Selinux -Benutzer einen bestimmten Satz von Selinux -Rollen abspielen neue Rolle Befehl mit der folgenden Syntax:

$ newrole -r Newrole 

Um zu überprüfen, auf welche Domänen auf eine bestimmte Rolle zugreifen kann, sollten Sie die ausführen Seinfo Befehl. Dies wird von der bereitgestellt Setools-Console Paket. Zum Beispiel, um zu überprüfen, welche Domänen aus der Rolle der Stuff_r zugänglich sind, führen wir aus:

# Seinfo -rstuff_r -x 
$ SEINFO -RSTAFF_R -x (Ausgabe abgestoßen) Staff_R DOMINED Rollen: Staff_R Typen: ABRT_HELPER_T ALSA_HOME_T ANTIVIRUS_HOME_T HTTPD_USER_CONTENT_T HTTPD_USER_HTACESS_T [.. 

Domänen und Typen

Der dritte Teil eines Selinux -Kontext. Wir bezeichnen es als Typ, wenn wir über ein Objekt oder als Domäne sprechen, wenn wir über einen Prozess sprechen. Lass uns einen Blick darauf werfen.

Ich habe ein einfaches erstellt .HTML -Datei in der Standard -Apache -VirtualHost auf meinem CentOS 7 -Computer: Wie Sie sehen können, wurde die Datei den Selinux -Kontext des Verzeichnisses, das er erstellt wurde, in:

-rw-r-r--. root root confined_u: object_r: httpd_sys_content_t: s0 test.html 

Mit dem httpd_sys_content_t, Die Datei kann vom HTTPD -Prozess gelesen werden, wie durch Navigieren im Browser bestätigt werden.

Versuchen wir nun, den Dateityp zu ändern und den Effekt dieser Änderung zu sehen. Um den Selinux -Kontext zu manipulieren, verwenden wir die CHCON Befehl:

# CHCON -t User_home_t/var/www/html/test.html 

Wir haben den Selinux -Typ der Datei in geändert user_home_t: Dies ist der Typ, der von den Dateien in den Benutzern verwendet wird
Hausverzeichnisse standardmäßig. Das Ausführen von LS -Z in der Datei gibt uns die Bestätigung:

concined_u: Object_r: user_home_t: s0/var/www/html/test.html 

Wenn wir jetzt versuchen, die Datei wie erwartet vom Browser aus zu erreichen.

Der CHCON Der Befehl kann nicht nur verwendet werden, um den Typ der Datei, sondern auch den Benutzer und den Rolle des Selinux -Kontextes zu ändern. Wenn Sie es verwenden, um einen Verzeichniskontext zu ändern die Datei oder das Verzeichnis, den der Kontext entspricht. Lassen Sie uns beispielsweise den Test machen.HTML -Datei oben erhalten Sie den Kontext des Verzeichnisses/var/www/html:

# CHCON -Referenz/var/www/html/var/www/html/test.html && ls -z/var/www/html/test.html 

Wir können aus der Ausgabe der obigen Befehle sehen, dass sich jetzt der Kontext der Datei wieder geändert hat und sich jetzt das gleiche wie das des Verzeichnisses/var/www/html:

System_U: Object_R: httpd_sys_content_t: s0/var/www/html/test.html 

Beachten Sie, dass die Änderungen,. Wie können wir also die Veränderung anhaltend machen?? Mit dem Semanage -Befehl müssen wir der Selinux -Richtlinie eine neue Regel hinzufügen.

Nehmen wir an, wir möchten hinzufügen, dass eine Regel vorliegt, dass alle Dateien im Verzeichnis/Home/EGDOC/Test standardmäßig im Verzeichnis/Home/EGDOC/Test erstellt werden sollten httpd_sys_content_t Typ. Hier ist der Befehl, den wir ausführen sollten:

semanage fcontext -a -t httpd_sys_content_t/home/egdoc/test (/.*)? 

Zuerst berufen wir den Semanage -Befehl an, der angegeben hat fcontext Zum Ändern von Dateikontexten fügen wir das hinzu -A Wechseln Sie, um einen Datensatz hinzuzufügen und die -T Zum Angeben möchten wir den Typ Teil des Kontexts unmittelbar folgt ändern.

Schließlich stellen wir den Verzeichnispfad zusammen mit einem regulären Ausdruck an, das bedeutet: /Home /EGDOC /Testpfad, gefolgt vom /Zeichen, gefolgt von einer beliebigen Anzahl von Zeichen, wobei der gesamte Ausdruck 0 oder 1 übereinstimmt. Dieser reguläre Ausdruck entspricht allen Dateinamen.

Wir laufen jetzt die restorecon Befehl mit dem -R (rekursiv) Option im Verzeichnis, um die Richtlinie anzuwenden. Da die oben hinzugefügte Regel jetzt Teil der Richtlinie selbst ist, haben alle im Verzeichnis und auch die neu erstellten Dateien den in der Regel angegebenen Kontext, den wir angegeben haben.

Selinux Boolesche Einstellungen

Selinux Booleans -Einstellungen können das Selinux -Verhalten ändern und durch die Verwendung von Booleschen Werten verwaltet werden. Wir können mit ihnen mit ihnen interagieren, indem wir zwei Befehle verwenden: Getsbool Und Setsbool, Der erste wird verwendet, um den Status einer Option abzufragen, und zweitens, um sie zu ändern.

Wenn wir die Option übergeben, die wir nach Gettsbool überprüfen möchten, gibt es uns genau den Zustand dieser Option, wenn wir sie mit dem zur Verfügung stellen -A Schalten Sie es stattdessen anzeigen uns alle verfügbaren Einstellungen und ihren jeweiligen Booleschen Zustand. Wenn wir beispielsweise den Status der Optionen im Zusammenhang mit HTTPD überprüfen möchten, können wir ausführen:

$ GETSBOOL -A | grep httpd 

Hier ist ein sehr kurzer Auszug der Ausgabe:

[[email protected] ~] $ GEsbool -a | grep httpd httpd_anon_write -> off httpd_builtin_scriping -> on […] 

Versuchen wir nun, den Status der Option httpd_anon_write zu ändern und ihn zu aktivieren. Wie oben erwähnt, verwenden wir SetSbool für die Aufgabe:

# Setsbool httpd_anon_write 1 

Wenn wir jetzt den Wert der Option überprüfen, hätte sie aktiviert werden müssen:

[[email protected] ~] $ GEsbool -a | grep httpd_anon_write httpd_anon_write -> on 

Alles ging wie erwartet. Die auf diese Weise vorgenommenen Änderungen werden jedoch keinen Neustart überleben. Um diese Aufgabe zu erfüllen, müssen wir denselben Befehl verwenden, aber das Hinzufügen des Hinzufügens -P Switch: Wenn Sie es verwenden, werden die Änderungen in die Richtlinie geschrieben und bleiben bestehen.

Es gibt viele Dinge, die man bei der Verwendung von SELinux berücksichtigen und die Feinabstimmung für ein bestimmtes Verhalten erfasst und gleichzeitig die weniger möglichen Berechtigungen beibehalten kann. Trotzdem ist in Myopinion keine gute Idee, sie vollständig auszuschalten. Experimentieren Sie weiter, bis Sie mit den Ergebnissen zufrieden sind und das gesuchte Setup erreichen:
Sie werden sowohl in Sicherheit als auch in Bezug auf das Wissen gewinnen.

Beispiel eines binären Suchalgorithmus in C ++
Hier ist ein einfaches Beispiel für eine binäre Suche in C++. Das Beispiel erstellt zuerst einen Vektor von 4 000 000 Zahlen und macht dann einen Funk...
Aktivieren Sie mehrere Klonanzeigen für VGA Interface Projector oder TV
Wenn Sie eine Präsentation mit Ihrem Laptop durchführen, möchten Sie mehrere Displays verwenden. Ein Display ist Ihr LCD -Laptop -Bildschirm und das z...
Ändern Sie die Prioritäten von Linux -Prozessen mit Nizza und Renice
Jeder Prozess, der auf dem Linux -System ausgeführt wird, hat eine Standardpriorität zugewiesen......