Rollen und Benutzer

Wozu werden nun die Rollen und Benutzer verwendet? Die Type-Enforcement-Regeln prüfen ja nur die Domäne des zugreifenden Prozesses und den Typ der Ressource. Die Rolle definiert, welche Domänen für einen Prozess erreichbar sind. Im letzten Abschnitt haben wir gesehen, dass ein Prozess eine Domänentransition durchführen kann, wenn entsprechende Regeln es erlauben. Zusätzlich muss aber auch die Rolle des aufrufenden Prozesses diese Domänentransition erlauben. So sind bestimmte Domänen nur für bestimmte Rollen erreichbar. Die Rolle limitiert also die möglichen Domänentransitionen. Es handelt sich also um eine Art von Role-Based-Access-Control (RBAC). Entsprechend dem Beispiel im letzten Abschnitt muss die Rolle user_r mit der der passwd-Prozess läuft, die Erlaubnis haben, in die Domäne passwd_t zu wechseln. Diese Erlaubnis wird mit einer role-Anweisung gegeben:
role user_r types passwd_t;
Diese Anweisung deklariert zunächst die Rolle user_r falls sie noch nicht in der Policy existieren sollte. Außerdem erlaubt die Anweisung der Rolle user_r die Domäne passwd_t zu nutzen.

Wie werden denn nun die Rollen verwaltet? Welcher Benutzer darf welche Rollen nutzen? Das ist die Aufgabe der SELinux-Benutzerverwaltung. Hierzu gibt es die Benutzerdeklarationen, die Sie mit dem Befehl semanage anzeigen können.

[root@supergrobi modules]# semanage user -l

             Labeling MLS/       MLS/
SELinux User Prefix   MCS Level  MCS Range            SELinux Roles

root         user     s0         SystemLow-SystemHigh system_r sysadm_r staff_r
staff_u      staff    s0         SystemLow-SystemHigh sysadm_r staff_r
sysadm_u     sysadm   s0         SystemLow-SystemHigh sysadm_r
system_u     user     s0         SystemLow-SystemHigh system_r
user_u       user     s0         SystemLow-SystemHigh user_r
Wir ignorieren für einen Moment (bis zum nächsten Abschnitt) noch die Spalten MLS/MCS. Die weiteren Spalten definieren, welcher Benutzer welche Rollen nutzen darf. Der SELinux-Benutzer root darf die SELinux Rollen system_r, sysadm_r und staff_r verwenden. Der SELinux-Benutzer system_u hat lediglich Zugriff auf die Rolle system_r, genauso wie der SELinux-Benutzer user_u auch nur Zugriff auf die Rolle user_r hat.

SELinux ordnet jetzt die Linux-Benutzer den SELinux-Benutzern zu. Systemdienste erhalten den Benutzer system_u. Die weiteren Benutzer werden bei ihrem Login zugewiesen. Hierzu verwendet SELinux das folgende Mapping:

[root@supergrobi ~]# semanage login -l

Login Name                SELinux User              MLS/MCS Range

__default__               user_u                    s0
root                      root                      SystemLow-SystemHigh
Bei dem Benutzer root lautet der SELinux-Benutzername gleich dem Linux-Benutzernamen. Alle weiteren Benutzer erhalten den SELinux-Benutzer user_u. Damit ist festgelegt, welche Rollen sie benutzen dürfen. Möchten Sie zum Beispiel, dass ein bestimmter Benutzer auch die Rolle sysadm_r benutzen darf, können Sie dies folgendermaßen erreichen:
[root@supergrobi ~]# semanage user -R "sysadm_r user_r" -P user -a ralf_u
[root@supergrobi ~]# semanage login  -s ralf_u -a ralf
Der erste Befehl erzeugt den SELinux-Benutzer ralf_u und weist diesem die Rollen sysadm_r und user_r zu. Der zweite Befehl erzeugt das Mapping für den Login, so dass SELinux dem Linux-Benutzer ralf bei der Anmeldung den SELinux-Benutzer ralf_u zuweist. Dies lässt sich nach einer Anmeldung auch verifizieren:
[ralf@supergrobi ~]$ id -Z
ralf_u:user_r:user_t
[ralf@supergrobi ~]$ newrole -r sysadm_r
Authentifiziere ralf.
Passwort:
[ralf@supergrobi ~]$ id -Z
ralf_u:sysadm_r:sysadm_t

Die hier verwendeten Befehle id und newrole(siehe auch 26.15) wurden noch nicht erwähnt und sollen kurz erklärt werden:

id
Dieser Befehl zeigt die aktuelle Identität des Benutzers. Mit der Option -Z zeigt er die SELinux-Identität. Nach der Anmeldung hat der Benutzer den SELinux-Benutzer user_u und die Rolle user_r.
newrole
Mit diesem Befehl wechselt ein Benutzer seine Rolle. Dieser Befehl ist nur erfolgreich, wenn der Benutzer auf die neue Rolle zugreifen darf.

Ralf Spenneberg 2007-11-13