Hierfür müssen Sie zunächst pam_apparmor installieren, falls dies auf Ihrer Distribution noch nicht der Fall ist. Hierzu laden Sie zunächst das Quelltextpaket pam_apparmor-2.0.tar.gz von der Homepage http://forge.novell.com/modules/xfmod/project/?apparmor. Für die erfolgreiche Übersetzung müssen Sie noch das pam-devel-Paket installieren. Dann können Sie das Quelltext-Archiv auspacken und mit make und make install übersetzen. Nun müssen Sie das PAM-Modul noch in der Konfiguration aktivieren. Editieren Sie hierzu unter SuSE die Datei /etc/pam.d/common-session und fügen Sie die folgende Zeile hinzu:
session required pam_apparmor.soModernere Versionen von pam_apparmor erlauben die Auswahl der Eigenschaft, die für die Bestimmung des Profils verwendet werden soll. Während die alte Version 2.0 nach einem Profil entsprechend dem Benutzernamen sucht, suchen modernere Versionen per Default nach einem Profil entsprechend der primären Gruppe. Sie können das aber auch bei diesen Versionen einstellen und zunächst nach einem Profil für den Benutzer und dann einem Profil für die primäre Gruppe suchen. Wenn beides nicht gefunden wird, können Sie zusätzlich ein Default-Profil angeben. Auf anderen Distributionen editieren Sie bitte die entsprechende Datei und fügen die Zeile hinzu. Sie können auch ein RPM-Paket erzeugen. Dann können Sie später die Installation leichter nachvollziehen und die PAM-Konfigurationsdatei wird automatisch angepasst. Hierzu kopieren Sie das Quelltextarchiv nach /usr/src/packages/SOURCES
Um nun pam_apparmor mit der Secure-Shell zu benutzen, müssen Sie für die Secure-Shell ein Profil erzeugen. Dies kann manuell erfolgen, ist aber am leichtesten mit Hilfe des Befehls genprof. Hierzu geben Sie auf dem AppArmor-System den Befehl genprof /usr/sbin/sshd ein. So erzeugt der Genprof-Befehl (siehe 10.3.6) ein minimales Profil für die Secure-Shell und aktiviert dieses im Lernmodus. Nun können Sie sich per SSH mit unterschiedlichen Benutzern anmelden und verschiedene Aktivitäten ausführen. Denken Sie daran, auch der Benutzer root ist von der Überwachung betroffen. Sie können so also zum Beispiel per SSH einen Zugang als root erlauben, der lediglich den Apache 2.0 Webserver neu starten darf.
Nachdem Sie sich wieder per SSH von dem System abgemeldet haben, werten Sie mit Genprof die im Lernmodus aufgezeichneten Ereignisse aus. Dabei erzeugt Genprof dann das Profil für die Secure-Shell. Ein mögliches Profil ist im folgenden abgedruckt und befindet sich auch auf der CD im Verzeichnis /Listings/.
# vim:syntax=apparmor
# Last Modified: Thu Aug 10 13:00:13 2006
#include <tunables/global>
/usr/sbin/sshd {
#include <abstractions/authentication>
#include <abstractions/base>
#include <abstractions/consoles>
#include <abstractions/nameservice>
#include <abstractions/wutmp>
capability chown,
capability net_bind_service,
capability setgid,
capability setuid,
capability sys_chroot,
capability sys_tty_config,
/dev/ptmx rw,
/etc/environment r,
/etc/hosts.allow r,
/etc/hosts.deny r,
/etc/motd r,
/etc/ssh/* r,
/proc/*/fd r,
/usr/sbin/sshd ixr,
/var/run/sshd.init.pid w,
^AUTHENTICATED {
}
^EXEC {
}
^PRIVSEP {
}
^PRIVSEP_MONITOR {
}
^ralf {
#include <abstractions/authentication>
#include <abstractions/base>
#include <abstractions/bash>
#include <abstractions/consoles>
#include <abstractions/nameservice>
capability setuid,
/bin/bash ixr,
/bin/grep ixr,
/bin/hostname ixr,
/bin/sed ixr,
/bin/sort ixr,
/bin/uname ixr,
/dev/ptmx rw,
/etc/environment r,
/etc/manpath.config r,
/etc/motd r,
/etc/nntpserver r,
/etc/profile.d r,
/etc/sysconfig/* r,
/home/ralf r,
/home/ralf/* rw,
/lib/ld-2.4.so ixr,
/sbin/yast2 ixr,
/usr/bin/getopt ixr,
/usr/bin/manpath ixr,
/usr/bin/tty ixr,
/usr/lib/YaST2/bin/yast2-funcs r,
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/bin/java ixr,
/usr/share/applications/YaST2 r,
/usr/share/applications/YaST2/* r,
/var/log/Xorg.0.log r,
}
^root {
#include <abstractions/authentication>
#include <abstractions/base>
#include <abstractions/bash>
#include <abstractions/consoles>
#include <abstractions/nameservice>
#include <abstractions/php5>
#include <abstractions/wutmp>
capability dac_override,
capability net_bind_service,
capability setgid,
capability setuid,
/ r,
/bin/basename ixr,
/bin/bash ix,
/bin/grep ixr,
/bin/hostname ixr,
/bin/ln ixr,
/bin/sed ixr,
/bin/sort ixr,
/bin/stty ixr,
/bin/uname ixr,
/bin/usleep ixr,
/dev/blog w,
/etc r,
/etc/apache2/sysconfig.d/* w,
/etc/environment r,
/etc/init.d r,
/etc/init.d/apache2 ixr,
/etc/manpath.config r,
/etc/nntpserver r,
/etc/profile.d r,
/etc/rc.status r,
/etc/sysconfig/* r,
/proc r,
/proc/*/stat r,
/proc/*/statm r,
/sbin/startproc ixr,
/sbin/yast2 ixr,
/usr/bin/getopt ixr,
/usr/bin/manpath ixr,
/usr/bin/readlink ixr,
/usr/bin/tty ixr,
/usr/lib/YaST2/bin/* r,
/usr/sbin r,
/usr/sbin/httpd2 w,
/usr/sbin/httpd2-prefork pxr,
/usr/share/apache2/* r,
/usr/share/apache2/find_mpm ixr,
/usr/share/apache2/get_includes ixr,
/usr/share/apache2/get_module_list ixr,
/usr/share/applications/YaST2 r,
/usr/share/applications/YaST2/* r,
/var/log/Xorg.0.log r,
/var/log/apache2/rcapache2.out w,
/var/run/httpd2.pid r,
}
}
Eine kurze Erläuterung des Profils ist sicherlich angebracht. Zunächst handelt
es sich um ein ganz einfaches AppArmor-Profil mit einigen Subprofilen. Die
folgenden Subprofile sind Relikte der AppArmor-Entwicklung als eine
ChangeHat-fähige Secure-Shell entwickelt werden sollte.
^AUTHENTICATED {
}
^PRIVSEP {
}
^PRIVSEP_MONITOR {
}
Ob diese Entwicklung jemals abgeschlossen wird, ist heute noch nicht
klar. Dennoch fügt Genprof diese Hats grundsätzlich in ein Secure-Shell-Profil
ein. Aktuell kann man diese einfach ignorieren und nach Belieben auch löschen. Ob zukünftige Versionen diese
nutzen, bleibt abzuwarten. Möglicherweise werden dann die Hats auch umbenannt.
Anschließend erkennen Sie jeweils einen Hat für den Benutzer ralf und root. Der Benutzer ralf darf nur sehr wenige Funktionen ausüben. Bei allen Befehlen, die der Benutzer ralf aufrufen darf, wurde darauf geachtet, dass diese Befehle das Subprofil erben. Hierzu wurden die AppArmor-Rechte ixr zugewiesen.
Ähnlich verhält es sich mit dem Benutzer root. Auch dieser Benutzer darf nur einen begrenzten Satz an Befehlen aufrufen. Alle Befehle erben das Subprofil (ixr). Einzige Ausnahme ist der Webserver Apache 2.0. Für den Aufruf dieses Programmes wird die Existenz eines eigenen Profils gefordert:
/usr/sbin/httpd2-prefork pxr,
So läuft der Webserver immer in seinem eigenen Profil. Existiert dieses Profil
nicht, so kann der Webserver nicht gestartet werden. Außerdem benötigt der
Benutzer root nun keinen Lese- und Schreibzugriff auf die Dateien des
Webservers. Diese Zugriffe werden in dem Profil des Webservers verwaltet.
Möchten Sie nur für bestimmte Benutzer ein eigenes Subprofil anlegen
und alle weiteren Benutzer in einem Profil zusammenfassen oder gar ohne
AppArmor-Schutz Zugriff auf das System gewähren, so können Sie manuell einen
Hat mit dem Namen ^DEFAULT anlegen. Hier können Sie entweder ein
Default-Profil für alle Benutzer definieren oder auch die Ausführung der
Bash-Shell ohne Einschränkung (/bin/bash uxr) erlauben. Leider legt die
aktuelle Version von Genprof das Default-Profil bei der
Secure-Shell
fälschlicherweise unter dem Namen ^EXEC an, während das PAM-Modul,
falls es kein Subprofil mit dem entsprechenden Namen findet, das Subprofil mit
dem Namen ^DEFAULT verwendet.
Ralf Spenneberg 2007-11-13