Zum Inhalt springen

Linux/SELinux/04/13 Multi-Level Security: Unterschied zwischen den Versionen

Aus Foxwiki
K Textersetzung - „SELinux/DOC“ durch „SELinux“
K Textersetzung - „ “ durch „ “
 
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Multi-Level Security (MLS) ===
{{navigation|Linux/SELinux/04/12 Richtlinienmodule|Linux/SELinux/04/14 Dateinamenübergang}}
'''Linux/SELinux/04/13 Multi-Level Security''' - MLS
 
== Beschreibung ==
; Multi-Level Security (MLS)
Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt
Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt
* Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
* Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
Zeile 5: Zeile 9:
* Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt
* Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt


Abbildung „Sicherheitsfreigabestufen“ zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen
Abbildung „Sicherheitsfreigabestufen“
* Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen
* zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen
 
Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen
* Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen
* Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen


; Abbildung Sicherheitsfreigabestufen
; Abbildung Sicherheitsfreigabestufen


Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“ zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft, und verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen
Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“  
* Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften
* zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft
* verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen
 
Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften
„no read up“ und „no write down“
„no read up“ und „no write down“


; Abbildung Zulässige Datenflüsse unter Verwendung von MLS
; Abbildung zulässige Datenflüsse unter Verwendung von MLS


==== MLS und Systemberechtigungen ====
=== MLS und Systemberechtigungen ===
MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert
MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert
* Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
* Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
Zeile 26: Zeile 35:
* Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen
* Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen


==== Aktivieren von MLS in SELinux ====
=== Aktivieren von MLS in SELinux ===
; Hinweis
; Hinweis
 
: Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft
Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft


Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren
Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren
Zeile 35: Zeile 43:
; Aktivieren der SELinux-MLS-Richtlinie
; Aktivieren der SELinux-MLS-Richtlinie
# Installieren Sie das Paket selinux-policy-mls
# Installieren Sie das Paket selinux-policy-mls
sudo yum install selinux-policy-mls
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo yum install selinux-policy-mls
</syntaxhighlight>
 
# Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
# Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
* Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
* Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
* Um dies zu verhindern, konfigurieren Sie [[SELINUX=permissive]] in der Datei [[/etc/selinux/config]]
* Um dies zu verhindern, konfigurieren Sie ''SELINUX=permissive'' in der Datei ''/etc/selinux/config''
* Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie [[SELINUXTYPE=mls]] konfigurieren
* Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie ''SELINUXTYPE=mls'' konfigurieren
* Ihre Konfigurationsdatei sollte wie folgt aussehen
* Ihre Konfigurationsdatei sollte wie folgt aussehen
# Diese Datei steuert den Status von SELinux auf dem System
<syntaxhighlight lang="bash" highlight="" copy line>
# SELINUX= kann einen dieser drei Werte annehmen
# Diese Datei steuert den Status von SELinux auf dem System
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# SELINUX= kann einen dieser drei Werte annehmen
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# disabled – Es wird keine SELinux-Richtlinie geladen
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=permissive
SELINUX=permissive
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt,
# targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=mls
SELINUXTYPE=mls
 
</syntaxhighlight>
# Stellen Sie sicher, dass SELinux im permissiven Modus läuft
sudo setenforce 0


getenforce
# Stellen Sie sicher, dass SELinux im permissiven Modus läuft
Permissive
<syntaxhighlight lang="bash" highlight="" copy line>
sudo setenforce 0
getenforce
Permissive
</syntaxhighlight>


# Verwenden Sie das Skript [[fixfiles]], um die Datei [[/.autorelabel]] mit der Option [[-F]] zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
# Verwenden Sie das Skript ''fixfiles'', um die Datei ''/.autorelabel'' mit der Option ''-F'' zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
sudo fixfiles -F onboot
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo fixfiles -F onboot
</syntaxhighlight>


# Starten Sie Ihr System neu
# Starten Sie Ihr System neu
* Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
* Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
* Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
* Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
<syntaxhighlight lang="bash" highlight="" copy line>
*** Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
*** Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
*** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
*** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
*** Größe des Dateisystems und der Geschwindigkeit der Festplatten
*** Größe des Dateisystems und der Geschwindigkeit der Festplatten
***********
***********
</syntaxhighlight>


