GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Vier Semanage-Befehle, um SELinux im Erzwingungsmodus zu halten

Seit Jahren hilft SELinux dabei, Systemschäden durch Zero-Day-Exploits zu verhindern. Dieses Tool ist auch für die Isolierung virtueller Maschinen nützlich und für die Containerisolierung erforderlich. Dennoch wird SELinux häufig immer noch deaktiviert oder in den Permissive-Modus versetzt.

targeted von SELinux Die Richtlinie wurde entwickelt, um verschiedene Prozessdomänen zu isolieren und dennoch die Interaktion zwischen Diensten nach Bedarf zu ermöglichen. Ein Administrator benötigt nur wenige Befehle, um ein System so zu konfigurieren, dass es diese Richtlinie mit seinen angepassten Anwendungen verwendet und SELinux im Erzwingungsmodus hält.

[Weitere Informationen zur Verwendung der SELinux-Richtliniendokumentation finden Sie hier.]

Die semanage Der Befehl wird verwendet, um Dateikontexte, Portkontexte und boolesche Werte anzupassen. Wenn immer noch ein Konflikt mit einem bestimmten Prozess besteht, kann diese Domäne in den Genehmigungsmodus versetzt werden, bis weitere Untersuchungen abgeschlossen werden können. Dadurch bleibt der Rest des Systems im Erzwingungsmodus geschützt.

Mit nur den vier semanage Befehlen unten können die meisten Systeme so konfiguriert werden, dass Ihre benutzerdefinierten Anwendungen mit SELinux im Erzwingungsmodus ausgeführt werden.

Der semanage boolean Befehl

Der targeted policy enthält viele boolesche Werte, um Sätze von allow zu aktivieren und zu deaktivieren Regeln, wobei davon ausgegangen wird, dass Dienste mehrere Anwendungsfälle haben und in jeder Umgebung unterschiedlich ausgeführt werden. Die Verwendung von booleschen Werten ermöglicht unterschiedliche Regelsätze für verschiedene Anwendungsfälle:Ein Webserver in einer akademischen Umgebung muss möglicherweise Studenten erlauben, Inhalte aus ihren Home-Verzeichnissen zu veröffentlichen, während eine öffentlich zugängliche Unternehmenswebsite möglicherweise jedem Benutzer den Zugriff verweigern muss Verzeichnisse, begrenzen ausführbare SSI-Dateien und zeigen Daten an, die auf einer NFS-Freigabe gespeichert sind.

Der httpd_selinux Manpage beschreibt die Verwendung aller booleschen Werte, die für httpd bereitgestellt werden Domäne sowie Beispiel setsebool Befehle, um jeden booleschen Wert dauerhaft zu aktivieren. Eine alternative (und neuere) Möglichkeit, diese booleschen Werte anzuzeigen und zu ändern, ist der semanage boolean Befehl.

Das -l Option listet alle booleschen Werte in der geladenen Richtlinie auf. Sie können dann nach einem Schlüsselwort filtern:

$ sudo semanage boolean -l | grep httpd
httpd_anon_write               (off  ,  off)  Allow httpd to anon write
httpd_builtin_scripting        (on   ,   on)  Allow httpd to builtin scripting
httpd_can_check_spam           (off  ,  off)  Allow httpd to can check spam
httpd_can_connect_ftp          (off  ,  off)  Allow httpd to can connect ftp
httpd_can_connect_ldap         (off  ,  off)  Allow httpd to can connect ldap

Diese Ausgabe enthält den Namen des booleschen Werts, den aktuellen und dauerhaften Zustand des booleschen Werts und eine kurze Beschreibung, wie der boolesche Wert verwendet wird.

Um den booleschen Wert mit semanage zu ändern verwenden:

$ sudo semanage boolean -m --off httpd_ssi_exec 

Sie können auch die lokal angepassten booleschen Werte auflisten, indem Sie -C hinzufügen Möglichkeit:

$ sudo semanage boolean -l -C
SELinux boolean                State  Default Description

httpd_ssi_exec                 (off  ,  off)  Allow httpd to ssi exec
virt_sandbox_use_all_caps      (on   ,   on)  Allow virt to sandbox use all caps
virt_use_nfs                   (on   ,   on)  Allow virt to use nfs

