Linux super


1. Einleitung

super ist ein Programm, mit dessen Hilfe unprivilegierte Benutzer priviligierte Befehle ausführen können (das muss natürlich vom Administrator konfiguriert werden ...). So kann man einem Benutzer erlauben, ein einzelnes Programm auszuführen, das root Rechte benötigt, ohne dafür das root Passwort weitergeben zu müssen. Je nach Konfiguration wird das Programm dann einfach gestartet, oder der Benutzer muss sein eigenes Passwort eingeben.

Ist super konfiguriert, erhält man durch Eingabe von super eine Liste von Befehlen, die mit anderen Privilegien ausgeführt werden können. Einzelnen Befehle startet man dann mit

super [befehl]

2. Installation

Das Paket findet sich unter ftp://zid-luxinst.uibk.ac.at/mirror/super. Dieses ist zu installieren. (Die Originalquellen von super sollten nur verwendet werden, wenn man wirklich weiß, was man macht (Stichwort: PAM).)

Dort finden sich auch die Source RPM Pakete. Aus diesen können bei Bedarf die Binary RPMS neu erstellt werden:

rpmbuild --rebuild super-*.src.rpm

3. Konfiguration

Die Konfigurationsdatei ist /etc/super.tab. Diese ist standardmäßig, bis auf die Zeilen für die Verwendung von Linux PAM, leer. Hier ein Beispiel für eine Konfiguration, die super sushell implementiert. Damit erhält ein Benutzer nach Eingabe seines Passwortes eine root Shell (das sollte sehr, sehr gut überlegt sein ...).

Anmerkung

Beachten Sie, dass in nachfolgendem Beispiel zwei lange Zeilen mit einem „\“ beendet und auf der folgenden Zeile fortgesetzt werden. Um dieses Beispiel zu verwenden, müssen Sie den „\“ entfernen und jeweils die beiden Zeilen wieder zusammenfügen!

Beispiel 1. super Konfigurationsdatei

:global authtype=pam
:global patterns=shell
:global renewtime=y
:global syslog=y

:define sushell         sushell::/bin/bash\ --login u+g=root \
env=DISPLAY,TZ,LANG auth=y

:define Operators       user1,user2

$sushell                $Operators

Hier noch zwei Beispiele. Das erste verwendet setuid, das im super Paket enthalten ist. Dieses ändert nicht nur die EUID (effective UID), sondern auch (R)UID ((real) UID). Das wird zum Beispiel von GTK Programmen benötigt. Außerdem muss der Benutzer aufgrund des fehlenden auth=y sein Passwort nicht eingeben:

Anmerkung

Beachten Sie, dass in nachfolgendem Beispiel eine lange Zeile mit einem „\“ beendet und auf der folgenden Zeile fortgesetzt werden. Um dieses Beispiel zu verwenden, müssen Sie den „\“ entfernen und jeweils die beiden Zeilen wieder zusammenfügen!

Beispiel 2. Verwendung von setuid

:define ethereal        ethereal::/usr/bin/setuid\ root\ \
/usr/sbin/ethereal env=DISPLAY,TZ,LANG
$ethereal               $Operators

Das zweite Beispiel, wenn als letztes eingesetzt, sucht alle anderen an super übergebenen Befehle in /etc/rc.d/init.d/.

Beispiel 3. „fallback“ Konfiguration für super

:define ServiceCommands *::/etc/rc.d/init.d/*
$ServiceCommands        $Operators

4. finally()

man 1 super, man 5 super und man 1 setuid helfen weiter. Beispiele finden sich auch unter /usr/share/doc/super-*/.