Dies kann nur erfolgen, indem Sie jedem Benutzer eine eigene Shell zuweisen und entsprechende Profile für die Shell erzeugen. Über die Datei /etc/passwd weisen Sie dann jedem Benutzer seine eigene Shell zu.
Erzeugen Sie zunächst ein Verzeichnis, in dem Sie die Shells sämtlicher Benutzer anlegen. Kopieren Sie dann als erstes die von Ihnen ausgewählte Shell in das Verzeichnis. Anschließend legen Sie für jeden Benutzer einen Hardlink auf die Shell an und weisen dem Benutzer die entsprechende Shell zu.
# mkdir /opt/shells/ # cp /bin/bash /opt/shells # ln /opt/shells/bash /opt/shells/ralf-bash # ln /opt/shells/bash /opt/shells/claudia-bash # usermod -s /opt/shells/ralf-bash ralf # usermod -s /opt/shells/claudia-bash claudiaLegen Sie nach diesem Muster für jeden Benutzer einen Hardlink an. Wenn verschiedene Benutzer über identische Zugriffsrechte verfügen sollen, genügt natürlich eine Shell für diese Gruppe. Diese Shell nennen Sie dann vielleicht /opt/shells/
# vim:syntax=apparmor
# Last Modified: Tue Aug 8 17:51:36 2006
@{USER}=ralf
@{HOMEDIRS}=/home/
@{HOME}=@{HOMEDIRS}/@{USER}/
/opt/shells/ralf-bash {
#include <abstractions/base>
#include <abstractions/bash>
#include <abstractions/consoles>
#include <abstractions/nameservice>
#include <abstractions/user-manpages>
#include <abstractions/user-tmp>
/bin/grep ixr,
/bin/uname ixr,
/bin/vim ixr,
/usr/bin/manpath ixr,
/usr/bin/tty ixr,
/usr/bin/wget ixr,
/bin/hostname ixr,
/etc/vimrc r,
/etc/manpath r,
/etc/nntpserver r,
/home/@{USER} r,
/home/@{USER}/** rwl,
/opt/shells/@{USER}-bash r,
/usr r,
/usr/share/** r,
}
Dieses Profil erlaubt der Bash den Aufruf der üblichen Befehle grep,
vim, wget, etc. Dabei darf der Benutzer nur die Dateien in seinem
eigenen Verzeichnis betrachten und verändern. Die Abstraction
abstractions/user-tmp erlaubt auch noch den Zugriff auf die temporären
Verzeichnisse. Bei einem Zugriff auf andere Verzeichnisse wird der Zugriff
verweigert:
samson:/home/ralf$ cd /var samson:/var$ ls /bin/ls: .: Operation not permittedDieses Profil ist natürlich sehr eingeschränkt. Selbst das Umbenennen von Dateien ist nicht erlaubt. Hierzu muss der Benutzer den Befehl /bin/mv aufrufen dürfen. Die Anpassung des Profils in dieser Beziehung ist aber sehr einfach. Fügen Sie einfach eine Zeile hinzu:
/bin/mv ixr,Sie können so sehr einfach die Privilegien der angemeldeten Benutzer verwalten und ihren Zugriff überwachen.
Das abgebildete Profil verwendet für die einfache Anpassung des Benutzernamens Variablen. Leider kann bei den aktuellen Versionen von AppArmor die Variable nicht in dem Namen des überwachten Programmes verwendet werden. Dieser Name muss ohne Verwendung von Variablen mit seinem absoluten Pfad angegeben werden
Gruppieren Sie die Befehle, die Sie den verschiedenen Benutzern zur Verfügung stellen möchten in einzelnen Dateien. Sie können dann diese mit Include-Direktiven einlesen. Erzeugen Sie zum Beispiel eine Datei abstractions/dateizugriff. In dieser Datei hinterlegen Sie alle Befehle, die für den Dateizugriff benötigt werden:
# abstractions/dateizugriff # Uebliche Befehle fuer den Dateizugriff /bin/awk ixr, /bin/basename ixr, /bin/cat ixr, /bin/chmod ixr, /bin/cp ixr, /bin/date ixr, /bin/df ixr, /bin/echo ixr, /bin/egrep ixr, /bin/fgrep ixr, /bin/gawk ixr, /bin/grep ixr, /bin/gunzip ixr, /bin/gzip ixr, /bin/hostname ixr, /bin/ls ixr, /bin/mkdir ixr, /bin/more ixr, /bin/mv ixr, /bin/rm ixr, /bin/rmdir ixr, /bin/sed ixr, /bin/sort ixr, /bin/tar ixr, /bin/touch ixr, /bin/vim ixr, /bin/vi ixr, /bin/zcat ixr,Genauso können Sie eine Datei abstractions/prozessverwaltung anlegen, in der Sie den Zugriff auf die Befehle ps, top, kill, nice, renice und pidof erlauben. Dann können Sie einfach durch Auswahl der Abstraction den Benutzern unterschiedliche Funktionen zuweisen.
Hiermit ist es auch möglich, mehreren Benutzern die UserID 0 zuzuweisen und gewisse Aufgaben als root auszuführen. Die Tragweite ihrer Aktionen wird von dem Profil eingeschränkt, wenn Sie eine spezielle Shell bei ihrem Login zugewiesen bekommen und diese auch nicht ändern dürfen! Ein schreibender Zugriff auf die Datei /etc/passwd muss für diese Benutzer natürlich unterbunden werden!
Ralf Spenneberg 2007-11-13