SELinux
- WAS?
Das Thema enthält grundlegende Informationen zu Security-Enhanced Linux.
- WARUM?
Sie möchten SELinux verstehen und wissen, wie Sie es unter SLE Micro konfigurieren
- AUFWAND
Es dauert etwa 40 Minuten, den Artikel zu lesen.
1 Informationen zu SELinux #
SELinux wurde als zusätzliche Linux-Sicherheitslösung entwickelt, die das Sicherheits-Framework im Linux-Kernel verwendet. Der Zweck bestand darin, eine detailliertere Sicherheitsrichtlinie zu ermöglichen, die über die standardmäßigen Discretionary Access Controls (DAC), die traditionellen Dateiberechtigungen von Eigentümer/Gruppe/Welt und Lesen/Schreiben/Ausführen hinausgeht.
SELinux verwendet Bezeichnungen, die an Objekte (z. B. Dateien und Netzwerk-Sockets) angehängt sind. Sie werden als Zugriffsentscheidungen eingesetzt.
Die Standardaktion von SELinux besteht darin, jeglichen Zugriff zu verweigern. SELinux lässt nur Aktionen zu, die in der SELinux-Richtlinie ausdrücklich zugelassen wurden. Als weitere Eigenschaft von SELinux zur Erhöhung der Sicherheit lässt SELinux eine strikte Eingrenzung von Prozessen zu, bis zu dem Punkt, an dem die Prozesse nicht auf Dateien anderer Prozesse auf demselben System zugreifen können.
SELinux wurde entwickelt, um bestehende Sicherheitslösungen zu verbessern, nicht um sie zu ersetzen. Beispielsweise wird die freigegebene Zugriffskontrolle (Discretionary Access Control, DAC) auch dann angewendet, wenn das System SELinux verwendet. Wenn DAC den Zugriff zuerst verweigert, wird SELinux nicht verwendet, da der Zugriff bereits durch einen anderen Mechanismus blockiert wurde.
2 Abrufen von SELinux #
SELinux wird standardmäßig installiert, wenn SLE Micro von YaST installiert wird, oder ist Teil der vorgefertigten Images.
Wenn SELinux auf Ihrem System nicht eingerichtet ist, führen Sie das folgende Kommando aus:
#
transactional-update setup-selinux
Starten Sie Ihr System neu, nachdem das Kommando beendet wurde. Mit diesem Kommando wird die SELinux-Richtlinie installiert, falls sie noch nicht installiert ist, der SELinux-Modus enforcing
festgelegt und initrd
neu erstellt.
3 SELinux-Modi #
SELinux kann in einem von drei Modi ausgeführt werden: disabled
, permissive
oder enforcing
.
Wenn Sie den Modus disabled
verwenden, werden keine Regeln der SELinux-Richtlinie angewendet und Ihr System ist nicht geschützt. Daher empfehlen wir, den Modus disabled
nicht zu verwenden.
Im Modus permissive
ist SELinux aktiv, die Sicherheitsrichtlinie wird geladen, das Dateisystem wird gekennzeichnet und Zugriffsverweigerungseinträge werden protokolliert. Die Richtlinie wird jedoch nicht durchgesetzt und somit wird kein Zugriff verweigert.
Im Modus enforced
wird die Sicherheitsrichtlinie angewendet. Jeder Zugriff, der nicht explizit von der Richtlinie zugelassen wird, wird verweigert.
Informationen zum Umschalten zwischen den SELinux-Modi finden Sie unter Abschnitt 3.1, „Ändern des SELinux-Modus“
3.1 Ändern des SELinux-Modus #
Sie können den SELinux-Modus vorübergehend oder dauerhaft wechseln.
3.1.1 Vorübergehendes Ändern des SELinux-Modus #
Wenn Sie SELinux vorübergehend auf permissive
oder enforcing
festlegen möchten, verwenden Sie das Kommando setenforce
.
Das Kommando setenforce
hat die folgende Syntax:
#
setenforce MODE_ID
MODE_ID ist dabei 0 für den Modus permissive
oder 1 für den Modus enforced
.
Denken Sie daran, dass Sie SELinux nicht mit dem Kommando setenforce
deaktivieren können.
3.1.2 Dauerhaftes Ändern des SELinux-Modus #
Wenn Sie Änderungen am SELinux-Modus vornehmen möchten, in dem der Neustart des Systems fortgesetzt wird, bearbeiten Sie die Konfigurationsdatei /etc/selinux/config
. In dieser Datei können Sie auch SELinux auf Ihrem System deaktivieren. Diese Aktion wird jedoch nicht empfohlen. Wenn SELinux möglicherweise Probleme mit Ihrem System verursacht, wechseln Sie stattdessen in den Modus permissive
und debuggen Sie Ihr System.
Ändern Sie in der Datei /etc/selinux/config
den Wert von SELINUX
in disabled
oder permissive
oder enforced
wie folgt:
SELINUX=disabled
Die Änderungen in der Datei werden nach dem nächsten Neustart übernommen.
disabled
Wenn Sie SELinux auf Ihrem System deaktivieren und später aktivieren, stellen Sie sicher, dass Sie Ihr System neu benennen. Wenn SELinux deaktiviert ist und Sie Änderungen an Ihrem Dateisystem vornehmen, werden die Änderungen nicht mehr im Kontext widergespiegelt (z. B. haben neue Dateien keinen Kontext). Daher müssen Sie Ihr System mit dem Kommando restorecon
, mit dem Boot-Parameter autorelabel
oder durch Erstellen einer Datei neu bezeichnen, die beim nächsten Start eine Neubezeichnung auslöst. Führen Sie zum Erstellen der Datei das folgende Kommando aus:
#
touch /etc/selinux/.autorelabel
Nach dem Neustart wird die Datei /etc/selinux/.autorelabel
durch eine andere Flag-Datei, /etc/selinux/.relabelled
ersetzt, um eine erneute Bezeichnung bei nachfolgenden Neustarts zu verhindern.
3.1.3 Überprüfen des aktiven SELinux-Modus #
Führen Sie zum Überprüfen des Modus das folgende Kommando aus:
#
getenforce
Das Kommando sollte permissive
oder enforced
zurückgeben, je nach der angegebenen MODE_ID.
3.2 Überprüfen der Funktionsfähigkeit von SELinux #
Wenn Sie Konfigurationsänderungen vornehmen, kann es nützlich sein, in den Modus „Zulässig“ zu wechseln. Während dieser Zeit können Benutzer Dateien falsch bezeichnen und somit Probleme verursachen, wenn sie wieder in den Erzwingungsmodus wechseln.
Führen Sie die folgenden Schritte aus, um das System wieder in den gesicherten Zustand zu versetzen:
Setzen Sie den Sicherheitskontext zurück:
>
sudo
restorecon -R /
Wechseln Sie in den Erzwingungsmodus, indem Sie
SELINUX=enforcing
als/etc/selinux/config
festlegen.Booten Sie das System neu und melden Sie sich erneut an.
Führen Sie das Kommando
sestatus -v
aus. Es sollte Ihnen eine Ausgabe ähnlich der folgenden geben:>
sudo
sestatus -v
SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: requested(insecure) Max kernel policy version: 33 Process contexts: Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 Init context: system_u:system_r:init_t:s0 /usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023 File contexts: Controlling terminal: unconfined_u:object_r:user_tty_device_t:s0 /etc/passwd system_u:object_r:passwd_file_t:s0 /etc/shadow system_u:object_r:shadow_t:s0 /bin/bash system_u:object_r:shell_exec_t:s0 \ -> system_u:object_r:shell_exec_t:s0 /bin/login system_u:object_r:login_exec_t:s0 /bin/sh system_u:object_r:bin_t:s0 \ -> system_u:object_r:shell_exec_t:s0 /sbin/agetty system_u:object_r:bin_t:s0 \ -> system_u:object_r:getty_exec_t:s0 /sbin/init system_u:object_r:bin_t:s0 -> \ system_u:object_r:init_exec_t:s0 /usr/sbin/sshd system_u:object_r:sshd_exec_t:s0Wenn das System nicht ordnungsgemäß funktioniert, überprüfen Sie die Protokolldateien in
/var/log/audit/audit.log
Weitere Einzelheiten finden Sie unter SELinux troubleshooting.
4 SELinux-Sicherheitskontext #
Der Sicherheitskontext ist eine Reihe von Informationen, die einer Datei oder einem Prozess zugewiesen sind. Es besteht aus SELinux user (SELinux-Benutzer), role (Rolle), type (Typ), level (Stufe) und category (Kategorie). Anhand dieser Informationen werden Entscheidungen zur Zugriffskontrolle getroffen.
- SELinux-Benutzer
Eine in der Richtlinie definierte Identität, die für eine bestimmte Gruppe von Rollen und für einen bestimmten Bereich level autorisiert ist. Jeder Linux-Benutzer ist nur einem SELinux-Benutzer zugeordnet. Ein SELinux-Benutzer kann jedoch mehrere Rollen haben.
SELinux verwendet nicht die Liste der Benutzerkonten, die von Linux in
/etc/passwd
verwaltet werden, sondern eine eigene Datenbank und Zuordnung. Gemäß der Konvention wird der Identitätsname mit dem Suffix_u
versehen, zum Beispieluser_u
.Wenn ein neues Linux-Konto erstellt wird und der SELinux-Benutzer dem Konto nicht zugewiesen ist, wird der Standard-SELinux-Benutzer verwendet. Der Standardwert ist normalerweise
unconfined_u
. Eine Anleitung zum Ändern des Standardwerts finden Sie unter Abschnitt 7.5.2, „Das Kommandosemanage login
“.- role
Definiert eine Reihe von Berechtigungen, die einem Benutzer erteilt werden können. Eine Rolle definiert, auf welche Typen ein Benutzer, der dieser Rolle zugeordnet ist, zugreifen kann. Gemäß der Konvention wird der Rollenname mit dem Suffix
_r
versehen, zum Beispielsystem_r
.- type
Der Typ vermittelt Informationen darüber, wie bestimmte Dateien und Prozesse interagieren können. Ein Prozess besteht aus Dateien mit einem konkreten SELinux-Typ und kann nicht auf Dateien außerhalb dieses Typs zugreifen. Gemäß der Konvention wird der Typname mit dem Suffix
_t
versehen, zum Beispielvar_t
.- level
Ein optionales Attribut, das den Bereich der Abstandsstufen in der mehrstufigen Sicherheit angibt.
- category
Ein optionales Attribut, mit dem Sie Kategorien zu Prozessen, Dateien und Benutzern hinzufügen können. Ein Benutzer kann dann auf Dateien zugreifen, die dieselbe Kategorie haben.
Hier ist ein Beispiel für einen SELinux-Kontext:
allow user_t bin_t:file {read execute gettattr};
Diese Beispielregel besagt, dass der Benutzer mit dem Kontexttyp user_t
(dieser Benutzer wird als Quellobjekt bezeichnet) auf Objekte der Klasse Datei mit dem Kontexttyp bin_t
(dem Ziel) zugreifen darf, indem er die Berechtigungen read
, execute
und getattr
verwendet.
5 Übersicht über die SELinux-Richtlinie #
Die Richtlinie ist die Schlüsselkomponente in SELinux. Die SELinux-Richtlinie definiert Regeln, die festlegen, welche Objekte auf welche Dateien, Verzeichnisse, Ports und Prozesse auf einem System zugreifen können. Dazu wird für alle einen Sicherheitskontext definiert.
Eine SELinux-Richtlinie enthält eine Vielzahl von Regeln. Um es überschaubarer zu machen, werden Richtlinien oft in Module unterteilt. Auf diese Weise kann der Administrator den Schutz für verschiedene Teile des Systems ein- oder ausschalten.
Wenn Sie die Richtlinie für Ihr System kompilieren, haben Sie die Wahl, entweder mit einer modularen Richtlinie oder einer monolithischen Richtlinie zu arbeiten, bei der eine große Richtlinie verwendet wird, um alles auf Ihrem System zu schützen. Es wird dringend empfohlen, eine modulare Richtlinie und keine monolithische Richtlinie zu verwenden. Modulare Richtlinien sind viel einfacher zu verwalten.
SLE Micro wird mit der SELinux-Richtlinie targeted
ausgeliefert.
5.1 Arbeiten mit SELinux-Modulen #
Als Administrator können Sie Module ein- oder ausschalten. Dies kann nützlich sein, wenn Sie nur einen Teil der SELinux-Richtlinie deaktivieren und einen bestimmten Dienst nicht ohne SELinux-Schutz ausführen möchten.
Führen Sie das folgende Kommando aus, um alle verwendeten SELinux-Richtlinienmodule anzuzeigen:
semodule -l
Nachdem Sie den Namen des Moduls erhalten haben, das Sie abschalten möchten, führen Sie das folgende Kommando aus:
>
sudo
semodule -d MODULENAME
Führen Sie zum Einschalten des Richtlinienmoduls das folgende Kommando aus:
>
sudo
semodule -e MODULENAME
5.2 Erstellen von Richtlinien für Container #
SLE Micro wird mit einer Richtlinie ausgeliefert, die Containern standardmäßig den Zugriff auf Dateien außerhalb der Containerdaten nicht erlaubt. Andererseits ist der gesamte Netzwerkzugriff erlaubt. Typischerweise werden Container mit Bind-Mounts erstellt und sollten in der Lage sein, auf andere Verzeichnisse zuzugreifen, wie /home
oder /var
. Möglicherweise möchten Sie den Zugriff auf diese Verzeichnisse zulassen oder im Gegenteil einige Ports auf den Container beschränken, auch wenn SELinux auf Ihrem System verwendet wird. In diesem Fall müssen Sie neue Richtlinienregeln erstellen, die den Zugriff aktivieren oder deaktivieren. SLE Micro stellt zu diesem Zweck das Udica-Tool zur Verfügung.
Im folgenden Verfahren wird beschrieben, wie Sie eine benutzerdefinierte Richtlinie für Ihre Container erstellen:
Stellen Sie sicher, dass sich SELinux im Erzwingungsmodus befindet. Detaillierte Informationen finden Sie in Abschnitt 3.1, „Ändern des SELinux-Modus“.
Starten Sie einen Container mit den folgenden Parametern:
#
podman run -v /home:/home:rw -v /var/:/var/:rw -p 21:21 -it sle15 bashDer Container wird mit der Standardrichtlinie ausgeführt, die keinen Zugriff auf die Bereitstellungspunkte zulässt, aber andere Ports nicht einschränkt.
Sie können den Container verlassen.
Rufen Sie die Container-ID ab:
#
podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e59f9d0f86f2 registry.opensuse.org/devel/bci/tumbleweed/containerfile/opensuse/bci/ruby:latest /bin/bash 8 minutes ago Up 8 seconds ago 0.0.0.0:21->21/tcp zen_ramanujanErstellen Sie eine JSON-Datei, die Udica verwendet, um eine benutzerdefinierte Richtlinie für den Container zu erstellen:
#
podman inspect e59f9d0f86f2 > OUTPUT_JSON_FILEErsetzen Sie beispielsweise OUTPUT_JSON_FILE durch
container.json
.Führen Sie Udica aus, um eine Richtlinie gemäß den Containerparametern zu generieren:
#
udica -j OUTPUT_JSON_FILECUSTOM_CONTAINER_POLICYBeispiel:
#
udica -j container.json custom_policyLaden Sie die Richtlinienmodule gemäß den bereitgestellten Anweisungen, indem Sie Folgendes ausführen:
#
semodule -i custom_policy.cil /usr/share/udica/templates/{base_container.cil,net_container.cil,home_container.cil}Führen Sie einen Container mit dem neuen Richtlinienmodul aus, indem Sie die Option
--security-opt
wie folgt verwenden:#
podman run --security-opt label=type:custom_policy.process -v /home:/home:rw -v /var/:/var/:rw -p 21:21 -it sle15 bash
6 SELinux-Boolesche Werte #
SELinux-Boolesche Werte unterstützen einen flexiblen Richtlinienverwaltungsansatz. Mit booleschen Werten können Sie beispielsweise eine bestimmte Richtlinie auf einem Server deaktivieren, während dieselbe Richtlinie auf einem anderen Server aktiv bleibt. Mit anderen Worten, ein boolescher Wert kann als Schalter für eine Richtlinienregel verstanden werden. Anstatt eine bestimmte Richtlinie zu ändern, können Sie sie ausschalten. Im Richtliniencode werden boolesche Werte als abstimmbar bezeichnet. Da boolesche Werte in der Richtlinie enthalten sind, sind sie verfügbar, sobald eine Richtlinie geladen wird.
Die Änderungen am booleschen Wert können dauerhaft oder vorübergehend sein und bis zum Ende der Sitzung andauern.
SELinux bietet Tools, mit denen Sie Details auflisten und anzeigen oder den Status von booleschen Werten ändern können. Weitere Details hierzu finden Sie in folgenden Abschnitten.
6.1 Arbeiten mit booleschen Werten #
6.1.1 Auflisten von booleschen Werten #
Sie können das Kommando getsebool
oder semanage
verwenden, um aktuell definierte boolesche Werte aufzulisten. Führen Sie das folgende Kommando aus, um alle derzeit definierten booleschen Werte zusammen mit ihrem Status aufzulisten:
#
getsebool -a
abrt_anon_write --> off
abrt_handle_event --> off
abrt_upload_watch_anon_write --> on
...
Wenn Sie weitere Details zu bestimmten Booleschen Werten erhalten möchten, können Sie das Kommando semanage
verwenden:
#
semanage boolean -l
SELinux boolean State Default Description
abrt_anon_write (off , off) Allow abrt to anon write
abrt_handle_event (off , off) Allow abrt to handle event
abrt_upload_watch_anon_write (on , on) Allow abrt to upload watch anon write
Zum Abrufen des Status eines einzelnen booleschen Werts können Sie das folgende Kommando verwenden:
#
getsebool BOOLEAN_NAME
Alternativ können Sie einfach das Kommando grep
für die Ausgabe semanage boolean
verwenden:
#
semanage boolean -l | grep BOOLEAN_NAME
6.1.2 Umschalten zwischen booleschen Werten #
Die Kommandos setsebool
und semanage
können verwendet werden, um den Wert von booleschen Werten umzuschalten. Sie können den booleschen Status dauerhaft oder nur vorübergehend ändern, bis die Sitzung beendet ist. Zum vorübergehenden Ändern eines booleschen Werts führen Sie das folgende Kommando aus:
#
setsebool BOOLEAN_NAMEBOOLEAN_VALUE
wobei BOOLEAN_VALUE entweder on
oder off
ist.
Zum dauerhaften Ändern eines booleschen Werts führen Sie einen der beiden folgenden Kommandos aus:
#
setsebool -P BOOLEAN_NAMEBOOLEAN_VALUE
Alternativ können Sie das Kommando semanage
verwenden:
#
semanage boolean -m --BOOLEAN_VALUEBOOLEAN_NAME
wobei BOOLEAN_VALUE entweder on
oder off
ist.
Ein einzelner boolescher Wert kann mehrere Richtlinienregeln aktivieren oder deaktivieren. Verwenden Sie das sedispol
-Tool, mit dem die Richtliniendatei analysiert werden kann, um anzuzeigen, welche Richtlinienregeln von welchen booleschen Werten aktiviert oder deaktiviert werden:
#
sedispol /etc/selinux/targeted/policy/policy.32
Da die Richtlinienregeln normalerweise umfangreich sind, empfehlen wir, eine Ausgabedatei festzulegen, indem Sie f
auswählen und einen Dateinamen angeben. Nachdem Sie den Dateinamen angegeben haben, drücken Sie 6
Anschließend können Sie die Datei überprüfen.
7 Tools zur Verwaltung von SELinux #
SLE Micro bietet Ihnen Tools zur Verwaltung von SELinux auf Ihrem System. Wenn die unten beschriebenen Tools nicht auf Ihrem System installiert sind, installieren Sie die Tools mit dem folgenden Kommando:
#
transactional-update pkg install policycoreutils-python-utils
Starten Sie das System nach erfolgreicher Installation neu.
7.1 Verwenden der Option Z
#
Wenn SELinux installiert und konfiguriert ist, können Sie -Z
mit den regulären Kommandos wie ls
, id
oder ps
verwenden. Mit dieser Option können Sie den Sicherheitskontext von Dateien oder Prozessen anzeigen. Zum Beispiel mit dem Kommando ls
:
>
ls -Z /etc/shadow
system_u:object_r:shadow_t:s0 /etc/shadow
7.2 Das Kommando chcon
#
Der Kommandoname chcon
steht für change context (Kontext ändern). Das Kommando kann den vollständigen Sicherheitskontext einer Datei in den in der CLI angegebenen Wert ändern oder Teile des Kontexts ändern. Alternativ können Sie eine Datei angeben, die als Referenz dient.
Zum Ändern des vollständigen Sicherheitskontextes einer Datei sieht die Syntax des Kommandos wie folgt aus:
#
chcon SECURITY_CONTEXTFILENAME
wobei
SECURITY_CONTEXT folgendes Format hat: SELinux_USER:ROLE:TYPE:LEVEL:CATEGORY. Der Kontext könnte z. B. lauten: system_u:object_r:httpd_config_t:s0.
FILENAME ist ein Pfad zu der Datei, deren Kontext geändert werden soll.
Führen Sie chcon
wie folgt aus, um einen Sicherheitskontext gemäß einer bereitgestellten Datei festzulegen, die als Referenz dient:
#
chcon --reference=REFERENCE_FILEFILENAME
wobei:
REFERENCE_FILE ein Pfad zu einer Datei ist, die als Referenz verwendet werden soll.
FILENAME ein Pfad zu der Datei ist, deren Kontext geändert werden soll.
Alternativ können Sie nur einen Teil des Sicherheitskontexts ändern. Die allgemeine Syntax für das Kommando chcon
lautet:
#
chcon CONTEXT_OPTIONCONTEXT_PARTFILENAME
Die Optionen und Argumente haben folgende Bedeutung:
Je nach Kontextteil kann CONTEXT_OPTION Folgendes sein:
-u
bzw.--user
gibt an, dass ein SELinux-Benutzerkontext in der bereitgestellten Datei geändert wird:
#
chcon -u system_u logind.conf-r
bzw.--role
Nur der Teil role wird im Kontext der bereitgestellten Datei geändert:
#
chcon -r object_r logind.conf-t
bzw.--type
Nur der Teil type wird im Kontext der bereitgestellten Datei geändert:
#
chcon -t etc_t logind.conf-l
bzw.--range
Nur der Teil range des Sicherheitskontexts wird geändert:
#
chcon -l s0 logind.conf
CONTEXT_PART ist der besondere Wert des einzustellenden Sicherheitskontexts.
FILENAME ist ein Pfad zu der Datei, deren Kontext geändert wird.
chcon
für Symlinks
Wenn Sie den Sicherheitskontext für einen Symlink ändern, wird standardmäßig der Kontext des Link-Ziels geändert, und der Kontext des Symlinks wird nicht geändert. Um zu erzwingen, dass chcon
den Kontext des Symlinks und nicht das Link-Ziel ändert, verwenden Sie die Option --no-dereference
wie unten gezeigt:
#
chcon --no-dereference -u system_u -t etc_t network.conf
Sie können den Kontext aller Dateien in einem Verzeichnis ändern, indem Sie die rekursive Option verwenden:
#
chcon --recursive system_u:object_r:httpd_config_t:s0 conf.d
7.3 Kommandos getenforce
und setenforce
#
Das Kommando getenforce
gibt den aktuellen SELinux-Modus zurück: Enforcing
, Permissive
oder Disabled
.
#
getenforce
Permissive
Das Kommando setenforce
ändert den SELinux-Modus vorübergehend in enforcing oder permissive. Sie können dieses Kommando nicht verwenden, um SELinux zu deaktivieren. Denken Sie daran, dass die Änderung nur bis zum nächsten Neustart bestehen bleibt. Wenn Sie den Status dauerhaft ändern möchten, folgen Sie der Beschreibung in Abschnitt 3.1, „Ändern des SELinux-Modus“.
#
setenforce MODE_ID
MODE_ID ist dabei 0 für den Modus permissive
oder 1 für den Modus enforced
.
7.4 Das Skript fixfiles
#
Mit dem Skript können Sie die folgende Aufgabe mit dem Sicherheitskontext ausführen:
Überprüfen, ob der Kontext korrekt ist
Alle falschen Dateikontextbezeichnungen ändern
Das System neu benennen, wenn Sie eine neue Richtlinie hinzugefügt haben
Die Syntax des Skripts lautet wie folgt:
#
fixfiles [OPTIONS] ARGUMENT
mit folgenden Bedeutungen
OPTIONS kann Folgendes sein:
-
-l
LOGFILE speichert die Ausgabe in der bereitgestellten Datei
-
-o
OUTPUT_FILE speichert in der bereitgestellten Ausgabedatei die Namen aller Dateien, deren Dateikontext vom Standardkontext abweicht.
-
-F
erzwingt ein Zurücksetzen des Kontexts.
-
ARGUMENT kann einen der folgenden Werte haben:
-
check
Zeigt den vorherigen und aktuellen Dateikontext für eine falsche Bezeichnung an, ohne Änderungen vorzunehmen
-
relabel
Bezeichnet falsche Dateikontexte gemäß der aktuell geladenen Richtlinie neu
-
restore
Stellt falsche Dateikontexte auf die Standardwerte zurück
-
verify
Listet alle Dateien mit falschen Dateikontextbezeichnungen auf, ohne Änderungen vorzunehmen
-
7.5 Das Kommando semanage
#
Mit dem Kommando semanage
können Teile der Richtlinie konfiguriert werden, ohne dass die Richtlinie aus den Quellen neu kompiliert werden muss. Mit dem Kommando können Sie die folgenden Aufgaben durchführen:
Verwalten von booleschen Werten mithilfe des Arguments
boolean
. Ausführliche Informationen zu booleschen Werten finden Sie in Abschnitt 6.1, „Arbeiten mit booleschen Werten“.Anpassen des Kontexts von Dateien mit dem Argument
fcontext
Verwalten von Benutzerzuordnungen mit dem Argument
login
Verwalten von SELinux-Benutzern mit dem Argument
user
Verwalten der SELinux-Richtlinienmodule mit dem Argument
module
Die allgemeine Kommandosyntax sieht wie folgt aus:
#
semanage ARGUMENTOPTIONS [OBJECT_NAME]
wobei:
ARGUMENT steht für eines der folgenden steht:
login
,user
,fcontext
,boolean
,module
.OPTIONS hängt vom bereitgestellten ARGUMENT ab. Allgemeine Optionen werden in Allgemeine Optionen beschrieben.
OBJECT_NAME kann je nach angegebenem ARGUMENT ein Anmeldename, Modulname, Dateiname oder SELinux-Benutzer sein.
-a
,--add
fügt ein bereitgestelltes Objekt hinzu
-h
,--help
druckt die Kommandohilfe
--extract
zeigt Kommandos an, die zum Ändern des Systems verwendet wurden (boolesche Werte, Dateikontext usw.).
-l
,--list
listet alle Objekte auf.
-m
,--modify
ändert das bereitgestellte Objekt
-n
,--noheading
ändert die Ausgabe des Auflistungsvorgangs durch Weglassen von Überschriften.
-s
,--seuser
gibt den SELinux-Benutzer an.
Weitere Optionen sind spezifisch für bestimmte semanage
-Kommandos und werden in den entsprechenden Abschnitten beschrieben.
7.5.1 Das Kommando semanage fcontext
#
Mit dem Kommando semanage fcontext
können Sie die folgenden Aufgaben ausführen:
Dateikontextdefinitionen abfragen
Kontexte zu Dateien hinzufügen
eigene Regeln hinzufügen
Änderungen, die mit dem Kommando semanage
fcontext
am Dateikontext vorgenommen werden, erfordern keine Änderungen oder Neukompilierung der Richtlinie.
Zusätzlich zu den in Allgemeine Optionen beschriebenen allgemeinen Optionen verwendet das Kommando semanage
fcontext
die folgenden Optionen:
-e
,--equal
Mit dieser Option können Sie den Kontext des angegebenen Pfadkontexts verwenden, um Dateien in einem anderen Verzeichnis (dem angegebenen Zielpfad) zu bezeichnen. Sie möchten beispielsweise einem alternativen Home-Verzeichnis
/export/home
den gleichen Kontext zuweisen, den/home
hat. Wenn Sie diese Option verwenden, müssen Sie den Quellpfad und den Zielpfad angeben:#
semanage fcontext -a -e /home /export/home-f
,--ftype
zum Angeben eines Dateityps. Verwenden Sie einen der folgenden Werte:
a
– alle Dateien, was auch der Standardwert istb
– ein Blockgerätc
– ein Zeichengerätd
– ein Verzeichnisf
– reguläre Dateienl
– ein Symlinkp
– eine benannte Leitungs
– ein Socket
7.5.2 Das Kommando semanage login
#
Mit dem semanage login
können Sie die folgenden Aufgaben ausführen:
Zuordnung von Linux-Benutzern zu einem bestimmten SELinux-Benutzer. Wenn Sie beispielsweise den Linux-Benutzer tux unter
sysadm_u
zuordnen möchten, führen Sie das folgende Kommando aus:#
semanage login -a -s sysadm_u tux
Zuordnung einer Gruppe von Linux-Benutzern zu einem bestimmten SELinux-Benutzer. Wenn Sie beispielsweise Benutzer der Gruppe Autoren unter
user_u
zuordnen möchten, führen Sie das folgende Kommando aus:#
semanage login -a -s user_u %writers
Die Gruppe wird dann in der Ausgabe von
semanage login -l
aufgeführt, wobei das Zeichen % vorangestellt ist.Beachten Sie, dass die Benutzergruppe primär sein sollte, da die Zuordnung von SELinux-Benutzern zu ergänzenden Gruppen zu inkompatiblen Zuordnungen führen kann.
#
semanage login -m -s staff_u %writers
Zuordnung von Linux-Benutzern zu einem bestimmten SELinux MLS/MCS-Sicherheitsbereich.
Ändern der bereits erstellten Zuordnung. Ersetzen Sie dazu einfach die Option
-a
durch-m
in den vorherigen Kommandos.Festlegen des Standard-SELinux-Benutzers für neue Linux-Benutzer. Der übliche Standard-SELinux-Benutzer ist
unconfined_u
. Führen Sie zum Ändern des Werts instaff_u
das folgende Kommando aus:#
semanage login -m -s staff_u __default__
7.5.3 Das Kommando semanage boolean
#
Das Kommando semanage boolean
wird verwendet, um boolesche Werte in der SELinux-Richtlinie zu steuern.
Die Zusammenfassung des Kommandos sieht wie folgt aus:
semanage boolean [-h] [-n] [ --extract | --deleteall | --list [-C] | --modify ( --on | --off | -1 | -0 ) boolean ]
Zusätzlich zu den allgemeinen Optionen können Sie die folgenden Optionen verwenden, die für das Kommando semanage boolean
spezifisch sind:
- --list -C
zum Anzeigen einer Liste der lokalen Änderungen an booleschen Werten.
- -m --on | -1
zum Einschalten des bereitgestellten booleschen Werts.
- -m --off | -0
zum Ausschalten des bereitgestellten booleschen Werts.
- -D, --deleteall
zum Löschen aller lokalen Änderungen an booleschen Werten.
Die häufigste Verwendung des Kommandos ist das Ein- oder Ausschalten eines bestimmten booleschen Werts. Führen Sie zum Beispiel zum Einschalten des Booleschen Werts authlogin_yubikey
das folgende Kommando aus:
#
semanage boolean -m on authlogin_yubikey
7.5.4 Das Kommando semanage user
#
Das Kommando semanage user
steuert die Zuordnung zwischen dem SELinux-Benutzer und den Rollen und MLS/MCS-Ebenen.
Zusätzlich zu den in Allgemeine Optionen beschriebenen allgemeinen Optionen verwendet das Kommando semanage
use
die folgenden Optionen:
- -R [ROLES], --roles [ROLES]
Eine Liste der SELinux-Rollen. Sie können mehrere Rollen in doppelte Anführungszeichen einschließen und durch Leerzeichen trennen, oder Sie können
-R
mehrmals verwenden.
Mit diesem Kommando können Sie die folgenden Aufgaben ausführen:
Auflisten der Zuordnung von SELinux-Benutzern zu Rollen durch Ausführen von:
#
semanage user -l
Ändern der Rollen, die dem
user_u
-SELinux-Benutzer zugewiesen sind:#
semanage user -m -R "system_r unconfined_r user_r"
Zuweisen zu
admin_u
die Rollestaff_r
und eine Kategories0
:#
semanage user -a -R "staff_r -r s0 admin_u
Erstellen eines neuen SELinux-Benutzers, zum Beispiel
admin_u
mit der Rollestaff_r
. Sie müssen mit-P
auch das Bezeichnungspräfix für diesen Benutzer definieren:#
semanage user -a -R "staff_r" -P admin admin_u
7.5.5 Das Kommando semanage module
#
Das Kommando semanage module
kann SELinux-Richtlinienmodule installieren, entfernen, deaktivieren oder aktivieren.
Zusätzlich zu den in Allgemeine Optionen beschriebenen allgemeinen Optionen verwendet das Kommando semanage
fcontext
die folgenden Optionen:
-d
,--disable
Zum Deaktivieren des mitgelieferten SELinux-Richtlinienmoduls:
#
semanage module --disable MODULE_NAME
-e
,--enable
Zum Aktivieren des mitgelieferten SELinux-Richtlinienmoduls:
#
semanage module --enable MODULE_NAME
7.6 Das Kommando sestatus
#
Mit dem Kommando sestatus
wird der Status eines Systems abgerufen, auf dem SELinux ausgeführt wird.
Die generische Syntax für das Kommando lautet:
sestatus [OPTION]
Wenn das Kommando ohne Optionen und Argumente ausgeführt wird, gibt es die folgenden Informationen aus:
#
sestatus
SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: requested (insecure) Max kernel policy version: 33
Das Kommando kann die folgenden Optionen annehmen:
- -b
Zeigt den Status von booleschen Werten auf dem System an.
- -v
Zeigt den Sicherheitskontext der in der Datei
/etc/sestatus.conf
aufgeführten Dateien und Prozesse an.
8 Rechtliche Hinweise #
Copyright © 2006–2025 SUSE LLC und Mitwirkende. Alle Rechte vorbehalten.
Es wird die Genehmigung erteilt, dieses Dokument unter den Bedingungen der GNU Free Documentation License, Version 1.2 oder (optional) Version 1.3 zu vervielfältigen, zu verbreiten und/oder zu verändern; die unveränderlichen Abschnitte hierbei sind der Urheberrechtshinweis und die Lizenzbedingungen. Eine Kopie dieser Lizenz (Version 1.2) finden Sie im Abschnitt „GNU Free Documentation License“.
Die SUSE Marken finden Sie im https://www.suse.com/company/legal/. Alle anderen Marken von Drittanbietern sind Besitz ihrer jeweiligen Eigentümer. Markensymbole (®, ™ usw.) kennzeichnen Marken von SUSE und ihren Tochtergesellschaften. Sternchen (*) kennzeichnen Marken von Drittanbietern.
Alle Informationen in diesem Buch wurden mit größter Sorgfalt zusammengestellt. Auch hierdurch kann jedoch keine hundertprozentige Richtigkeit gewährleistet werden. Weder SUSE LLC noch ihre Tochtergesellschaften noch die Autoren noch die Übersetzer können für mögliche Fehler und deren Folgen haftbar gemacht werden.