14.3Prozesse unter einer anderen Identität ausführen (sudo)
sudo verfolgt einen ganz anderen Ansatz als die oben beschriebenen su-Varianten. Das Programm ermöglicht nach entsprechender Konfiguration bestimmten Benutzern die Ausführung bestimmter Programme mit root-Rechten. Zur Sicherheit muss nochmals das eigene Passwort angegeben werden, also eben nicht das root-Passwort.
sudo führt diese Programme dann so aus, als wären sie von einem anderen Benutzer gestartet worden (Default: root). Damit können einzelne Benutzer administrative Aufgaben übernehmen bzw. systemkritische Kommandos ausführen, ohne dazu das root-Passwort kennen zu müssen. sudo protokolliert alle ausgeführten Kommandos sowie gescheiterte Versuche üblicherweise in /var/log/messages.
sudo merkt sich das Passwort für 15 Minuten. Wenn Sie innerhalb dieser Zeit ein weiteres Kommando mit sudo ausführen, werden Sie nicht neuerlich nach dem Passwort gefragt. Die Merkzeit kann in /etc/sudoers mit dem Schlüsselwort timestamp_timeout verändert werden.
Die Konfiguration von sudo erfolgt durch die Datei /etc/sudoers. Vereinfacht ausgedrückt, beschreibt die Datei in drei Spalten, welche Benutzer von welchem Rechner aus welche Programme ausführen dürfen. Die folgende Zeile bedeutet, dass die Benutzerin kathrin am Rechner uranus das Kommando /sbin/fdisk ausführen darf. Das Schlüsselwort ALL bedeutet, dass kathrin das Kommando unter jedem beliebigen Account ausführen darf, also als root, als news, als lp etc.
Wenn der ersten Spalte von sudoers das Zeichen % vorangestellt wird, gilt der Eintrag für alle Mitglieder der angegebenen Gruppe. Diverse weitere Syntaxvarianten beschreibt man sudoers.
Ändern Sie /etc/sudoers mit visudo!
Aus Sicherheitsgründen sollte /etc/sudoers ausschließlich mit den Kommando visudo editiert werden (siehe auch dessen man-Seite)! visudo führt vor dem Speichern einen Syntaxtest durch und stellt so sicher, dass Sie sich nicht durch eine fehlerhafte sudoers-Datei selbst von weiteren Administrationsarbeiten ausschließen. Besonders wichtig ist das bei Distributionen wie Ubuntu, die keinen root-Login vorsehen.
visudo verwendet, wie der Name vermuten lässt, normalerweise den Editor vi; wenn Sie einen anderen Editor vorziehen, müssen Sie dessen exakten Pfad vor der Ausführung von visudo in der Umgebungsvariablen EDITOR angeben – also z.B. durch export EDITOR=/usr/bin/jmacs.
Kathrin kann nun fdisk folgendermaßen ausführen:
Als Passwort muss das Passwort der Benutzerin kathrin angegeben werden. Bei fdisk muss der vollständige Pfad angegeben werden, falls sich fdisk nicht in einem der PATH-Verzeichnisse von kathrin befindet. fdisk wird automatisch im Account root ausgeführt. Ein anderer Account kann mit sudo -u account gewählt werden.
Es besteht die Möglichkeit, einem bestimmten Benutzer das Ausführen von sudo ohne Passwortangabe zu erlauben. Dazu fügen Sie in sudoers eine Zeile nach dem folgenden Muster ein:
kofler ALL=(ALL) NOPASSWD: ALL
Das ist natürlich ein Sicherheitsrisiko, aber wer oft Administratoraufgaben ausführen muss, wird die so gewonnene Bequemlichkeit schätzen. Beachten Sie, dass das NOPASSWD-Tag nur gültig ist, wenn es keine anderen sudoers-Zeilen gibt, die vom selben Benutzer ein Passwort verlangen. Das gilt auch für Gruppeneinträge, also z.B. %admin.
Bei umfangreicheren Administrationsaufgaben wird es zunehmend lästig, jedem Kommando sudo voranzustellen. Eleganter ist es, mit sudo -s in den root-Modus zu wechseln. Alle weiteren Kommandos werden wie von root ausgeführt. Sie beenden diesen Modus mit (Strg)+(D).
Beim Start von Administrationsprogrammen unter X kommt unter KDE kdesudo zum Einsatz. Unter Gnome war früher gksudo gebräuchlich, mittlerweile verwenden die meisten Distributionen aber pkexec.
Die Konfiguration von /etc/sudoers bietet viel mehr syntaktische Möglichkeiten, als hier angedeutet wurde. Lesen Sie die man-Seiten zu sudo und zu sudoers! Noch mehr Details sind auf der sudo-Homepage nachzulesen:
sudo bei Ubuntu
Bei Ubuntu und einigen anderen Distributionen wird der Benutzer root standardmäßig ohne gültiges Passwort eingerichtet. Ein root-Login ist damit unmöglich! Auch su oder ssh -l root funktionieren nicht. Die einzige Möglichkeit zur Ausführung administrativer Kommandos bietet somit sudo. Die Datei /etc/sudoers enthält nur wenige Zeilen:
Defaults env_reset bewirkt, dass beim Benutzerwechsel alle Umgebungsvariablen zurückgesetzt werden. Defaults mail_badpass führt dazu, dass nach einem fehlerhaften Login-Versuch eine Warn-E-Mail an den Administrator versandt wird. Defaults secure_path legt den Inhalt der PATH-Umgebungsvariable für sudo-Kommandos fest.
Die vierte Zeile gibt root uneingeschränkten Zugriff auf alle Programme. Die Zeile ist unter Ubuntu eigentlich zwecklos, weil der root-Login gesperrt ist. Am wichtigsten sind die letzten zwei Zeilen: Sie erlauben allen Mitgliedern der Gruppen sudo und admin den Aufruf sämtlicher Programme.
Normalerweise ist unter Ubuntu nur der erste Benutzer, also der, der während der Installation eingerichtet wurde, Mitglied der sudo-Gruppe. Weitere Benutzer können ebenfalls dieser Administratoren-Gruppe zugeordnet werden. Bei älteren Ubuntu-Versionen wurde anstelle der sudo-Gruppe die admin-Gruppe verwendet.
Die folgende zusätzliche Zeile in /etc/sudoers erlaubt es dem Benutzer kofler, das Kommando apt-get und das Programm Synaptic ohne Passwort auszuführen. Damit können auch Updates ohne Passworteingabe durchgeführt werden.
sudo bei CentOS, Fedora und Red Hat
Bei aktuellen Fedora-Distributionen und Red-Hat-Derivaten können Sie während der Installation einen neuen Benutzer einrichten und diesen zum Administrator machen. Das bedeutet, dass er der Gruppe wheel zugeordnet wird. /etc/sudoers enthält für diese Gruppe die folgende Zeile:
Ansonsten verhält sich sudo weitgehend wie bei Ubuntu, d.h., wheel-Gruppenmitglieder müssen ihr eigenes Passwort angeben, um sudo-Kommandos ausführen zu dürfen. Losgelöst von sudo gibt es weiterhin den Benutzer root mit einem eigenen Passwort.
sudo bei SUSE
sudo ist auch bei SUSE-Distributionen standardmäßig eingerichtet. Die Konfiguration weicht aber deutlich von der von Ubuntu, Fedora & Co. ab:
Die ersten drei Zeilen verhindern aus Sicherheitsgründen die Ausführung von X-Programmen mit sudo. Wenn sudo den direkten Start solcher Programme unterstützen soll, müssen Sie diese Zeilen löschen bzw. ein #-Zeichen voranstellen.
Defaults targetpw bedeutet, dass grundsätzlich das Passwort für den Account angegeben werden muss, in dem das Kommando ausgeführt werden soll, in der Regel also das root-Passwort. Der größte Vorteil von sudo, dass nämlich nicht mehrere Benutzer mit Administratoraufgaben gemeinsam das root-Passwort kennen müssen, geht damit verloren. Die Zeile ALL ALL=(ALL) ALL erlaubt schließlich allen Benutzern, jedes Kommando auszuführen, sofern das richtige Passwort für den Ziel-Account bekannt ist.