Home ORDIX AG             Dienstleistung             Trainingsshop    Kunden / Referenzen Aktuelles    Kontakt
Home  Pfeil  ORDIX News  Pfeil  3/2002
suche: 

ORDIX News Archiv

Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.

Sudo - Im Auftrag des Herrn ...

Sudo bietet "normalen" Benutzern die Möglichkeit, bestimmte Programme unter einer anderen Kennung auszuführen. Besonders interessant sind hierbei Administrationskommandos, die ausschließlich über den Root-Account laufen.

Wie kann man z. B. die User-Verwaltung an einen bestimmten Benutzer delegieren, sprich: es jemandem ermöglichen, Accounts anzulegen und zu löschen, ohne dafür jedes Mal das Root-Passwort preiszugeben oder umzusetzen?

Dieser Artikel zeigt das Konzept von sudo auf, nennt dessen Vor- und Nachteile, und erläutert, wie man das Tool sinnvoll einsetzt.

Quellen und Tools

Wenn sich die Software noch nicht auf dem System befindet, oder wenn die vorhandene Version zu alt und/oder mit bekannten Fehlern behaftet ist, kann man sich die aktuellen Quellen aus dem Internet besorgen (Version 1.6.6; Todd Millers Kurtisanen-Seite http://www.courtesan.com/sudo). Hier gibt es auch Hinweise zu weiteren Tools im sudo-Umfeld, zu bekannten Sicherheitslücken und deren Bugfixes.

Password:
Sudo version 1.6.3

Authentication methods: 'pam'
Syslog facility if syslog is being used for logging: auth
Syslog priority to use when user authenticates successfully: notice
Syslog priority to use when user authenticates unsuccessfully: alert
Ignore '.' in $PATH
Send mail if the user is not in sudoers
Use a separate timestamp for each user/tty combo
Lecture user the first time they run sudo
Require users to authenticate by default
Root may run sudo
Set $HOME to the target user when starting a shell with -s
Allow some information gathering to give useful error messages
Insult the user when they enter an incorrect password
Visudo will honor the EDITOR environment variable
Set the LOGNAME and USER environment variables
Length at which to wrap log file lines (0 for no wrap): 80
Authentication timestamp timeout: 5 minutes
Password prompt timeout: 5 minutes
Number of tries to enter a password: 3
Umask to use or 0777 to use user's: 022
Path to mail program: /usr/sbin/sendmail
Flags for mail program: -t
Address to send mail to: root
Subject line for mail messages: *** SECURITY information for %h ***
Incorrect password message: Sorry, try again.
Path to authentication timestamp dir: /var/run/sudo
Default password prompt: Password:
Default user to run commands as: root
Path to the editor for use by visudo: /usr/bin/vi
When to require a password for 'list' pseudocommand: any
When to require a password for 'verify' pseudocommand: all
Abb.1: Beispiel für Standardeinstellungen unter SuSE 7.3

Neben den gängigsten Betriebssystemen (Solaris, HP-UX, AIX, RU, Linux, ...) werden ebenfalls eine Reihe von „Exoten" unterstützt. Im Einzelfall lässt sich unter o.g. Webadresse klären, ob das eigene System dabei ist. Alternativ zu den Quellen gibt es häufig auch vorkompilierte Software, bzw. installierbare SW-Pakete.

Übersetzen und Installieren

Sind die Quellen heruntergeladen und entpackt, beginnt die Konfiguration. Dazu wird zunächst das configure-Script angestoßen, welches das eigentliche Makefile erzeugt. Mit make und make install werden die Quellen übersetzt, bzw. das Kompilat installiert. Das configure-Script kennt eine Fülle von Schaltern, über die man sich mit configure --help einen Überblick verschaffen kann. Einige der hier festgelegten Eigenschaften lassen sich auch später noch zur Laufzeit konfigurieren (s. u.).

Befindet sich bereits ein entsprechendes Paket auf dem System, so verschafft man sich zunächst Klarheit darüber, mit welcher Version man es zu tun hat. sudo -V zeigt dem normalen Benutzer an, welche Version installiert ist; unter der root-Kennung ausgeführt, erfährt man darüber hinaus, welche Eigenschaften in das Programm einkompiliert wurden (siehe Abb. 1).

Divide et Impere

Nun kann es an die Aufgabenverteilung gehen! Die zentrale (und einzige) Konfigurationsdatei ist
/etc/sudoers. Hierin wird festgelegt, wer was darf (Vergabe von Zusatzrechten). Des weiteren kann über eine Reihe von Parametern das Verhalten von sudo eingestellt werden.

Es gibt es drei Typen von Einträgen:

1. Anpassen von Default-Werten,
2. Definition von Aliasen und
3. Vergabe von Berechtigungen.

Die folgenden Besonderheiten können in /etc/sudoers verwendet werden:

- ALL ist ein built-in-alias
- Unterstützung von Shell-Wildcards
- ! als Negationsoperator bei Aliasen und vor Kommandos (Achtung: ALL in Kombination mit ! kann schnell zu einem Eigentor führen!)

1. Defaults

Durch Zeilen, die mit dem Schlüsselwort Defaults beginnen, werden die einkompilierten Standards übersteuert. sudo -L erzeugt eine Liste aller möglichen Parameter. Beispiel:

Defaults:BOSS  !insults
Defaults       badpass_message="Falsches Passwort!"

Password:
You type like i drive.
Password:
Do you think like you type?
Password:
Are you on drugs?
Password:
What, what, what, what, what, what, what, what, what, what?
Password:
Your mind just hasn't been the same since the electro-shock, has it?
Password:
I've seen penguins that can type better than that.
Password:
Speak English you fool --- there are no subtitles in this scene.
...
Abb.2: Vorsicht bei "Insulting" - Die "Reaktionen" auf falsche Passworte mögen recht amüsant sein, sind aber nicht jedermanns Sache! Hier eine kleine Kostprobe.

Die erste Zeile mit dem vorangestellten Schlüsselwort Defaults sorgt dafür, dass die Mitglieder der Gruppe BOSS nicht vom System beschimpft werden, wenn sie ein falsches Passwort eingeben. Stattdessen wird durch Zeile 2 die neutrale Meldung „Falsches Passwort!" bevorzugt (siehe Abb. 2.).

2. Aliase

Die Aliasdefinitionen dienen der einfacheren Handhabung und zur Zusammenfassung von Objekten. Sudo kennt vier Typen von Aliasen:

- User_Alias
- Runas_Alias
- Host_Alias
- Cmnd_Alias

Ein Alias definiert sich durch die Zuordnung von Werten, die selbst auch Alias sein können. Beispiel:

In der ersten Zeile wird der User Alias BOSS durch die User ts und rn definiert; in der Zeile darunter wird ein Alias ROOTADM definiert, dem alle angehören, die in der Gruppe root oder admin sind, sowie der User alex und die User, die als BOSS eingetragen sind.

Die nächsten vier Zeilen definieren je einen Kommando-Alias, der in der darauffolgenden Zeile als Alias RLCHANGE zusammengefasst wird.

Über den Alias USBIN werden alle Kommandos unter /usr/sbin verfügbar. Bei generellen Freigaben dieser Art sollte man sich aber über die Konsequenzen und möglichen Gefahren im Klaren sein: Es wird jemandem mit dieser Erlaubnis nicht schwer fallen, eine uneingeschränkte Root-Berechtigung zu erlangen, z. B. wenn er ein Kommando startet, aus dem selbst wieder eine Shell gestartet werden kann!

Der Alias USERCMD erlaubt das Anlegen von Benutzern, aber auch das Löschen von Accounts - mit Ausnahme des root-Accounts. In ähnlicher Weise verfahren Host Aliase: Sie fassen Maschinen zu Klassen zusammen.

3. Berechtigungen

Die Einträge erfolgen gemäß folgendem Muster „Wem ist auf welchem Rechner (unter welcher Kennung) was erlaubt?", oder symbolisch:

<User> <Rechner> = <(Kennung)> <Kommando>
Beispiel:
ROOTADM ALL = (ALL) ALL
BOSS ALL = NOPASSWD: ALL

Alle Benutzer, die ROOTADM zugeordnet sind, dürfen auf allen Systemen alle Kommandos ausführen (1. Zeile); ebenso alle Personen, die dem Alias BOSS zugeordnet sind, allerdings brauchen diese sich nicht zu authentifizieren (2. Zeile)!

Achtung: Zum Editieren der sudoers-Datei sollte das im Paket enthaltene Programm visudo benutzt werden. Zum einen wird dadurch eine Sperre auf die Datei gesetzt und zum anderen führt es eine Syntaxprüfung nach dem Editieren durch.

Wie der Name schon andeutet, wird hierbei standardmäßig der vi benutzt. Wer das nicht mag, sollte beim configure-Lauf den Schalter --with-editor=PATH setzen, wobei PATH der Pfad zu dem Editor der Wahl ist. Alternativ kann man auch dafür sorgen, dass sudo die EDITOR-Variable aus der Umgebung auswertet.

Just Do It!

Damit der Benutzer nun ein per sudo freigegebenes (Superuser-) Kommando ausführen kann, stellt man dem Kommando ein „sudo" voran. Wer seine sudo-Rechte einsehen möchte, sollte als erstes ein sudo -l ausprobieren. Anschließend wird man aufgefordert, ein Passwort einzugeben. Hierbei ist das eigene gemeint!

Dieser Mechanismus kann dem Missbrauch von offenen, aber verlassenen Sitzungen vorbeugen. Ist die Authentifizierung erfolgreich verlaufen, wird das Kommando unter den entsprechenden Rechten ausgeführt.

Damit nicht bei jedem sudo-Kommando das Passwort eingegeben werden muss, wird die Authentifizierungszeit festgehalten (/var/run/<user>). Nur wenn innerhalb einer bestimmten Zeit (default: 5min; configure-Schalter --with-timeout, bzw. über Parameter passwd-timout in der sudoers-Datei modifizierbar) kein weiteres sudo-Kommando abgesetzt wird, muss beim nächsten Mal wieder authentifiziert werden.

Dieser Zeitstempel kann auch einfach durch das ansonsten „leere" Kommando sudo -v aktualisiert werden, bzw. direkt gelöscht werden (sudo -k), was z. B. in einem logout-Script sinnvoll ist.

Die Benutzung des sudo-Kommandos wird vom syslogd mitprotokolliert (Abb. 3). Dabei wird local2.notice bzw. local2.alert verwendet, und kann bei Bedarf angepasst werden.

... May 28 22:17:35 corrado -- MARK --

May 28 22:30:26 corrado sudo:
rn: TTY=pts/8; PWD=/tmp/sudo-1.6.6; USER=root; COMMAND=list

May 28 22:30:37 corrado sudo:
rn: TTY=pts/8; PWD=/tmp/sudo-1.6.6; USER=root; COMMAND=/bin/su - kwp

Mai 28 22:30:37 corrado su: (to kwp) root on /dev/pts/8

Mai 28 22:30:37 corrado PAM-unix2[11622]:
session started for user kwp, service su

May 28 22:30:41 corrado sudo:
kwp: command not allowed; TTY=pts/8; PWD=/home/kwp; USER=root; COMMAND=list

May 28 22:30:45 corrado sudo:
kwp: command not allowed; TTY=pts/8; PWD=/home/kwp; USER=root; COMMAND=validate

Mai 2822:30:49 corrado PAM-unix2[11622]:
session finished for user kwp, servicesu

May 2822:30:54 corrado sudo:
rn: TTY=pts/8; PWD=/tmp/sudo-1.6.6; USER=root; COMMAND=validate

May 2822:32:16 corrado sudo:
rn: TTY=pts/8; PWD=/tmp/sudo-1.6.6; USER=root; COMMAND=/usr/bin/tail -f/var/log/messages

May 2822:33:15 corrado sudo:
rn: TTY=pts/2; PWD=/home/rn; USER=root; COMMAND=/bin/ls
...

Fazit

Sudo ist eine freie Software. Es stellt ein kompaktes und einfach zu handhabendes Tool dar. Durch die Verfügbarkeit auf diversen Plattformen ist es (fast) universell einsetzbar. Es ist sehr flexibel konfigurierbar und ermöglicht eine ebenfalls sehr differenzierte Rechtevergabe. Hierbei muss natürlich mit entsprechender Sorgfalt vorgegangen werden, um keine ungewollten Freiheiten zu eröffnen!

Es eignet sich somit besonders gut dafür, Administrationsaufgaben auf mehrere Schultern zu verteilen. Durch das explizite und ausführliche Loggen der sudo-Kommandos lassen sich die Aktionen gut nachvollziehen.

Zu weiteren Details sei auf die mitgelieferten, ausführlichen „man pages" hingewiesen, die ebenfalls jede Menge Beispiele parat halten.

Roger Niemeyer (info@ordix.de).