Die aktuellen SELinux-Implementierungen unterstützen die MLS und MCS. Wenn Sie prüfen möchten, ob dass auch für Ihr System zutrifft, können Sie das mit dem Befehl semanage oder id prüfen:
[root@supergrobi ~]# id -Z root:staff_r:staff_t:SystemLow-SystemHigh [root@supergrobi ~]$ /usr/sbin/semanage translation -l Level Translation s0 s0-s15:c0.c255 SystemLow-SystemHigh s0:c0.c255 SystemHighDer Security-Context enthält dann ein zusätzliches Feld. Dieses Feld besteht in Wirklichkeit aus bis zu zwei Feldern: Sensitivity und Compartment (oder Category). Jedes Objekt besitzt nun genau eine MLS-Markierung. Diese Markierung ist für die meisten Objekte SystemLow oder auch s0. Besondere Objekte wie /dev/mem erhalten eine andere Markierung (z.B. SystemHigh):
[root@supergrobi ~]# ls -Z /dev/mem crw-r----- root kmem system_u:object_r:memory_device_t:SystemHigh /dev/mem
Jeder Prozess erhält einen MLS-Bereich (Range) zugewiesen. Dieser wird auch bei neuen Prozessen vererbt. Allerdings kann es zu Bereichstransitionen (range_transition) kommen.
Damit nun ein Prozess auf eine Ressource zugreifen darf, müssen die MLS-Eigenschaften des Prozesses und der Ressource ein bestimmtes Verhältnis aufweisen. Damit ein Prozess eine Datei lesen oder ausführen darf, gilt die folgende SELinux-Regel:
mlsconstrain { dir file lnk_file chr_file blk_file
sock_file fifo_file }
{ read getattr execute }
(( l1 dom l2 ) or
(( t1 == mlsfilereadtoclr )
and ( h1 dom l2 )) or
( t1 == mlsfileread ) or
( t2 == mlstrustedobject ));
Diese Regel ist im Moment sicherlich noch nicht einfach
nachzuvollziehen. Aber ich möchte dennoch versuchen, den wesentlichen
Teil zu erläutern. Ein Constraint ist eine Einschränkung, die immer
erfüllt sein muss, damit ein Zugriff erlaubt wird. Hier handelt es
sich um den lesenden (read) oder ausführenden (execute)
Zugriff auf Dateien (file) oder Verzeichnisse
(dir). Dieser wird nur gewährt, wenn ( l1 dom l2 ). Die
Platzhalter l1 und l2 stehen für den MLS-Wert des
Subjektes und des Objektes. Von Dominanz (l1 dom l2) spricht man, wenn
die Sicherheitstufe l1 höher oder gleich der Stufe l2 ist. Gelesen werden dürfen Dateien also nur von Prozessen, die
mindestens dieselbe Sicherheitsstufe aufweisen. Umgekehrt ist ein
Schreibzugriff nur erlaubt, wenn das Subjekt von dem Objekt dominiert
wird. Die Sicherheitstufe des Objektes l2 ist also mindestens
dieselbe Stufe. Ein Schreiben und Lesen ist damit nur möglich, wenn
das Subjekt (Prozess) und das Objekt über identische Sicherheitsstufen
verfügen.
Ralf Spenneberg 2007-11-13