Gentoo Sudo(ers) Anleitung
1.
Über Sudo
Rechte vergeben
Das Paket app-admin/sudo erlaubt es dem Admininstrator anderen Benutzern
Rechte auf eine oder mehrere Anwendungen zu vergeben, auf die sie normalerweise
keine Rechte hätten. Anstatt das setuid Bit für diese Anwendungen zu
setzen, bietet sudo eine präzise Kontrolle darüber wer wann
einen bestimmten Befehl ausführen darf.
Mit sudo kann man eine klare Liste erstellen, wer eine bestimmte
Anwendung ausführen darf. Würde man das setuid Bit setzen, könnte jeder
Benutzer die jeweilige Anwendung starten (bzw. jeder Benutzer einer bestimmten
Gruppe, je nach dem welche Berechtigungen vergeben wurden). Sie können (und
sollten sogar) vom Benutzer die Eingabe eines Passworts verlangen, wenn er
eine Anwendung ausführen will.
Aktivitäten protokollieren
Ein weiterer Vorteil von sudo ist, dass jeder Versuch (erfolgreich oder
nicht) eine Anwendung auszuführen, protokolliert werden kann. Das kann sehr
hilfreich sein, wenn man denjenigen finden will, der für diesen fatalen Fehler
verantwortlich ist, für dessen Beseitigung man 10 Stunden gebraucht hat :)
Sudo konfigurieren
Die sudo Konfiguration wird in /etc/sudoers verwaltet.
Diese Datei sollte man nie mit nano /etc/sudoers,
vim /etc/sudoers oder irgendeinem anderen Editor bearbeiten. Wenn
Sie diese Datei verändern wollen, sollte Sie immer visudo verwenden.
Dieses Werkzeug stellt sicher, dass diese Datei niemals von zwei
Systemadministratoren gleichzeitig bearbeitet wird, es erhält die Rechte der
Datei und überprüft die Syntax der Einstellungen um schwerwiegende Fehler zu
verhindern.
Über diese Anleitung
Diese Anleitung ist als kurze Einführung gedacht. Das sudo Paket ist
wesentlich mächtiger als das, was hier beschrieben wird. So gibt es spezielle
Funktionen zum Bearbeiten von Dateien als anderer Benutzer (sudoedit),
zum Einsatz innerhalb von Skripten (es läuft dann im Hintergrund und liest das
Passwort von der Standardeingabe anstatt von der Tastatur, ...) usw.
Bitte lesen Sie die sudo und sudoers manual Seiten für weitere
Informationen.
2.
Sudoers Syntax
Grundlegende Syntax
Der schwierigste Teil von sudo ist die Syntax in
/etc/sudoers. Die grundlegende Syntax lautet in etwa so:
Befehlsauflistung 2.1: Grundlegende Syntax in /etc/sudoers |
user host = commands
|
Diese Zeile teilt sudo mit, dass der Benutzer, festgelegt durch
user, von host aus eingeloggt, die Befehle die in
commands aufgelistet sind als root ausführen darf. Ein praxisnäheres
Beispiel macht es vielleicht verständlicher: Erlaube dem Benutzer swift
das Ausführen von emerge wenn er lokal eingeloggt ist:
Befehlsauflistung 2.2: Praktisches Beispiel für /etc/sudoers |
swift localhost = /usr/bin/emerge
|
Notiz:
Der Hostname muss mit der Ausgabe von hostname übereinstimmen.
|
Eine große Warnung ist allerdings angebracht: Erlauben Sie
keinem Benutzer eine Anwendung auszuführen, die dazu genutzt werden kann
weitere Zugriffsrechte zu erlangen. Zum Beispiel können Benutzer durch
emerge Rootzugriff aufs gesamte System erlangen, da emerge so
manipuliert werden kann, dass der Benutzer beliebige Dateien zu seinem Vorteil
verändern kann. Wenn Sie Ihren sudo Benutzern nicht vertrauen dann
gewähren Sie ihnen keine Rechte.
Der Name des Benutzers kann auch durch einen Gruppennamen ersetzt werden. In
dem Fall muss dem Gruppennamen ein % vorangestellt werden. Zum Beispiel
jeden in der Gruppe wheel dazu berechtigen emerge zu starten:
Befehlsauflistung 2.3: Der wheel-Gruppe das Ausführen von emerge erlauben |
%wheel localhost = /usr/bin/emerge
|
Anstatt für jedes Programm eine einzelne Zeile anzulegen, können die Einträge
auch erweitert werden. Zum Beispiel um dem Benutzer zu erlauben nicht nur
emerge sondern auch ebuild und emerge-webrsync als root
zu starten:
Befehlsauflistung 2.4: Mehrere Befehle |
swift localhost = /usr/bin/emerge, /usr/bin/ebuild, /usr/sbin/emerge-webrsync
|
Es ist auch möglich einen präzisen Befehl und nicht nur den Pfad zum Programm
selbst anzugeben. Dies kann dazu verwendet werden, um die Benutzung einer
Anwendung auf einen Satz von vorgeschriebenen Befehlsoptionen zu begrenzen. Das
Programm sudo erlaubt die Verwendung von Wildcards im Shell-Stil (auch
bekannt als Meta- oder Glob-Zeichen) für Pfadnamen, sowie auch
Befehlszeilenargumente in der sudoers-Datei. Beachten Sie bitte, dass dies
nicht reguläre Ausdrücke sind.
Lassen Sie uns das testen:
Befehlsauflistung 2.5: Versuch das System mit sudo zu updaten |
$ sudo emerge -uDN world
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
Password:
|
sudo verlangt das Passwort des Benutzers. Damit wird sichergestellt,
dass kein versehentlich offen gelassenes Terminal für bösartige Zwecke
missbraucht wird.
Sie sollten wissen, dass sudo die ${PATH} Variable nicht
verändert: Jeder Befehl den Sie nach sudo eingeben, geht von
Ihrer Umgebung aus. Will ein Benutzer zum Beispiel ein Programm in
/sbin ausführen, so muss er sudo den vollständigen Pfad
übergeben, etwa so:
Befehlsauflistung 2.6: Den vollständigen Pfad zu einem Programm angeben |
$ sudo /usr/sbin/emerge-webrsync
|
Aliase verwenden
In größeren Umgebungen kann es eine ermüdende Aufgabe sein alle Benutzer (oder
Hosts oder Befehle) immer und immer wieder einzugeben. Um die Administration
von /etc/sudoers zu vereinfachen können Sie Aliase
definieren. Das Format um Aliase festzulegen ist ziemlich einfach:
Befehlsauflistung 2.7: Aliase in /etc/sudoers definieren |
Host_Alias hostalias = hostname1, hostname2, ...
User_Alias useralias = user1, user2, ...
Cmnd_Alias cmndalias = command1, command2, ...
|
Ein Alias der immer und an jeder Stelle funktioniert, ist der ALL Alias
(Um Aliase von Nicht-Aliasen deutlich zu unterscheiden, wird empfohlen Aliase
in großen Buchstaben zu schreiben). Wie Sie sich vielleicht denken können, ist
ALL ein Alias für alle möglichen Einstellungen.
Ein Anwendungsbeispiel des ALL Alias, dass jedem lokal
angemeldetem Benutzer erlaubt shutdown auszuführen:
Befehlsauflistung 2.8: Jedem Benutzer erlauben shutdown auszuführen |
ALL localhost = /sbin/shutdown
|
Ein weiteres Beispiel ist dem Benutzer swift zu erlauben emerge
als root auszuführen, egal von wo aus er angemeldet ist:
Befehlsauflistung 2.9: Einem Benutzer ortsunabhängig erlauben eine Anwendung auszuführen |
swift ALL = /usr/bin/emerge
|
Interessanter ist es eine Liste von Benutzern festzulegen, die Anwendungen zur
Softwareverwaltung (wie emerge und ebuild) auf dem System
ausführen dürfen und eine Gruppe von Administratoren, die die Passwörter aller
Benutzer (root ausgenommen) ändern dürfen.
Befehlsauflistung 2.10: Aliase für Benutzer und Befehle |
User_Alias SOFTWAREMAINTAINERS = swift, john, danny
User_Alias PASSWORDMAINTAINERS = swift, sysop
Cmnd_Alias SOFTWARECOMMANDS = /usr/bin/emerge, /usr/bin/ebuild
Cmnd_Alias PASSWORDCOMMANDS = /usr/bin/passwd [a-zA-Z0-9_-]*, !/usr/bin/passwd root
SOFTWAREMAINTAINERS localhost = SOFTWARECOMMANDS
PASSWORDMAINTAINERS localhost = PASSWORDCOMMANDS
|
Ausführen als anderer Benutzer (nicht root)
Es ist auch möglich einen Benutzer eine Anwendung als ein anderer Benutzer
(nicht root) auszuführen zu lassen. Das kann interessant sein, wenn man Dienste
als anderer Benutzer ausführt (wie apache für den Webserver) und man
bestimmten Benutzern erlauben will administrative Aufgaben als dieser Benutzer
auszuführen (wie das Killen von Zombieprozessen).
In /etc/sudoers listen Sie die Benutzer zwischen
( und ) vor der Auflistung der Befehle auf:
Befehlsauflistung 2.11: Syntax zum Ausführen als anderer Benutzer |
users hosts = (run-as) commands
|
Um beispielsweise swift zu erlauben das Programm kill als
Benutzer apache oder gorg auszuführen:
Befehlsauflistung 2.12: Beispiel für Ausführung als anderer Benutzter |
Cmnd_Alias KILL = /bin/kill, /usr/bin/pkill
swift ALL = (apache, gorg) KILL
|
Mit diesen Einstellungen kann der Benutzer sudo -u aufrufen um den
Benutzer auszuwählen als der er die Anwendung ausführen will:
Befehlsauflistung 2.13: Starten von pkill als apache-Benutzer |
$ sudo -u apache pkill apache
|
Mit der Runas_Alias Direktive können Sie für die Benutzer, unter deren
Namen die Anwendung ausgeführt werden soll, ebenfalls Aliase anlegen. Die
Benutzung ist identisch zu den anderen _Alias Direktiven, die wir vorher
behandelt haben.
Passwörter und Standardeinstellungen
Standardmäßig fordert sudo den Benutzer auf sich mit seinem eigenen
Passwort zu identifizieren. Ist das Passwort einmal eingegeben, merkt
sudo es sich für 5 Minuten um den Benutzer nicht durch andauernde
Passwortabfragen von der Arbeit abzuhalten.
Natürlich kann dieses Verhalten geändert werden: Sie können die
Defaults: Direktive in /etc/sudoers setzen, um das
Verhalten für die einzelnen Benutzer zu ändern.
Um zum Beispiel die standardmäßigen 5 Minuten auf 0 (nicht merken) zu
verändern:
Befehlsauflistung 2.14: Den Wert für das Timeout ändern |
Defaults:swift timestamp_timeout=0
|
Mit der Einstellung -1 wird das Passwort unendlich lange gemerkt (bis
das System neu gestartet wird).
Durch eine weitere Einstellung, kann vom Benutzer anstelle des eigenen
Passworts, das des Benutzers unter dessen Namen der Befehl ausgeführt werden
soll, verlangt werden. Dies wird mit runaspw erreicht. Im folgenden
Beispiel wird außerdem die Anzahl der Versuche für die Passworteingabe (wie oft
ein Benutzer das Passwort erneut eingeben kann, bevor sudo abbricht) auf
2 statt der normalen 3 gesetzt.
Befehlsauflistung 2.15: Verlangen des root-Passworts anstelle des Benutzerpassworts |
Defaults:john runaspw, passwd_tries=2
|
Ein anderes interessantes Feature ist das Beibehalten der DISPLAY
Variable, so dass man grafische Programme ausführen kann:
Befehlsauflistung 2.16: Die DISPLAY-Variable erhalten |
Defaults:john env_keep=DISPLAY
|
Sie können etliche Standardeinstellungen über die Defaults: Direktive
ändern. Lesen Sie dazu die sudo Manual-Seiten und suchen nach
Defaults.
Wenn Sie einem Benutzer das Ausführen von Befehlen ohne vorherige
Passworteingabe erlauben wollen, ist NOPASSWD: erforderlich:
Befehlsauflistung 2.17: emerge als root erlauben, ohne dass nach einem Passwort gefragt wird |
swift localhost = NOPASSWD: /usr/bin/emerge
|
3.
Sudo benutzen
Berechtigungen anzeigen
Um sich von seinen eigenen Möglichkeiten ein Bild zu machen, verwendet man
sudo -l:
Befehlsauflistung 3.1: Möglichkeiten anzeigen |
$ sudo -l
User swift may run the following commands on this host:
(root) /usr/libexec/xfsm-shutdown-helper
(root) /usr/bin/emerge
(root) /usr/bin/passwd [a-zA-Z0-9_-]*
(root) !/usr/bin/passwd root
(apache) /usr/bin/pkill
(apache) /bin/kill
|
Wenn Sie einen Befehl in /etc/sudoers haben, der die Eingabe eines
Passworts nicht erfordert, wird auch zum Anzeigen der Einträge kein Passwort
nötig sein. Andernfalls werden Sie zur Eingabe des Passworts aufgefordert, wenn
sich sudo nicht mehr daran erinnert.
Verlängern des Passwort Timeouts
Normalerweise merkt sudo sich das Passwort für 5 Minuten, nachdem es der
Benutzer eingegeben hat. Um diese Frist zu verlängern, kann sudo -v
aufgerufen werden. Der Zeitstempel wird dann zurückgesetzt, so dass sudo
erst nach weiteren 5 Minuten wieder nach dem Passwort fragt.
Befehlsauflistung 3.2: Die Frist des Passworts verlängern |
$ sudo -v
|
Umgekehrt kann der Zeitstempel mit sudo -k gelöscht werden.
Die Inhalte dieses Dokuments sind, sofern nicht explizit
anders genannt, unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert. Die Gentoo Name and Logo
Usage Guidelines treffen zu.
|