
Das IT-Magazin der ORDIX AG mit Fachbeiträgen zu Datenbanken, Unix und Java/XML.
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.
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).
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!)
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.).
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.
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.
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:
May 28 22:30:37 corrado sudo:
Mai 28 22:30:37 corrado su: (to kwp) root on /dev/pts/8 Mai 28 22:30:37 corrado PAM-unix2[11622]:
May 28 22:30:41 corrado sudo:
May 28 22:30:45 corrado sudo:
Mai 2822:30:49 corrado PAM-unix2[11622]:
May 2822:30:54 corrado sudo:
May 2822:32:16 corrado sudo:
May 2822:33:15 corrado sudo:
|
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).