RHCSA -Serie Obligatorische Zugangskontrolle mit Selinux in RHEL 7 - Teil 13

RHCSA -Serie Obligatorische Zugangskontrolle mit Selinux in RHEL 7 - Teil 13

Während dieser Serie haben wir mindestens zwei Zugangskontrollmethoden untersucht: Standard Ugo/rwx Berechtigungen (Verwalten von Benutzern und Gruppen - Teil 3) und Zugriffskontrolllisten (Konfigurieren von ACLs in Dateisystemen - Teil 7).

RHCSA -Prüfung: Selinux Essentials und Steuerung des Dateisystems Zugriff

Obwohl dies als Berechtigungen der ersten Ebene und der Zugriffskontrollmechanismen erforderlich ist, haben sie einige Einschränkungen, die von angesprochen werden Sicherheitsverbesserte Linux (AKA Selinux kurz)).

Eine dieser Einschränkungen besteht Chmod Befehl und somit eine unerwartete Ausbreitung der Zugriffsrechte verursachen. Infolgedessen kann jeder von diesem Benutzer gestartete Prozess tun, was er mit den Dateien des Benutzers gefällt, wobei schließlich eine böswillige oder auf andere Weise kompromittierte Software auf das gesamte System zugreifen kann.

Mit diesen Einschränkungen, die Nationale Sicherheitsbehörde der Vereinigten Staaten (NSA) Zuerst entwickelt Selinux, Eine flexible obligatorische Zugriffskontrollmethode, um die Fähigkeit von Prozessen zu beschränken, auf Systemobjekte (wie Dateien, Verzeichnisse, Netzwerkports usw.) auf oder andere Vorgänge auszuführen, auf das kleinste Berechtigungsmodell, das später nach Bedarf geändert werden kann. In wenigen Worten erhält jedes Element des Systems nur den Zugriff, der für die Funktion erforderlich ist.

In Rhel 7, Selinux wird in den Kernel selbst eingebaut und in aktiviert Strikt Modus standardmäßig. In diesem Artikel werden wir kurz die grundlegenden Konzepte erklären Selinux und seine Operation.

Selinux -Modi

Selinux kann auf drei verschiedene Arten funktionieren:

  1. Strikt: Selinux verweigert den Zugriff auf der Grundlage von Selinux -Richtlinienregeln, einer Reihe von Richtlinien, die die Sicherheitsmotor steuern.
  2. Zulässt: Selinux verweigert keinen Zugriff, aber Ablehnungen werden für Aktionen angemeldet.
  3. Behinderte (selbsterklärend).

Der Getenforce Der Befehl zeigt den aktuellen Modus von Selinux an, während SetEnforce (gefolgt von einem 1 oder ein 0) wird verwendet, um den Modus zu ändern auf Strikt oder Zulässt, jeweils nur während der aktuellen Sitzung.

Um die Ausdauer über Abmeldungen und Neustarts hinweg zu erreichen, müssen Sie die bearbeiten /etc/selinux/config Datei und setzen Sie die Selinux -Variable auf beide Strikt, zulässt, oder Behinderte:

# Getenforce # setEnforce 0 # GetEnforce # setEnforce 1 # Getenforce # cat/etc/selinux/config 
Setzen Sie den Selinux -Modus

Normalerweise werden Sie verwenden SetEnforce Um zwischen Selinux -Modi (Durchsetzung von zulässiger und zurück) als erste Fehlerbehebung zu wechseln. Wenn Selinux derzeit auf festgelegt ist Strikt Während Sie ein bestimmtes Problem haben, und das gleiche verschwinden, wenn Sie es aufstellen zulässt, Sie können zuversichtlich sein, dass Sie sich ein Problem mit Selinux -Berechtigungen ansehen.

Selinux -Kontexte

Ein Selinux -Kontext besteht aus einer Zugangskontrollumgebung, in der Entscheidungen auf der Grundlage von Selinux -Benutzer, Rolle und Typ (und optional eine Ebene) getroffen werden:

  1. Ein Selinux -Benutzer ergänzt ein reguläres Linux -Benutzerkonto, indem Sie es auf ein Selinux -Benutzerkonto zuordnen, das wiederum im Selinux -Kontext für Prozesse in dieser Sitzung verwendet wird, um seine zulässigen Rollen und Ebenen explizit zu definieren.
  2. Das Konzept der Rolle fungiert als Vermittler zwischen Domänen und Selinux -Benutzern, indem es definiert, auf welche Prozessdomänen und Dateitypen zugegriffen werden können. Dadurch wird Ihr System vor Anfälligkeit für Eskalationangriffe für Privilegien geschützt.
  3. Ein Typ definiert einen Selinux -Dateityp oder eine Selinux -Prozessdomäne. Unter normalen Umständen wird verhindert, dass Prozesse auf Dateien zugreifen, die andere Prozesse verwenden, und den Zugriff auf andere Prozesse. Daher ist der Zugriff nur zulässig, wenn eine bestimmte Selinux -Richtlinienregel vorliegt, die dies zulässt.

Mal sehen, wie all das die folgenden Beispiele durchläuft.

Beispiel 1: Ändern des Standardports für den SSHD -Daemon

Bei der Sicherung von SSH - Teil 8 haben wir erklärt, dass das Ändern des Standardports wo geändert wurde, wo sshd Hörer auf ist eine der ersten Sicherheitsmaßnahmen, um Ihren Server gegen externe Angriffe zu sichern. Lassen Sie uns die bearbeiten /etc/ssh/sshd_config Datei filmen und den Port auf festlegen 9999:

