Aus LinuxUser 05/2002

Zu Befehl

Darf ich? Was ist eigentlich sudo?

Die tägliche Arbeit unter Linux wird aus Sicherheitsgründen nicht mit Root-Rechten, sondern unter einem normalen Account durchgeführt. Wer nicht für jede administrative Aufgabe mit su in den Superuser-Modus wechseln will, findet mit sudo Hilfe.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Der Name sudo kommt aus dem Englischen: „superuser do“. Mit diesem Programm geben Administratoren einzelnen Benutzern oder Gruppen für bestimmte Befehle root-Rechte, ohne das Passwort des Root-Accounts verraten zu müssen. Um ein Mindestmaß an Kontrolle zu behalten, werden alle sudo-Aktionen mitgeloggt. Das Programm benutzt Timestamps, um eine Art „Ticket“-System zu implementieren: Ruft ein User sudo auf und gibt sein eigenes Passwort ein, erhält er ein Ticket für wenige Minuten (dieser Timeout variiert bei den verschiedenen Distributionen und kann natürlich konfiguriert werden). Eine solche Begrenzung verhindert, dass eine verlassene root-Shell auf der Konsole Tür und Tor für Unbefugte öffnet.

In der Datei /etc/sudoers wird konfiguriert, welcher Anwender welche Rechte auf dem System erhält. Diese Datei sieht in der Urfassung so aus:

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root    ALL=(ALL) ALL

Um diese zu verändern (im Header steht es bereits), verwenden Sie das Kommando visudo. Dieses Programm ist eine Variante des Editors vi, bietet aber ein paar zusätzliche Features. Es „sperrt“ die Datei, so dass sie nicht von zwei Benutzern gleichzeitig editieren werden kann. Außerdem überprüft es die Syntax beim Beenden des Editors: Sollten Sie einen fehlerhaften Eintrag gemacht haben, z. B. bei der Groß- und Kleinschreibung von bestimmten Kommandos, erhalten Sie eine Warnung:

wrote /etc/sudoers.tmp, 17 lines, 288 chars
>>> sudoers file: syntax error, line 8 <<<
What now?

Nach diesem Hinweis haben Sie drei Möglichkeiten: 1. Sie editieren die Datei erneut (Taste e und [Enter] drücken), 2. Sie beenden das Programm, ohne die Änderungen an /etc/sudoers zu speichern, (Taste x und [Enter] drücken) oder 3. Sie beenden das Programm und speichern auch die (vielleicht fehlerhaften) Änderungen (Taste q und [Enter]).

Zurück zur Konfiguration der Datei /etc/sudoers: In der Sektion Host alias specification definieren Sie – wie der Name schon verrät – Rechner, für die bestimmte sudo-Aufrufe gelten sollen. Dazu kann ein Host_Alias vergeben werden, der eine Gruppe von Computern wahlweise durch Aufführung ihrer Namen oder durch Definition bestimmter IP-Netzbereiche unter einem Namen abbildet. Das vereinfacht die Definitionen gültiger Kommandos für eben diese Rechner und ist natürlich nur sinnvoll, wenn die Konfigurationsdatei auf mehreren Rechnern verwendet wird.

Mit dem User_Alias räumen Sie durch einen Alias mehreren Usern bestimmte Rechte ein. Um den Befehl shutdown beispielsweise für die Benutzer petronella, easter und egbert freizugeben, können Sie diese zu einer Gruppe unter einem Alias zusammenfassen:

# User alias specification
User_alias ABSCHALTER = petronella,easter,egbert

Hier sehen Sie, wie die Einträge aufgebaut sind: Sie beginnen mit dem Alias-Typ (z. B. User_Alias), es folgt eine Zeichenkette für den Alias-Namen (dieser darf aus Großbuchstaben, Zahlen und dem Unterstrich „_“ bestehen und muss mit einem Großbuchstaben beginnen), und zum Schluss werden Benutzernamen getrennt durch Kommata aufgelistet. Es ist möglich, mehrere Alias-Definitionen desselben Typs in einer Zeile zusammenzufassen. Diese müssen dann durch einen Doppelpunkt getrennt werden, also z. B.

