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.