Jedes [[*]] (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden
Jedes ''*'' (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden
* Im obigen Beispiel stehen elf [[*]]-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
* Im obigen Beispiel stehen elf ''*''-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
* Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
* Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
* Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
* Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
* Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
* Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
# Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
# Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
* Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
* Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
* Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
* Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
* Siehe Kapitel&nbsp;[[Fehlerbehebung]] für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat
* Siehe Kapitel ''Fehlerbehebung'' für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo grep "SELinux is preventing" /var/log/messages
</syntaxhighlight>


sudo grep „SELinux is preventing“ /var/log/messages
# Wenn die Datei ''/var/log/messages'' keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie ''SELINUX=enforcing'' in der Datei ''/etc/selinux/config''
<syntaxhighlight lang="bash" highlight="" copy line>
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing - Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive - SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled - Es wird keine SELinux-Richtlinie geladen
SELINUX=enforcing
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted - Zielgerichtete Prozesse werden geschützt,
# mls - Multi-Level-Security-Schutz
SELINUXTYPE=mls
</syntaxhighlight>


# Wenn die Datei [[/var/log/messages]] keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie [[SELINUX=enforcing]] in der Datei [[/etc/selinux/config]]
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing - Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive - SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled - Es wird keine SELinux-Richtlinie geladen
SELINUX=enforcing
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted - Zielgerichtete Prozesse werden geschützt,
# mls - Multi-Level-Security-Schutz
SELINUXTYPE=mls
# Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
# Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
getenforce
<syntaxhighlight lang="bash" highlight="" copy line>
Durchsetzung
getenforce
Enforcing
</syntaxhighlight>


und die MLS-Richtlinie ist aktiviert
und die MLS-Richtlinie ist aktiviert
sudo sestatus |grep mls
<syntaxhighlight lang="bash" highlight="" copy line>
Richtlinie aus der Konfigurationsdatei
sudo sestatus | grep mls
mls
Policy from config file:    mls
</syntaxhighlight>


==== Einen Benutzer mit einem bestimmten MLS-Bereich erstellen ====
=== Einen Benutzer mit einem bestimmten MLS-Bereich erstellen ===
Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen
Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen
; Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
; Einen Benutzer mit einem bestimmten MLS-Bereich erstellen
# Fügen Sie einen neuen Linux-Benutzer mit dem [[useradd ]] und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall [[staff_u]])
1.&nbsp;Fügen Sie einen neuen Linux-Benutzer mit dem Befehl ''useradd'' hinzu und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall ''staff_u'')
sudo useradd -Z staff_u john
<syntaxhighlight lang="bash" highlight="1" copy line>
# Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu
sudo useradd -Z staff_u john
Eingabeaufforderung sudo passwd john
</syntaxhighlight>
# Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen
 
2.&nbsp;Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo passwd john
</syntaxhighlight>
 
3.&nbsp;Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen
* Die Ausgabe sollte wie folgt aussehen
* Die Ausgabe sollte wie folgt aussehen
sudo semanage login -l
<syntaxhighlight lang="bash" highlight="" copy line>
Anmeldename SELinux-Benutzer MLS/ MCS-Bereich Dienst
sudo semanage login -l
Login Name      SELinux User    MLS/MCS Range    Service
 
__default__    user_u        s0-s0        *
john        staff_u      s0-s15:c0.c1023  *
root        root        s0-s15:c0.c1023  *
staff        staff_u      s0-s15:c0.c1023  *
sysadm        staff_u      s0-s15:c0.c1023  *
system_u      system_u      s0-s15:c0.c1023  *
</syntaxhighlight>


__default__ user_u s0-s0 *
4.&nbsp;Definieren Sie einen spezifischen Bereich für den Benutzer ''john''
john staff_u s0-s15:c0.c1023 *
<syntaxhighlight lang="bash" highlight="1" copy line>
root root s0-s15:c0.c1023 *
sudo semanage login --modify --range s2:c100 john
staff staff_u s0-s15:c0.c1023 *
</syntaxhighlight>
sysadm staff_u s0-s15:c0.c1023 *
system_u system_u s0-s15:c0.c1023 *
# Definieren Sie einen spezifischen Bereich für den Benutzer [[john]]
sudo semanage login --modify --range s2:c100 john
# Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an
* Beachten Sie, dass für den Benutzer [[john]] nun ein spezifischer MLS-Bereich definiert ist
sudo semanage login -l
Anmeldename SELinux-Benutzer MLS/MCS-Bereich Dienst


__default__ user_u s0-s0 *
5.&nbsp;Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an
* Beachten Sie, dass für den Benutzer ''john'' nun ein spezifischer MLS-Bereich definiert ist
john staff_u s2:c100 *
<syntaxhighlight lang="bash" highlight="" copy line>
root root s0-s15:c0.c1023 *
sudo semanage login -l
staff staff_u s0-s15:c0.c1023 *
Login Name      SELinux User    MLS/MCS Range    Service
sysadm staff_u s0-s15:c0.c1023 *
system_u system_u s0-s15:c0.c1023 *


# Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein
__default__    user_u        s0-s0        *
sudo chcon -R -l s2:c100 /home/john
john        staff_u      s2:c100      *
root        root        s0-s15:c0.c1023  *
staff        staff_u      s0-s15:c0.c1023  *
sysadm        staff_u      s0-s15:c0.c1023  *
system_u      system_u      s0-s15:c0.c1023  *
</syntaxhighlight>


==== Einrichten von polyinstanziierten Verzeichnissen ====
6.&nbsp;Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein
Die Verzeichnisse [[/tmp]] und [[/var/tmp/]] werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt
<syntaxhighlight lang="bash" highlight="1" copy line>
sudo chcon -R -l s2:c100 /home/john
</syntaxhighlight>
 
=== Einrichten von polyinstanziierten Verzeichnissen ===
Die Verzeichnisse ''/tmp'' und ''/var/tmp/'' werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt
* Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
* Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
* SELinux bietet eine Lösung in Form von ‚‘ polyinstanziierten'' Verzeichnissen
* SELinux bietet eine Lösung in Form von ''polyinstanziierten'' Verzeichnissen
* Dies bedeutet im Effekt, dass sowohl [[/tmp]] als auch [[/var/tmp/]] instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
* Dies bedeutet im Effekt, dass sowohl ''/tmp'' als auch ''/var/tmp/'' instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
* Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse [[/tmp]] und [[/var/tmp/]] jedes Benutzers automatisch unter [[/tmp-inst]] und [[/var/tmp/tmp-inst]] eingebunden
* Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse ''/tmp'' und ''/var/tmp/'' jedes Benutzers automatisch unter ''/tmp-inst'' und ''/var/tmp/tmp-inst'' eingebunden


Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren
Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren
; Aktivieren der Polyinstanziierung von Verzeichnissen
; Aktivieren der Polyinstanziierung von Verzeichnissen
# Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei [[/etc/security/namespace.conf]], um die Instanziierung von [[/tmp]], [[/var/tmp/]] und den Home-Verzeichnissen der Benutzer zu aktivieren
1.&nbsp;Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei ''/etc/security/namespace.conf'', um die Instanziierung von ''/tmp'', ''/var/tmp/'' und den Home-Verzeichnissen der Benutzer zu aktivieren
tail -n 3 /etc/security/namespace.conf
<syntaxhighlight lang="bash" highlight="" copy line>
/tmp /tmp-inst/ level root,adm
tail -n 3 /etc/security/namespace.conf
/var/tmp /var/tmp/tmp-inst/ level root, adm
/tmp /tmp-inst/ level root,adm
$HOME $HOME/$USER.inst/ level
/var/tmp /var/tmp/tmp-inst/ level root,adm
# Stellen Sie sicher, dass in der Datei [[/etc/pam.d/login]] das Modul [[pam_namespace.so]] für die Sitzung konfiguriert ist
$HOME $HOME/$USER.inst/ level
grep namespace /etc/pam.d/login
</syntaxhighlight>
session required pam_namespace.so
 
# Starten Sie Ihr System neu
2.&nbsp;Stellen Sie sicher, dass in der Datei ''/etc/pam.d/login'' das Modul ''pam_namespace.so'' für die Sitzung konfiguriert ist
<syntaxhighlight lang="bash" highlight="" copy line>
grep namespace /etc/pam.d/login
session required pam_namespace.so
</syntaxhighlight>
 
3.&nbsp;Starten Sie Ihr System neu
 
 
<!--
== Siehe auch ==
# [https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html-single/selinux_users_and_administrators_guide/index#mls Abschnitt 4.13, „Multi-Level Security (MLS)“]
-->
 
----
 
{{navigation|Linux/SELinux/04/12 Richtlinienmodule|Linux/SELinux/04/14 Dateinamenübergang}}


[[Kategorie:Linux/SELinux/04]]
[[Kategorie:Linux/SELinux/04]]

Aktuelle Version vom 14. Juni 2026, 00:47 Uhr

Linux/SELinux/04/13 Multi-Level Security - MLS

Beschreibung

Multi-Level Security (MLS)

Die Multi-Level-Security-Technologie bezieht sich auf ein Sicherheitsschema, das das Bell-La-Padula-Mandatory-Access-Modell durchsetzt

  • Unter MLS werden Benutzer und Prozesse als „Subjekte“ bezeichnet, während Dateien, Geräte und andere passive Komponenten des Systems als „Objekte“ bezeichnet werden
  • Sowohl Subjekte als auch Objekte sind mit einer Sicherheitsstufe gekennzeichnet, die die Sicherheitsfreigabe eines Subjekts oder die Klassifizierung eines Objekts angibt
  • Jede Sicherheitsstufe setzt sich aus einer „Vertraulichkeitsstufe“ und einer „Kategorie“ zusammen; so wird beispielsweise ein interner Veröffentlichungsplan unter der Kategorie „interne Dokumente“ mit der Vertraulichkeitsstufe „vertraulich“ abgelegt

Abbildung „Sicherheitsfreigabestufen“

  • zeigt die ursprünglich von der US-Verteidigungsgemeinschaft entworfenen Sicherheitsfreigabestufen

Bezogen auf unser obiges Beispiel des internen Zeitplans dürfen nur Benutzer, die die Sicherheitsfreigabe „vertraulich“ erhalten haben, Dokumente der Kategorie „vertraulich“ einsehen

  • Benutzer, die lediglich über die Sicherheitsfreigabe „vertraulich“ verfügen, dürfen jedoch keine Dokumente einsehen, die eine höhere Sicherheitsstufe erfordern; sie haben nur Lesezugriff auf Dokumente mit niedrigeren Sicherheitsstufen und Schreibzugriff auf Dokumente mit höheren Sicherheitsstufen
Abbildung Sicherheitsfreigabestufen

Abbildung „Zulässige Datenflüsse unter Verwendung von MLS“

  • zeigt alle zulässigen Datenflüsse zwischen einem Subjekt, das unter der Sicherheitsstufe „Secret“ läuft
  • verschiedenen Objekten mit unterschiedlichen Sicherheitsstufen

Vereinfacht ausgedrückt erzwingt das Bell-LaPadula-Modell zwei Eigenschaften „no read up“ und „no write down“

Abbildung zulässige Datenflüsse unter Verwendung von MLS

MLS und Systemberechtigungen

MLS-Zugriffsregeln werden immer mit herkömmlichen Zugriffsberechtigungen (Dateiberechtigungen) kombiniert

  • Wenn beispielsweise ein Benutzer mit der Sicherheitsstufe „Secret“ die diskretionäre Zugriffskontrolle (DAC) nutzt, um anderen Benutzern den Zugriff auf eine Datei zu verweigern, wird dadurch auch der Zugriff von Benutzern mit der Sicherheitsstufe „Top Secret“ blockiert
  • Es ist wichtig zu beachten, dass die MLS-Richtlinien von SELinux „nach“ den DAC-Regeln überprüft werden
  • Eine höhere Sicherheitsfreigabe gewährt nicht automatisch die Berechtigung, willkürlich im Dateisystem zu stöbern

Benutzer mit Freigaben der höchsten Stufe erhalten in mehrstufigen Systemen nicht automatisch Administratorrechte

  • Sie haben zwar möglicherweise Zugriff auf alle Informationen auf dem Computer, dies ist jedoch nicht mit Administratorrechten gleichzusetzen

Aktivieren von MLS in SELinux

Hinweis
Es wird nicht empfohlen, die MLS-Richtlinie auf einem System zu verwenden, auf dem das X Window System läuft

Befolgen Sie diese Schritte, um die SELinux-MLS-Richtlinie auf Ihrem System zu aktivieren

Aktivieren der SELinux-MLS-Richtlinie
  1. Installieren Sie das Paket selinux-policy-mls
sudo yum install selinux-policy-mls
  1. Bevor die MLS-Richtlinie aktiviert wird, muss jede Datei im Dateisystem mit einem MLS-Label neu gekennzeichnet werden
  • Wenn das Dateisystem neu gekennzeichnet wird, kann eingeschränkten Domänen der Zugriff verweigert werden, was dazu führen kann, dass Ihr System nicht korrekt bootet
  • Um dies zu verhindern, konfigurieren Sie SELINUX=permissive in der Datei /etc/selinux/config
  • Aktivieren Sie außerdem die MLS-Richtlinie, indem Sie SELINUXTYPE=mls konfigurieren
  • Ihre Konfigurationsdatei sollte wie folgt aussehen
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing – Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive – SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled – Es wird keine SELinux-Richtlinie geladen
SELINUX=permissive
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted – Zielgerichtete Prozesse werden geschützt,
# mls – Multi-Level-Security-Schutz
SELINUXTYPE=mls
  1. Stellen Sie sicher, dass SELinux im permissiven Modus läuft
sudo setenforce 0
getenforce
Permissive
  1. Verwenden Sie das Skript fixfiles, um die Datei /.autorelabel mit der Option -F zu erstellen, damit Dateien beim nächsten Neustart neu gekennzeichnet werden
sudo fixfiles -F onboot
  1. Starten Sie Ihr System neu
  • Beim nächsten Start werden alle Dateisysteme gemäß der MLS-Richtlinie neu gekennzeichnet
  • Der Kennzeichnungsprozess kennzeichnet alle Dateien mit einem geeigneten SELinux-Kontext
*** Warnung -- Eine Neukennzeichnung gemäß der SELinux-MLS-Richtlinie ist erforderlich
*** Die Neukennzeichnung kann sehr lange dauern, abhängig von der
*** Größe des Dateisystems und der Geschwindigkeit der Festplatten
***********

Jedes * (Sternchen) in der untersten Zeile steht für 1000 Dateien, die gekennzeichnet wurden

  • Im obigen Beispiel stehen elf *-Zeichen für 11.000 Dateien, die gekennzeichnet wurden
  • Die Zeit, die zum Kennzeichnen aller Dateien benötigt wird, hängt von der Anzahl der Dateien auf dem System und der Geschwindigkeit der Festplatten ab
  • Auf modernen Systemen kann dieser Vorgang nur 10 Minuten dauern
  • Sobald der Kennzeichnungsprozess abgeschlossen ist, startet das System automatisch neu
  1. Im permissiven Modus wird die SELinux-Richtlinie nicht durchgesetzt, aber Ablehnungen werden weiterhin protokolliert für Aktionen, die im Durchsetzungsmodus abgelehnt worden wären
  • Bevor Sie in den Durchsetzungsmodus wechseln, geben Sie als root den folgenden Befehl ein, um zu bestätigen, dass SELinux beim letzten Systemstart keine Aktionen abgelehnt hat
  • Wenn SELinux beim letzten Systemstart keine Aktionen abgelehnt hat, gibt dieser Befehl keine Ausgabe zurück
  • Siehe Kapitel Fehlerbehebung für Informationen zur Fehlerbehebung, falls SELinux während des Bootvorgangs den Zugriff verweigert hat
sudo grep "SELinux is preventing" /var/log/messages
  1. Wenn die Datei /var/log/messages keine Verweigerungsmeldungen enthält oder Sie alle bestehenden Verweigerungen behoben haben, konfigurieren Sie SELINUX=enforcing in der Datei /etc/selinux/config
# Diese Datei steuert den Status von SELinux auf dem System
# SELINUX= kann einen dieser drei Werte annehmen
# enforcing - Die SELinux-Sicherheitsrichtlinie wird durchgesetzt
# permissive - SELinux gibt Warnungen aus, anstatt die Richtlinie durchzusetzen
# disabled - Es wird keine SELinux-Richtlinie geladen
SELINUX=enforcing
# SELINUXTYPE= kann einen dieser beiden Werte annehmen
# targeted - Zielgerichtete Prozesse werden geschützt,
# mls - Multi-Level-Security-Schutz
SELINUXTYPE=mls
  1. Starten Sie Ihr System neu und stellen Sie sicher, dass SELinux im Durchsetzungsmodus läuft
getenforce
Enforcing

und die MLS-Richtlinie ist aktiviert

sudo sestatus | grep mls
Policy from config file:    mls

Einen Benutzer mit einem bestimmten MLS-Bereich erstellen

Befolgen Sie diese Schritte, um einen neuen Linux-Benutzer mit einem bestimmten MLS-Bereich zu erstellen

Einen Benutzer mit einem bestimmten MLS-Bereich erstellen

1. Fügen Sie einen neuen Linux-Benutzer mit dem Befehl useradd hinzu und ordnen Sie den neuen Linux-Benutzer einem bestehenden SELinux-Benutzer zu (in diesem Fall staff_u)

sudo useradd -Z staff_u john

2. Weisen Sie dem neu erstellten Linux-Benutzer ein Passwort zu

sudo passwd john

3. Geben Sie den folgenden Befehl als root ein, um die Zuordnung zwischen SELinux- und Linux-Benutzern anzuzeigen

  • Die Ausgabe sollte wie folgt aussehen
sudo semanage login -l
Login Name      SELinux User     MLS/MCS Range    Service

__default__     user_u        s0-s0        *
john         staff_u       s0-s15:c0.c1023   *
root         root         s0-s15:c0.c1023   *
staff        staff_u       s0-s15:c0.c1023   *
sysadm        staff_u       s0-s15:c0.c1023   *
system_u       system_u       s0-s15:c0.c1023   *

4. Definieren Sie einen spezifischen Bereich für den Benutzer john

sudo semanage login --modify --range s2:c100 john

5. Zeigen Sie die Zuordnung zwischen SELinux- und Linux-Benutzern erneut an

  • Beachten Sie, dass für den Benutzer john nun ein spezifischer MLS-Bereich definiert ist
sudo semanage login -l
Login Name      SELinux User     MLS/MCS Range    Service

__default__     user_u        s0-s0        *
john         staff_u       s2:c100       *
root         root         s0-s15:c0.c1023   *
staff        staff_u       s0-s15:c0.c1023   *
sysadm        staff_u       s0-s15:c0.c1023   *
system_u       system_u       s0-s15:c0.c1023   *

6. Um die Bezeichnung von Johns Home-Verzeichnis bei Bedarf zu korrigieren, geben Sie den folgenden Befehl ein

sudo chcon -R -l s2:c100 /home/john

Einrichten von polyinstanziierten Verzeichnissen

Die Verzeichnisse /tmp und /var/tmp/ werden normalerweise von allen Programmen, Diensten und Benutzern als temporärer Speicherplatz genutzt

  • Eine solche Konfiguration macht diese Verzeichnisse jedoch anfällig für Race-Condition-Angriffe oder Informationslecks aufgrund von Dateinamen
  • SELinux bietet eine Lösung in Form von polyinstanziierten Verzeichnissen
  • Dies bedeutet im Effekt, dass sowohl /tmp als auch /var/tmp/ instanziiert werden, wodurch sie für jeden Benutzer privat erscheinen
  • Wenn die Instanziierung von Verzeichnissen aktiviert ist, werden die Verzeichnisse /tmp und /var/tmp/ jedes Benutzers automatisch unter /tmp-inst und /var/tmp/tmp-inst eingebunden

Befolgen Sie diese Schritte, um die Polyinstanziierung von Verzeichnissen zu aktivieren

Aktivieren der Polyinstanziierung von Verzeichnissen

1. Entfernen Sie die Auskommentierung der letzten drei Zeilen in der Datei /etc/security/namespace.conf, um die Instanziierung von /tmp, /var/tmp/ und den Home-Verzeichnissen der Benutzer zu aktivieren

tail -n 3 /etc/security/namespace.conf
/tmp /tmp-inst/ level root,adm
/var/tmp /var/tmp/tmp-inst/ level root,adm
$HOME $HOME/$USER.inst/ level

2. Stellen Sie sicher, dass in der Datei /etc/pam.d/login das Modul pam_namespace.so für die Sitzung konfiguriert ist

grep namespace /etc/pam.d/login
session required pam_namespace.so

3. Starten Sie Ihr System neu