Die Manpages für jede SELinux-Domäne enthalten Beschreibungen aller bereitgestellten booleschen Werte für diese Domänen. Für weitere Optionen beim Modifizieren von SELinux-booleschen Werten mit semanage , siehe semanage-boolean Manpage.

Sie können diese semanage automatisieren Befehle mit ihren zugehörigen Ansible-Modulen und -Rollen. Das Ansible-Modul für semanage boolean ist seboolean . Dieses und die unten beschriebenen verwandten Module werden von den Rollen verwendet, die von den linux-system-roles bereitgestellt werden Paket in Fedora oder rhel-system-roles Paket in Red Hat Enterprise Linux. Das Red Hat-Paket ist ab Red Hat Enterprise Linux 7.4 verfügbar und befindet sich im „Extras“-Repository.

Der semanage fcontext Befehl

Der targeted Die Richtlinie bietet Dateikontextinformationen für Anwendungsdateien – einschließlich Daten-, Protokoll- und Laufzeitdateien – Standard- und gängige alternative Speicherorte. Diese Kontextdefinitionen sind die Mappings dass die restorecon Befehl verwendet, um den Dateikontext zu überprüfen oder zu ändern.

Der semanage fcontext Der Befehl kann verwendet werden, um Dateikontextdefinitionen aufzulisten und weitere hinzuzufügen. Das -l Option zeigt alle Kontexte in der geladenen Richtlinie. Sie können dann nach einem Schlüsselwort filtern:

$ sudo semanage fcontext -l | grep sshd
/etc/rc\.d/init\.d/sshd                            regular file       system_u:object_r:sshd_initrc_exec_t:s0 
/etc/ssh/primes                                    regular file       system_u:object_r:sshd_key_t:s0 
/etc/ssh/ssh_host.*_key                            regular file       system_u:object_r:sshd_key_t:s0 
/etc/ssh/ssh_host.*_key\.pub                       regular file       system_u:object_r:sshd_key_t:s0 
/usr/lib/systemd/system/sshd-keygen.*              regular file       system_u:object_r:sshd_keygen_unit_file_t:s0 

Diese Ausgabe enthält das reguläre Ausdrucksmuster für die Zieldateinamen, den Dateityp und den Dateikontext, der dem übereinstimmenden Dateinamen zugewiesen werden soll.

Die zugehörige Manpage, in diesem Fall man sshd_selinux , enthält eine Liste der verwalteten Dateien und eine Beschreibung jedes Dateikontexts, der für die Domäne verfügbar ist. Es gibt auch Beispielbefehle zum Angeben und Anwenden alternativer Beschriftungen.

Wenn Sie beispielsweise den sshd speichern möchten host-Schlüssel in einem separaten Unterverzeichnis, könnten Sie die folgenden zwei Befehle ausführen:

$ sudo semanage fcontext -a -t sshd_key_t '/etc/ssh/keys(/.*)?'
$ sudo restorecon -r /etc/ssh/keys

In diesem Beispiel entspricht der reguläre Ausdruck dem Verzeichnis /etc/ssh/keys sowie alle Unterverzeichnisse und Dateien in /etc/ssh/keys Verzeichnis.

Genau wie bei den booleschen Werten können Sie alle lokal angepassten Dateikontexte anzeigen, indem Sie -C hinzufügen Möglichkeit:

$ sudo semanage fcontext -l -C
SELinux fcontext                                   type               Context

/usr/share/dnfdaemon/dnfdaemon-system              all files          system_u:object_r:rpm_exec_t:s0 

Weitere Optionen zum Ändern von SELinux-Dateikontexten finden Sie unter semanage-fcontext Manpage.

Sie können den semanage fcontext automatisieren Befehl mit dem Ansible sefcontext Modul. Die restorecon Der Befehl muss weiterhin mit einem separaten Befehlsmodul ausgeführt werden. Siehe ansible-doc sefcontext zum Beispiel. Die selinux  Systemrolle beinhaltet beide Tasks.

Der semanage port Befehl

