![]() |
|
||||||||||||||||||||
|
|||||||||||||||||||||
|
|||||||||||||||||||||
su, sudoDoppelgängervon Heike Jurzik |
Dass Sie mit dem Befehl su - und der Eingabe des root-Passworts Administratorrechte erlangen, haben Sie schon gesehen, wenn Sie regelmäßig die Guru-Rubrik lesen; auch in anderen Artikeln taucht diese Vorgehensweise gelegentlich auf. su kann aber noch mehr: Sie können auch unter einer anderen Benutzerkennung arbeiten. Die Weitergabe des root-Passworts ist jedoch eine heikle Angelegenheit, wenn mehrere Benutzer Accounts auf dem Computer haben: Nicht jeder möchte dieses Geheimnis offenbaren, aber eventuell einzelnen Benutzern spezielle Administrationsrechte einräumen. Hier steht das Kommando sudo hilfreich zur Seite, mit dem Sie Benutzern gezielt root-Rechte für einzelne Befehle oder alle Anwendungen geben.
Das Kürzel "su" steht für "substitute user" ("Benutzer ersetzen/austauschen") übersetzen: su ist ein Programm, mit dem Sie auf der Kommandozeile schnell die Identität wechseln. Voraussetzung ist, dass Sie das Passwort des anderen Accounts kennen -- nur root darf sich ohne weitere Authentifizierung ein neues Kleid überstreifen.
Der grundlegende Befehlsaufruf lautet:
$ su benutzername Password:
Am Passwort-Prompt geben Sie anschließend das passende Kennwort ein -- beachten Sie, dass Sie es "blind" tippen müssen; er erscheinen keine Sternchen oder sonstige Platzhalter. Lassen Sie die Angabe des Benutzernamens weg, meldet su Sie als Administrator root an:
$ su Password: huhnix:/home/huhn #
Der veränderte Prompt weist schon darauf hin: Sie benutzen die Shell jetzt als Administrator. Ganz sicher finden Sie Ihre Identität mit dem Kommando whoami (englisch für "wer bin ich") heraus:
# whoami root
Zum Verlassen der root-Shell geben Sie exit oder logout ein; alternativ verwenden Sie die Tastenkombination [Strg-D]. Anschließend arbeiten Sie wieder unter Ihrer eigenen Benutzerkennung -- das sehen Sie auch daran, dass der Eingabe-Prompt wieder die gewohnte Form hat.
Der Prompt huhnix:/home/huhn # verrät: Beim einfachen Aufruf von su findet kein "richtiges" Einloggen als root statt -- Sie wechseln lediglich die Identität, nicht aber die so genannte Arbeitsumgebung. Die (manchmal) unerwünschten Folgen sind: Sie befinden sich noch im Home-Verzeichnis des eigenen Benutzers; auch die Umgebungsvariablen, welche u. a. das Verhalten der Shell und der in ihr gestarteten Programme beeinflussen, werden nicht richtig gesetzt, weil die Shell nicht die Login-Skript-Dateien ausführt.
Um dieses Problem zu umgehen, hängen Sie einfach ein Minuszeichen an den su-Befehl an; der anschließende Befehl pwd ("print working directory" -- "zeige das aktuelle Verzeichnis an") zeigt, dass Sie danach im Home-Verzeichnis des Administrators root sind:
$ su - Password: huhnix:~ # pwd /root
Wer sich darüber hinaus eine Bestätigung wünscht, dass sämtliche Variablen richtig gesetzt wurden, schaut sich mit dem Kommando env eine Liste der gesetzten Umgebungsvariablen an. ("env" ist kurz für das englische Wort "environment", Umgebung.) In der langen Liste sollten Sie nun Einträge finden, die bestätigen, dass Sie sich "richtig" eingeloggt haben (Abbildung 1).
Der Befehl su kann noch mehr: Sie können die Identität für ein einziges Kommando wechseln. Dazu geben Sie dem Kommando den Parameter -c mit auf den Weg. Die Log-Datei unter /var/log/messages beispielsweise ist auf den meisten Systemen für einfache Benutzer nicht lesbar:
$ less /var/log/messages /var/log/messages: Keine Berechtigung
Anstatt mit su zu root zu werden, dann den less-Befehl einzugeben und schließlich mit exit die Root-Shell wieder zu verlassen, setzen Sie einfach su -c ein:
su -c "less /var/log/messages"
Nach dem Verlassen des Pagers less mit [Q] (für englisch "quit") arbeiten Sie als normaler Benutzer weiter. Beachten Sie die Anführungszeichen im Beispiel, die den Befehlsaufruf less /var/log/messages einschließen. Ohne diese erhalten Sie eine Fehlermeldung:
$ su -c less /var/log/messages su: Benutzer /var/log/messages existiert nicht
Da passiert Folgendes: su betrachtet nur das Argument less als Kommando; die Zeichenkette /var/log/messages versteht su als Benutzername, und einen Benutzer mit diesem Namen gibt es natürlich nicht. Die Anführungszeichen sorgen dafür, dass less /var/log/messages zusammenhängend als Argument für die Option -c ausgewertet wird.
Linux protokolliert den su-Aufruf. So behalten Sie im Blick, welcher Benutzer wann su einsetzt. Auch ob das eingegebene Passwort gültig war und wie lange der Benutzer die mit su erworbenen Root-Rechte genutzt hat, steht im Log. Auf den meisten Systemen finden Sie diese Informationen in /var/log/messages. Achten Sie auf Einträge der Art:
Sep 9 12:48:23 huhnix su: (to root) huhn on /dev/pts/5 Sep 9 12:48:23 huhnix su: pam_unix2: session started for user root, service su Sep 9 12:53:06 huhnix su: pam_unix2: session finished for user root, service su ... Sep 9 14:49:55 huhnix su: FAILED SU (to root) huhn on /dev/pts/5
Der erste Eintrag verrät, dass Benutzer huhn mit su Adminrechte erlangt hat. In den nächsten beiden Zeilen steht, wann der Identitätswechsel stattfand und wann der Benutzer diese Sitzung beendet hat. Im letzten Beispieleintrag sehen Sie einen fehlgeschlagenen Anmeldeversuch -- auch hier wird die genaue Zeit mitprotokolliert.
Das Programm sudo ("substitute user, do") bietet eine elegante Möglichkeit, gezielt Benutzern und Gruppen von Benutzern Administrationsrechte zu geben, ohne dafür das root-Passwort zu verraten. Der Benutzer setzt sudo ganz einfach mit seinem eigenen Passwort ein und erhält für einen begrenzten Zeitraum das Recht, bestimmte Befehle so auszuführen, als wäre er der Administrator.
Voraussetzung ist, dass Sie als Administrator root die Datei /etc/sudoers entsprechend anpassen, auch das Paket sudo muss installiert sein. Sie bearbeiten diese Datei mit einem Text-Editor (wie Kate oder KWrite), rufen diesen Editor aber nicht direkt auf, sondern verwenden das Programm visudo. Es bietet folgende Vorteile: Die Datei ist während der Bearbeitung "gesperrt", d. h. niemand anders kann schreibend darauf zugreifen, und nach dem Abspeichern und Verlassen prüft das Programm die geänderte Datei und weist auf eventuelle Fehler hin.
Um die sudo-Konfiguration zu ändern, werden Sie zunächst in der Shell zu root. Unter SuSE Linux geben Sie dazu sux ein, bei den anderen Distributionen su. (Bei SuSE Linux ist die su-Variante sux notwendig, damit Sie anschließend noch grafische Anwendungen starten können.) Im nächsten Schritt starten Sie visudo mit einem Kommando der folgenden Form:
EDITOR=kwrite /usr/sbin/visudo
Wollen Sie statt kwrite einen anderen Editor verwenden, ändern Sie den Aufruf entsprechend ab, z. B. in
EDITOR=kate /usr/sbin/visudo
Nach kurzer Wartezeit erscheint ein Editor-Fenster mit der geöffneten sudo-Konfigurationsdatei. Wir zeigen Schritt für Schritt, wie Sie einem Benutzer uneingeschränkte root-Rechte einräumen.
Defaults targetpw %users ALL=(ALL) ALLUm diese auszukommentieren, setzen Sie je ein Rautezeichen "#" vor beide Zeilen.
# User privilege specification
root ALL=(ALL) ALL
# User privilege specification root ALL=(ALL) ALL huhn ALL=(ALL) ALL
Sehen Sie anschließend wieder den root-Prompt, hat alles geklappt. Sollten Sie sich an einer Stelle vertippt haben, beschwert sich visudo:
Warning: undeclared Host_Alias `LL' referenced near line 20 >>> sudoers file: syntax error, line 19 <<< What now?
An dieser Stelle haben Sie die Wahl: Geben Sie e ein, um zurück in den Editor zu gelangen, x, um die gemachten Änderungen in /etc/sudoers zu verwerfen, oder Q, um das Programm zu verlassen und die fehlerhaften Einträge zu akzeptieren.
Der Kasten "Sudo-Konfiguration im Vi-Modus" zeigt, wie Sie mit dem Standard-Editor von visudo, dem Klassiker vi, arbeiten, wenn Sie die EDITOR-Variable nicht setzen wollen.
| Sudo-Konfiguration im Vi-Modus |
|
Setzt man die EDITOR-Variable nicht, ruft visudo den klassischen Editor vi auf. Während die meisten Linux-Einsteiger diesen mächtigen Editor als "Hexenwerk" empfinden, ist die Bedienung eigentlich gar nicht so schwer. Was vi von anderen Text-Editoren unterscheidet, sind seine zwei Betriebsarten: Es gibt einen Eingabe- und einen Befehlsmodus. In den Eingabemodus gelangen Sie u. a., indem Sie [I] tippen. Die Statuszeile am unteren Rand zeigt dann -- EINFÜGEN -- -- jetzt können Sie Text eingeben. Wenn Sie den Eingabemodus über [Esc] verlassen, befinden Sie sich im Befehlsmodus. Hier erledigen Sie über verschiedene Tastaturkombinationen Editier-Aufgaben. Mit der folgenden Anleitung führen Sie die gleichen Anpassungen durch, wie sie im Artikel beschrieben wurden -- nur eben mit dem Editor vi.
Die anschließende Überprüfung der geänderten Datei läuft genauso ab, wie es im Artikel beschrieben wird. |
Jetzt darf der eingetragene Benutzer (im Beispiel ist das huhn) sudo für beliebige Kommandos nutzen, die dann mit Root-Rechten ausgeführt werden. Dazu stellen Sie das Kommando sudo einfach voran:
$ sudo less /var/log/messages
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these two things:
#1) Respect the privacy of others.
#2) Think before you type.
Password:
An dieser Stelle geben Sie Ihr Passwort ein -- nicht das root-Passwort. Für eine begrenzte Zeitdauer (Standard sind fünf Minuten) "merkt" sich das Programm sogar, dass Sie sich identifiziert haben. In dieser Zeit können Sie weitere Befehle zusammen mit sudo absetzen, ohne die Eingabe des Passwortes wiederholen zu müssen. Das Benutzerpasswort wird übrigens deswegen erfragt, damit nicht ein Fremder Ihren Computer mit Root-Rechten benutzen kann, wenn Sie z. B. eine kurze Pause machen und den Bildschirm nicht sperren. Der oben abgebildete Warnhinweis wird übrigens nur beim ersten sudo-Aufruf angezeigt, später erscheint nur noch die Passwortabfrage.
Indem Sie statt eines Befehls den Parameter -s an das sudo-Kommando anhängen, starten Sie eine root-Shell:
$ sudo -s Password: huhnix:/home/huhn #
Praktisch: Im Gegensatz zum Befehl su - können Sie nach sudo -c auch problemlos grafische Anwendungen starten (was bei SuSE Linux sonst nur über die Spezialvariante sux funktioniert). Und natürlich geht das auch in einem Rutsch: Möchten Sie Programme wie YaST nicht über das Menü starten, geben Sie als "Mitglied" von sudoers einfach sudo /sbin/yast2 auf der Kommandozeile oder in KDEs Schnellstarter, [Alt-F2], ein.
Auch der Einsatz des sudo-Kommandos wird vom System protokolliert. Sie finden die entsprechenden Einträge in der Regel in der Datei /var/log/messages, Fedora Core schreibt diese Hinweise nach /var/log/secure und nur die Fehlermeldungen nach messages.
Sep 11 21:10:47 huhnix sudo: huhn : TTY=pts/6 ; PWD=/home/huhn ; USER=root ; COMMAND=/usr/bin/less /var/log/messages
Anders als beim Einsatz von su verrät die Log-Datei in diesem Fall auch, welches Programm mit Root-Rechten ausgeführt wurde. sudo meldet aber noch mehr: Wer versucht, sudo ohne die nötigen Berechtigungen zu verwenden, darf sich nicht wundern, wenn der Administrator genau darüber informiert ist und beizeiten freundlich auf die erfolglosen "Einbruchsversuche" hinweist. Dass ein Benutzer nicht berechtigt ist, sudo auszuführen, erfährt er auch gleich selbst durch eine entsprechende Meldung auf der Konsole:
$ sudo less /var/log/messages Password: peggy is not in the sudoers file. This incident will be reported.
Zu Deutsch: "Benutzer peggy ist nicht berechtigt (nicht in /etc/sudoers eingetragen); dieser Vorfall wird an den Administrator gemeldet". Wenn jetzt der Benutzer root seine Mails das nächste Mal überprüft, sieht er genau, wann peggy erfolglos versucht hat, sudo aufzurufen -- die Mail hat darüber hinaus schön leserlich den Betreff "*** SECURITY information for huhnix ***" (Abbildung 2).
Weiter oben haben Sie gesehen, wie Sie in /etc/sudoers einem Benutzer globale "Root-Rechte" geben. Es geht allerdings auch spezifischer: So können Sie z. B. einen einzigen Befehl für einen oder mehrere Benutzer freigeben. Wer etwa das Kommando zum Ausschalten bzw. Rebooten (/sbin/shutdown) für den Account huhn freischalten möchte, trägt in /etc/sudoers ein:
huhn ALL = /sbin/shutdown
Auf ähnliche Weise räumen Sie einer ganzen Gruppe von Benutzern bestimmte Rechte ein. Dazu geben Sie zunächst eine durch Kommata getrennte Liste von Benutzernamen gefolgt von ALL ein, danach ein Gleichheitszeichen und als letztes das Kommando:
petronella,huhn ALL = /sbin/shutdown
Mit sudo lassen sich noch viele weitere Dinge anstellen -- Sie können die Sicherheit weiter herauf- oder heruntersetzen. So können Sie durch einen Eintrag der Form
Defaults timestamp_timeout = 0
Benutzer dazu zwingen, sich bei jedem sudo-Aufruf mit dem (eigenen) Passwort zu identifizieren. Passwörter lassen sich auf der anderen Seite auch ganz ausschalten: Mit dem Schlüsselwort NOPASSWD: haben schon viele Administratoren (unabsichtlich) Tür und Tore geöffnet.
Es gibt einige Punkte, die für den Einsatz von sudo anstelle von su sprechen: Das Root-Passwort bleibt in sicheren Händen, die gezielte Freigabe von Kommandos für einzelne Benutzer (-gruppen) ist praktisch und grafische Anwendungen lassen sich auch ganz unkompliziert mit root-Rechten starten. (hge)
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2013 Medialinx AG |
Last modified: 2007-01-25 17:27
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Admin-Magazin]
[Ubuntu User]
[Smart Developer]
[Linux Events]
[Linux Magazine]
[Ubuntu User]
[Admin Magazine]
[Smart Developer]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]