Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / SELinux

SELinux

Veröffentlicht: 25.02.2025
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.

Anmerkung
Anmerkung: Umbenennen Ihres Systems nach dem Wechsel aus dem Modus 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:

  1. Setzen Sie den Sicherheitskontext zurück:

    > sudo restorecon -R /
  2. Wechseln Sie in den Erzwingungsmodus, indem Sie SELINUX=enforcing als /etc/selinux/config festlegen.

  3. Booten Sie das System neu und melden Sie sich erneut an.

  4. Führen Sie das Kommando sestatus -v aus. Es sollte Ihnen eine Ausgabe ähnlich der folgenden geben:

    > sudosestatus -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:s0
  5. Wenn 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-Kontextfelder
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 Beispiel user_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 Kommando semanage 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 Beispiel system_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 Beispiel var_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:

  1. Stellen Sie sicher, dass sich SELinux im Erzwingungsmodus befindet. Detaillierte Informationen finden Sie in Abschnitt 3.1, „Ändern des SELinux-Modus“.

  2. Starten Sie einen Container mit den folgenden Parametern:

    # podman run -v /home:/home:rw -v /var/:/var/:rw -p 21:21 -it sle15 bash

    Der Container wird mit der Standardrichtlinie ausgeführt, die keinen Zugriff auf die Bereitstellungspunkte zulässt, aber andere Ports nicht einschränkt.

  3. Sie können den Container verlassen.

  4. 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_ramanujan
  5. Erstellen Sie eine JSON-Datei, die Udica verwendet, um eine benutzerdefinierte Richtlinie für den Container zu erstellen:

    # podman inspect e59f9d0f86f2 > OUTPUT_JSON_FILE

    Ersetzen Sie beispielsweise OUTPUT_JSON_FILE durch container.json.

  6. Führen Sie Udica aus, um eine Richtlinie gemäß den Containerparametern zu generieren:

    # udica -j OUTPUT_JSON_FILECUSTOM_CONTAINER_POLICY

    Beispiel:

    # udica -j container.json custom_policy
  7. Laden 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}
  8. 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.

Anmerkung
Anmerkung: Verwendung von 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.

Allgemeine Optionen
-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 ist

  • b – ein Blockgerät

  • c – ein Zeichengerät

  • d – ein Verzeichnis

  • f – reguläre Dateien

  • l – ein Symlink

  • p – eine benannte Leitung

  • s – 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 in staff_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 Rolle staff_r und eine Kategorie s0:

    # semanage user -a -R "staff_r -r s0 admin_u
  • Erstellen eines neuen SELinux-Benutzers, zum Beispiel admin_u mit der Rolle staff_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.