Zusätzlich zu den Dateikontexten wird der targeted Die Richtlinie definiert auch Portkontexte. Genau wie bei den booleschen Werten und Dateikontexten listen die domänenspezifischen Manpages die definierten Typen auf und zeigen möglicherweise auch die Beispielbefehle, die zum Ausführen eines Dienstes auf einem anderen Port erforderlich sind.

Zeigen Sie die Portkontexte an mit:

$ sudo semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

Wenn Sie einen Dienst an einem benutzerdefinierten Port ausführen, müssen Sie die Konfigurationsdatei für den Dienst ändern und außerdem eine SELinux-Portdefinition hinzufügen. Ohne die Portdefinition kann der Dienst nicht gestartet werden und es wird ein Fehler ähnlich dem folgenden protokolliert:"An Port kann nicht gebunden werden".

Fügen Sie eine Portdefinition hinzu mit:

$ sudo semanage port -a -t http_cache_port_t -p tcp 8010

Bei der Angabe des Ports müssen Sie sowohl das Protokoll als auch die Portnummer angeben. Außerdem kann für jedes Protokoll und jede Portnummer nur ein Typ definiert werden. Weitere Optionen zum Ändern von SELinux-Portkontexten finden Sie unter semanage port Manpage.

Sie können den semanage port automatisieren Befehl mit dem seport Ansible-Modul.

Der semanage permissive Befehl

Anstatt das gesamte System in den Permissive-Modus zu versetzen – oder schlimmer noch, SELinux vollständig zu deaktivieren – können Sie eine einzelne Domain in den Permissive-Modus versetzen. Eine Domäne im Permissive-Modus lässt alle Aktionen zu, protokolliert jedoch weiterhin alle Ablehnungen. Die anderen Domänen auf dem System bleiben im Erzwingungsmodus, der Aktionen, die nicht ausdrücklich erlaubt sind, sowohl protokolliert als auch verweigert.

Die Manpages für allgemeine Domänen listen die SELinux-Typen auf, die in den Permissive-Modus versetzt werden können.

Verwenden Sie zum Auflisten von Domänen, die sich derzeit im Permissivmodus befinden:

$ sudo semanage permissive -l 

Bei der Erstinstallation ist es unwahrscheinlich, dass sich Domänen im Permissive-Modus befinden.

Um eine Domain in den Permissive-Modus zu versetzen, verwenden Sie:

$ sudo semanage permissive -a squid_t

Das -d Option löscht eine permissive Domäne und aktiviert somit den Erzwingungsmodus für diese Domäne erneut.

Weitere Optionen zum Versetzen von Domains in den Permissive-Modus finden Sie unter semanage-permissive Manpage.

Das Ansible selinux_permissive -Modul kann verwendet werden, um eine Domain in den Permissive-Modus zu versetzen. Siehe ansible-doc selinux_permissive für Beispiele.

Die Dateien

Alle semanage Befehle, die die Zielrichtlinienkonfiguration hinzufügen oder ändern, speichern Informationen in *local Dateien unter /etc/selinux/targeted Verzeichnisbaum. Diese Dateien enthalten alle Warnungen, dass sie nicht direkt bearbeitet werden sollten, sondern dazu dienen, die Anpassung beizubehalten. Wenn die SELinux- und Richtlinienpakete aktualisiert werden, bleiben diese lokalen Anpassungsdateien bestehen und werden auf die aktualisierte Richtlinie angewendet.


Linux
  1. Mehr als 10 Linux-VI-Befehle mit Beispielen

  2. Legen Sie den SELinux-Erzwingungsmodus mit Ansible fest

  3. 25 grundlegende Vim-Befehle zum Navigieren und Bearbeiten

  4. Mac Terminal vi[m] Editor-Befehle

  5. SElinux:Wie wechselt man ohne Neustart in den zulässigen Modus?

So deaktivieren oder deaktivieren Sie SELinux unter Rocky Linux 8

Grundlegende Vim-Befehle, die jeder Linux-Benutzer kennen muss [kostenloser Spickzettel enthalten]

Alle grundlegenden SELINUX-Befehle, die Sie kennen müssen

Rettungsmodus

Vier völlig nutzlose Linux-Befehle

Grundlegende vim-Befehle (Spickzettel)