Port 9999 

Speichern Sie die Änderungen und starten Sie SSHD neu:

# SystemCTL Neustart SSHD # Systemctl Status SSHD neu 
Starten Sie den SSH -Service neu

Wie Sie sehen können, hat SSHD nicht gestartet. Aber was ist passiert?

Eine schnelle Inspektion von /var/log/pdit/prüfung.Protokoll zeigt an, dass SSHD die Berechtigungen verweigert wurde, am Port zu beginnen 9999 (Selinux -Protokollnachrichten enthalten das Wort “AVCSo dass sie leicht aus anderen Nachrichten identifiziert werden können), da dies ein reservierter Port für die ist JBoss Management Service:

# CAT/VAR/LOG/AUDIT/AUDIT.Protokoll | grep avc | Schwanz -1 
SSH -Protokolle überprüfen

Zu diesem Zeitpunkt konnten Sie deaktivieren Selinux (aber nicht!) Wie zuvor erläutert und versuchen zu starten sshd wieder, und es sollte funktionieren. Allerdings die Semanage Das Dienstprogramm kann uns sagen, was wir ändern müssen.

Laufen,

# Semanage Port -l | Grep Ssh 

Um eine Liste der Ports zu erhalten, in denen Selinux SSHD anhören kann.

Semanage -Tool

Wechseln wir also den Port in /etc/ssh/sshd_config zum Hafen 9998, Fügen Sie den Port zum Anschluss hinzu ssh_port_t context, und dann den Service neu starten:

# Semanage Port -a -t SSH_PORT_T -P TCP 9998 # SystemCTL RESTART SSHD # SYSTEMCTL IS -ASACTE SSHD 
Semanage Port hinzufügen

Wie Sie sehen, wurde der Service diesmal erfolgreich gestartet. In diesem Beispiel zeigt die Tatsache, dass Selinux die TCP -Portnummer auf eigene interne Definitionen des Port -Typs steuert.

Beispiel 2: Ermöglichen

Dies ist ein Beispiel dafür, dass Selinux einen Prozess verwaltet, der auf einen anderen Prozess zugreift. Wenn Sie mod_security und mod_evasive zusammen mit Apache in Ihrem RHEL 7 -Server implementieren, müssen Sie zulassen httpd zugreifen Sendmail um nach a eine Mail -Benachrichtigung zu senden (D) dos Attacke. Unter dem folgenden Befehl die auslassen -P Fahnen Sie, wenn Sie nicht möchten, dass die Änderung über Neustarts hinweg anhaltend ist.

# Semanage Boolean -1 | grep httpd_can_sendmail # setsbool -p httpd_can_sendmail 1 # semanage boolean -1 | grep httpd_can_sendmail 
Lassen Sie Apache E -Mails senden

Wie Sie aus dem obigen Beispiel erkennen können, Selinux Boolean Einstellungen (oder nur Booleschen) sind wahr / falsche Regeln, die in Selinux -Richtlinien eingebettet sind. Sie können alle Booleschen auflisten Semanage Boolean -l, und alternativ nach Grep gehen, um den Ausgang zu filtern.

Beispiel 3: Servieren einer statischen Stelle aus einem anderen Verzeichnis als dem Standard

Angenommen, Sie bedienen eine statische Website über ein anderes Verzeichnis als das Standard (Standard ()/var/www/html), sagen /Websites (Dies kann der Fall sein, wenn Sie beispielsweise Ihre Webdateien in einem gemeinsam genutzten Netzwerklaufspeicher speichern und sie unter montieren müssen /Websites).

A). Erstelle ein Index.html Datei im Inneren /Websites mit dem folgenden Inhalt:

 

Selinux -Test

Wenn Sie tun,

# LS -lz /Websites /Index.html 

Sie werden sehen, dass die Index.html Datei wurde mit dem gekennzeichnet default_t selinux Geben Sie auf, auf welche Apache nicht zugreifen kann:

Überprüfen Sie die Berechtigung von Selinux -Dateien

B). Ändere das Dokument Root Richtlinie in /etc/httpd/conf/httpd.Conf Zu /Websites Und vergessen Sie nicht, den entsprechenden Verzeichnisblock zu aktualisieren. Starten Sie dann Apache neu.

C). Durchsuchen http: //, und Sie sollten eine 503 verbotene HTTP -Antwort erhalten.

D). Als nächstes ändern Sie das Etikett von /Websites, rekursiv zur httpd_sys_content_t Geben Sie ein, um Apache schreibgeschützten Zugriff auf dieses Verzeichnis und seinen Inhalt zu gewähren:

# semanage fcontext -a -t httpd_sys_content_t "/websites (/.*)?" 

e). Wenden Sie schließlich die in Selinux -Richtlinien erstellte in an, in denen er erstellt wurde D):

# RestoreCon -r -v /Websites 

Starten Sie jetzt Apache neu und stöbern Sie zu http: // Auch hier sehen Sie, dass die HTML -Datei korrekt angezeigt wird:

Überprüfen Sie die Apache -Seite

Zusammenfassung

In diesem Artikel haben wir die Grundlagen von durchlaufen Selinux. Beachte.

Wenn ich darf, empfehlen Sie mir zwei wesentliche Ressourcen zunächst: der NSA Selinux -Seite und dem RHEL 7 Selinux -Benutzer- und Administratorhandbuch.

Zögern Sie nicht, uns mitzuteilen, ob Sie Fragen oder Kommentare haben.