User_alias ABSCHALTER = petronella,easter,egbert : INTERNET_AN = petronella,easter

Unter der Cmnd alias specification können Sie nun bestimmten Kommandos einen Alias zuweisen, z. B. Cmnd_Alias DOWN = /sbin/shutdown. Um den Benutzern petronella, easter und egbert also zu erlauben, mit dem Kommando shutdown den Computer herunterzufahren, sollte die fertige /etc/sudoers so aussehen:

# Host alias specification
# User alias specification
User_Alias ABSCHALTER=petronella,easter,egbert
# Cmnd alias specification
Cmnd_Alias DOWN = /sbin/shutdown
# User privilege specification
root    ALL=(ALL) ALL
ABSCHALTER ALL=DOWN

Ein Benutzer aus der vorher definierten Liste ABSCHALTER kann das Kommando shutdown nun mit dem Befehl sudo /sbin/shutdown aufrufen. Das einzugebende Passwort ist das auf dem Computer gültige Login-Passwort. Möchte man die Passworteingabe unterdrücken, kann ein Flag NOPASSWD gesetzt werden (ABSCHALTER ALL=NOPASSWD:DOWN) – überlegen Sie aber gut, welchem User Sie diese Rechte geben.

Do the sudo!

Es muss nicht zwingend mit Aliasen gearbeitet werden, um einem einzelnen User ein bestimmtes Kommando zur Verfügung zu stellen. Praktisch ist auch, dass Sie einem bestimmten Benutzer aus einer vorher definierten Gruppe einzeln einen Befehl wieder „wegnehmen“ können. Dazu fügen Sie nach ABSCHALTER ALL=DOWN eine weitere Zeile mit dieser Ausnahme ein, z. B. petronella ALL=!DOWN. Wichtig ist, dass die Zeile unmittelbar nach der anderen Regel erscheint, da die Datei von oben nach unten abgearbeitet wird. Auf diese Weise kann die Gruppe ABSCHALTER weiter existieren und für andere Kommandos verwendet werden – nur für diesen einen Fall darf der User petronella hier nicht mitmachen. Sobald dieser Benutzer versucht, das Kommando auszuführen, erhält er die Fehlermeldung: Sorry, user petronella is not allowed to execute ‚/sbin/shutdown‘ as root on asteroid.

Sicherheit wird ganz groß geschrieben: Der Versuch des Benutzers petronella, ein Kommando mit sudo aufzurufen, für das keine Erlaubnis existiert, wird (sofern nicht anders in der /etc/sudoers definiert) an den Superuser root als Mail verschickt (siehe Abbildung 1) und dem Benutzer selbst auch durch die Meldung „petronella is not in the sudoers file. This incident will be reported.“ mitgeteilt. Damit ein Benutzer aber auch weiß, was er darf, kann er sudo -l (für englisch „list“) aufrufen – hier verrät das Programm, welche Kommandos erlaubt oder verboten sind.

Abbildung 1: Mail an root
Abbildung 1: Mail an root

Das Programm hat noch weitere nützliche Parameter. Mit der Option -v (für englisch „validate“) verlängern Sie Ihr „Ticket“ um weitere Minuten (Standard ist bei den meisten Distributionen 15 Minuten). Möchten Sie Ihr Ticket einfach löschen, wählen Sie entweder sudo -k (für „kill“) oder sudo -K („sure kill“). Um als Administrator diesen Timeout zu verändern, können Sie in der /etc/sudoers einen Eintrag vornehmen:

LinuxUser 05/2002 KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland

Hinterlasse einen Kommentar

  E-Mail Benachrichtigung  
Benachrichtige mich zu: