Sudo: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
(Der Seiteninhalt wurde durch einen anderen Text ersetzt: „*Sudo gentoo“)
Zeile 1: Zeile 1:
=Gentoo Sudo(ers) Anleitung=
+
*[[Sudo gentoo]]
 
 
 
 
==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 und Sie können die Berechtigungen anhand des Standorts an dem sich der Benutzer befindet genau festlegen: ob er direkt am System angemeldet ist oder über SSH von einem entfernten Rechner.
 
 
 
==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 Informatione
 
 
 
==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 (nicht über SSH) eingeloggt ist:
 
 
 
Befehlsauflistung 2.2: Praktisches Beispiel für /etc/sudoers
 
 
 
swift  localhost = /usr/bin/emerge
 
 
 
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: 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: 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: (Das Benutzerpasswort eingeben, nicht Root!)
 
 
 
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 : 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: 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 : 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.
 

Version vom 18. Januar 2018, 09:47 Uhr