Wenn Sie nicht über ein entsprechendes System verfügen, befindet sich auf der CD ein Fedora Core 6 System mit installierter SELinux-Reference-Policy als VMWare-Image. Dieses können Sie in einer VMWare-Workstation oder mit dem beigelegten VMWare-Player betreiben. Die Anmeldung ist als Benutzer root mit dem Kennwort ``kennwort'' möglich.
Zunächst sieht direkt nach der Anmeldung alles normal aus. Möglicherweise erhalten Sie aber auch direkt Protokollmeldungen von SELinux auf der Konsole (siehe 19.1)
|
Ihre erste Frage sollte nun sein: Wer bin ich? Dies beantwortet der Befehl id. Mit der Option -Z erhalten Sie nur die SELinux-Identität:
[root@supergrobi ~]# id uid=0(root) gid=0(root) Gruppen=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:staff_r:staff_t:SystemLow-SystemHigh
Ihr Benutzer verfügt nun über die Rolle staff_r. Diese Rolle ist Personen vorbehalten, die administrative Tätigkeiten wahrnehmen. In dieser Rolle sind diese administrativen Tätigkeiten diesen Personen aber nicht gestattet. Das können Sie sogar recht leicht erkennen.
Hierfür müssen Sie sich aber zunächst weitere Informationen über die SELinux-Konfiguration beschaffen. Der Befehl getenforce teilt Ihnen den aktuellen Zustand des SELinux-Systems mit:
[root@supergrobi ~]# getenforce PermissiveMögliche Rückgabewerte des Befehls sind:
[root@supergrobi ~]# sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: permissive Policy version: 20 Policy from config file: strictHier erkennen Sie, dass SELinux angeschaltet ist und wo das SELinux-Dateisystem gemountet wird. Wir werden das SELinux-Dateisystem später noch kennenlernen. Die hier vorgestellten Befehle kommunizieren mit SELinux im Kernel über dieses Dateisystem. Es handelt sich um ein virtuelles Dateisystem ähnlich /proc und /sys. Sie erkennen den aktuellen Modus (Permissive) und den in der Konfigurationsdatei hinterlegten Modus. Die angegebene Version bezeichnet die SELinux-Version im Kernel und ist ein Anhaltspunkt für die verfügbaren Sprachelemente. Schließlich erkennen Sie noch, dass es sich bei mir um die Strict-Policy handelt.
Die hier angesprochene Konfigurationsdatei ist /etc/selinux/config. Diese Datei definiert den SELinux-Modus:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=permissive # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=strict # SETLOCALDEFS= Check local definition changes SETLOCALDEFS=0Diese Datei wird bei dem Boot des Systems ausgewertet. Nach einer Änderung in der Datei genügt daher ein Reboot. Wenn Sie jedoch die Policy ändern möchten (strict oder targeted) genügt kein einfacher Reboot, da diese Policies unterschiedliche Security-Contexte verwenden. Zusätzlich ist ein Relabeling des Dateisystems erforderlich
Kommen wir zurück zu unserem Ausgangspunkt. Der Benutzer root verfügt über die Rolle staff_r, die keine administrativen Arbeiten erlaubt. Testen Sie das zum Beispiel mit dem Befehl ps -ef. Dieser Befehl zeigt sämtliche Prozesse auf dem System an. Auf dem hier vorgestellten System funktioniert das zunächst, da es sich im Permissive-Mode befindet:
[root@supergrobi ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 12:37 ? 00:00:01 init [5] root 2 1 0 12:37 ? 00:00:00 [migration/0] root 3 1 0 12:37 ? 00:00:00 [ksoftirqd/0] root 4 1 0 12:37 ? 00:00:00 [watchdog/0] root 5 1 0 12:37 ? 00:00:00 [migration/1] root 6 1 0 12:37 ? 00:00:00 [ksoftirqd/1] ... root 4122 2239 0 18:23 tty1 00:00:00 -bash root 4297 4092 0 18:57 pts/2 00:00:00 ps -ef
Wechseln Sie nun auf dem System in den Enforcing-Mode. Hierzu müssen Sie nicht rebooten. Es genügt den Befehl setenforce zu verwenden:
[root@supergrobi ~]# setenforce 1 [root@supergrobi ~]# getenforce Enforcing [root@supergrobi ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 4092 4089 0 18:21 pts/2 00:00:00 -bash root 4122 2239 0 18:23 tty1 00:00:00 -bash root 4305 4092 0 18:58 pts/2 00:00:00 ps -efNun sehen Sie nur noch eine kleine Auswahl der laufenden Prozesse. SELinux verhindert den Zugriff auf alle Prozesse, die nicht von Ihnen gestartet wurden! Dies gilt auch für andere Prozesse, die den Benutzer root verwenden. Versuchen Sie auf die Heimatverzeichnisse anderer Benutzer oder auf das Proc-Dateisystem zuzugreifen:
[root@supergrobi ~]# ls -l /home/ insgesamt 8 ?--------- ? ? ? ? ? /home/lost+found ?--------- ? ? ? ? ? /home/student [root@supergrobi ~]# ls -l /proc/kcore ls: /proc/kcore: Keine BerechtigungNebenbei: In den Permissive-Modus wechselt SELinux ebenfalls mit dem Befehl setenforce:
[root@supergrobi ~]# setenforce 0 setenforce: setenforce() failedLeider darf dies nur ein Benutzer mit der Rolle sysadm_r.
Sie sollten bis jetzt bereits einen Eindruck gewonnen haben, wie SELinux die Sicherheit eines Linux-System gewährleisten kann. Natürlich ist dafür eine fehlerfreie und umfangreiche Policy erforderlich. Diese wird jedoch bei den meisten Distributionen bereits mitgeliefert. Auch setzt dieses Beispiel die Strict-Policy voraus. Wir werden in diesem Buch uns in erster Linie mit der Targeted-Policy beschäftigen, da diese häufiger zum Einsatz kommt.
Wie wird nun das System administriert? Der Benutzer root hat auch Zugriff auf die Rolle sysadm_r, die über die notwendigen Privilegien verfügt. Um in die Rolle zu wechseln, verwendet er den Befehl newrole:
[root@supergrobi ~]# newrole -r sysadm_r Authentifiziere root. Passwort: [root@supergrobi ~]# ls -l /proc/kcore -r-------- 1 root root 527896576 23. Aug 19:06 /proc/kcoreAnschließend kann er auch wieder auf alle Dateien zugreifen.
Weitere wichtige Befehle auf der Kommandozeile sind:
Dies soll als erste Einführung in SELinux genügen. Zunächst werden Sie das System genauso verwenden können, wie bisher. Jedoch werden einige Funktionen nicht mehr zur Verfügung stehen. Dann müssen Sie die Protokollmeldungen analysieren (siehe 20) und können die Richtlinie über boolsche Variablen (siehe 21) oder über die Erweiterung der Richtlinien anpassen (siehe 22). Eine typische Zusammenfassung der täglichen Aufgaben und ihre Lösung ist im Kapitel 27 zu finden. Wenn Sie aber tiefer einsteigen möchten und vielleicht sogar für komplett neue Dienste die Richtlinien entwickeln möchten, müssen Sie sich mehr mit der Sprache und ihren Bestandteilen beschäftigen. Dann sollten Sie den Teil IV durcharbeiten.
Ralf Spenneberg 2007-11-13