2 sudo #
Viele Kommandos und Systemdienstprogramme müssen als root ausgeführt werden, um Dateien zu bearbeiten und/oder Tasks auszuführen, für die nur der Superuser berechtigt ist. Aus Sicherheitsgründen und um das unbeabsichtigte Ausführen gefährlicher Kommandos zu vermeiden, ist es allgemein ratsam, sich nicht direkt als root anzumelden. Stattdessen wird empfohlen, als normaler, nicht privilegierter Benutzer zu arbeiten und das sudo-Kommando zum Ausführen von Kommandos mit erhöhten Berechtigungen zu verwenden.
Auf SUSE Linux Enterprise Server ist sudo standardmäßig auf eine ähnliche Funktionsweise wie „su“ konfiguriert. Jedoch bietet sudo die Möglichkeit, Benutzern das Ausführen von Kommandos mit Berechtigungen jedes anderen Benutzers mit umfassenden Konfigurationsmöglichkeiten zu erlauben. Dies kann dazu genutzt werden, Rollen mit bestimmten Berechtigungen bestimmten Benutzern und Gruppen zuzuweisen. Es ist beispielsweise möglich, Mitgliedern der Gruppe users das Ausführen eines Kommandos mit den Berechtigungen von wilber zu erlauben. Der Zugriff auf das Kommando kann zusätzlich eingeschränkt werden, indem beispielsweise das Angeben jeglicher Kommandooptionen verboten wird. Während „su“ immer das root-Passwort für die Authentifizierung mit PAM erfordert, kann sudo für die Authentifizierung mit Ihren eigenen Berechtigungsnachweisen konfiguriert werden. Dies erhöht die Sicherheit, da das root-Passwort nicht freigegeben werden muss. Sie können Mitgliedern der Gruppe users beispielsweise erlauben, ein frobnicate-Kommando als wilber auszuführen, mit der Einschränkung, dass keine Argumente angegeben werden. Dies kann dazu genutzt werden, Rollen mit bestimmten Funktionen bestimmten Benutzern und Gruppen zuzuweisen.
2.1 Grundlegende Verwendung von sudo #
sudo ist einfach zu verwenden und dabei sehr funktionsreich.
2.1.1 Ausführung eines einzelnen Kommandos #
Wenn Sie als normaler Benutzer angemeldet sind, können Sie alle Befehle als root ausführen, indem Sie sudo vor den Befehl setzen. Eine Eingabeaufforderung für das root-Passwort erscheint und bei erfolgreicher Authentifizierung wird das Kommando als root ausgeführt:
tux >id -un1 tuxtux >sudo id -unroot's password:2 roottux >id -untux3tux >sudo id -un4 root
Das Kommando | |
Das Passwort wird bei der Eingabe weder als Klartext noch durch Punkte angezeigt. | |
Nur Kommandos, die mit | |
Für einen begrenzten Zeitraum müssen Sie das |
Die E/A-Umleitung funktioniert nicht so, wie Sie es wahrscheinlich erwarten:
tux >sudo echo s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission deniedtux >sudo cat < /proc/1/maps bash: /proc/1/maps: Permission denied
Nur die echo-/cat-Binärdatei wird mit erhöhten Berechtigungen ausgeführt. Die Umleitung erfolgt über die Shell des Benutzers mit Benutzerberechtigungen. Sie können entweder eine Shell starten, wie in Abschnitt 2.1.2, „Starten einer Shell“ beschrieben, oder stattdessen das Dienstprogramm dd verwenden:
echo s | sudo dd of=/proc/sysrq-trigger sudo dd if=/proc/1/maps | cat
2.1.2 Starten einer Shell #
Es kann mühselig sein, jedem Befehl sudo voranstellen zu müssen. Sie könnten eine Shell als sudo bash-Kommando angeben. Es wird jedoch empfohlen, einen der integrierten Mechanismen zum Starten einer Shell zu verwenden:
sudo -s (<Kommando>)Startet eine von der Umgebungsvariablen
SHELLangegebene Shell oder die Standard-Shell des Zielbenutzers. Wird ein Kommando angegeben, wird es an die Shell übergeben (mit der Option-c), sonst wird die Shell im interaktiven Modus ausgeführt.tux:~ >sudo -i root's password:root:/home/tux #exittux:~ >sudo -i (<Kommando>)Wie
-s, startet die Shell jedoch als Login-Shell. Dies bedeutet, dass die Startdateien der Shell (.profileusw.) verarbeitet werden und das aktuelle Home-Verzeichnis als Basisverzeichnis des Zielbenutzers festgelegt wird.tux:~ >sudo -i root's password:root:~ #exittux:~ >
2.1.3 Umgebungsvariablen #
Standardmäßig gibt sudo keine Umgebungsvariablen weiter:
tux >ENVVAR=test env | grep ENVVAR ENVVAR=testtux >ENVVAR=test sudo env | grep ENVVAR root's password: 1tux >
Die leere Ausgabe zeigt, dass die Umgebungsvariable |
Dieses Verhalten kann mit der Option env_reset geändert werden. Siehe Tabelle 2.1, „Hilfreiche Flags und Optionen“.
2.2 Konfigurieren von sudo #
sudo ist ein sehr flexibles Werkzeug mit umfassenden Konfigurationsmöglichkeiten.
Wenn Sie sich versehentlich aus sudo ausgesperrt haben, öffnen Sie mit su - und dem root-Passwort eine Root-Shell. Beheben Sie den Fehler mit visudo.
2.2.1 Bearbeiten der Konfigurationsdateien #
Die Hauptkonfigurationsdatei mit den Richtlinien für sudo ist /etc/sudoers. Da es möglich ist, sich selbst aus dem System auszusperren, wenn in dieser Datei Fehler enthalten sind, wird dringend empfohlen, visudo zum Bearbeiten zu verwenden. Gleichzeitige Änderungen an der geöffneten Datei werden so verhindert und es wird vor dem Speichern der Änderungen auf Syntaxfehler geprüft.
Trotz des Namens können Sie andere Editoren als „vi“ verwenden, indem Sie die Umgebungsvariable EDITOR festlegen. Beispiel:
sudo EDITOR=/usr/bin/nano visudo
Die Datei /etc/sudoers selbst hingegen wird von den Systempaketen bereitgestellt und Änderungen können bei Aktualisierungen verloren gehen. Daher wird empfohlen, benutzerdefinierte Konfigurationen in Dateien im Verzeichnis /etc/sudoers.d/ abzulegen. Jede Datei in diesem Verzeichnis ist automatisch eingeschlossen. Um eine Datei in diesem Unterverzeichnis zu erstellen oder zu bearbeiten, führen Sie das folgende Kommando aus:
sudo visudo -f /etc/sudoers.d/NAME
Alternativ mit einem anderen Editor (beispielsweise nano):
sudo EDITOR=/usr/bin/nano visudo -f /etc/sudoers.d/NAME
/etc/sudoers.d
Das Kommando #includedir in /etc/sudoers, das für /etc/sudoers.d verwendet wird, ignoriert Dateien, die mit einer Tilde (~) enden oder einen Punkt (.) enthalten.
Führen Sie man 8 visudo aus, um weitere Informationen zum Kommando visudo zu erhalten.
2.2.2 Basiskonfigurationssyntax von sudoers #
In den sudoers-Konfigurationsdateien gibt es zwei Optionstypen: Strings und Flags. Strings können beliebige Werte enthalten, Flags hingegen können nur aktiviert (ON) oder deaktiviert (OFF) werden. Die wichtigsten Syntaxkonstrukte für sudoers-Konfigurationsdateien sind:
# Everything on a line after a # gets ignored 1 Defaults !insults # Disable the insults flag 2 Defaults env_keep += "DISPLAY HOME" # Add DISPLAY and HOME to env_keep tux ALL = NOPASSWD: /usr/bin/frobnicate, PASSWD: /usr/bin/journalctl 3
Es gibt zwei Ausnahmen: | |
Entfernen Sie das Ausrufezeichen ( | |
|
Optionsname |
Beschreibung |
Beispiel |
|---|---|---|
targetpw
|
Dieses Flag steuert, ob der aufrufende Benutzer das Passwort des Zielbenutzers (ON) (beispielsweise |
Defaults targetpw # Turn targetpw flag ON |
rootpw
|
Falls |
Defaults !rootpw # Turn rootpw flag OFF |
env_reset
|
Ist diese Option festgelegt, richtet |
Defaults env_reset # Turn env_reset flag ON |
env_keep
|
Eine Liste der Umgebungsvariablen, die beizubehalten sind, wenn für das Flag |
# Set env_keep to contain EDITOR and PROMPT Defaults env_keep = "EDITOR PROMPT" Defaults env_keep += "JRE_HOME" # Add JRE_HOME Defaults env_keep -= "JRE_HOME" # Remove JRE_HOME |
env_delete
|
Eine Liste der Umgebungsvariablen, die zu löschen sind, wenn für das Flag |
# Set env_delete to contain EDITOR and PROMPT Defaults env_delete = "EDITOR PROMPT" Defaults env_delete += "JRE_HOME" # Add JRE_HOME Defaults env_delete -= "JRE_HOME" # Remove JRE_HOME |
Das Token Defaults kann auch zum Erstellen von Aliassen für eine Sammlung von Benutzern, Hosts oder Kommandos verwendet werden. Außerdem ist es möglich, eine Option anzuwenden, die nur für eine bestimmte Reihe von Benutzern gültig ist.
Genauere Informationen zur Konfigurationsdatei /etc/sudoers erhalten Sie mit dem Kommando man 5 sudoers.
2.2.3 Regeln in sudoers #
Die Regeln in der sudoers-Konfiguration können sehr komplex sein. In diesem Abschnitt werden daher nur die Grundlagen abgedeckt. Jede Regel befolgt ein Basisschema ([] markiert optionale Teile):
#Who Where As whom Tag What User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
User_ListEine oder mehrere Kennungen (getrennt durch
,): Entweder ein Benutzername, eine Gruppe im Format%GROUPNAMEoder eine Benutzer-ID im Format#UID. Eine Negation erzielen Sie mit dem Präfix!Host_ListEine oder mehrere Kennungen (getrennt durch
,): Entweder ein (vollständig qualifizierter) Hostname oder eine IP-Adresse. Eine Negation erzielen Sie mit dem Präfix!ALList die übliche Option fürHost_List.NOPASSWD:|PASSWD:Der Benutzer wird nicht aufgefordert, ein Passwort einzugeben, wenn Kommandos ausgeführt werden, die
CMDSPECnachNOPASSWD:entsprechen.PASSWDist der Standardwert. Er muss nur angegeben werden, wenn beide Werte in der gleichen Zeile sind:tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_ListEine oder mehrere Kennungen (getrennt durch
,): Ein Pfad zu einer ausführbaren Datei, gefolgt von erlaubten Argumenten oder keinen weiteren Angaben./usr/bin/foo # Anything allowed /usr/bin/foo bar # Only "/usr/bin/foo bar" allowed /usr/bin/foo "" # No arguments allowed
ALL kann als User_List, Host_List und Cmnd_List verwendet werden.
Eine Regel, die es tux erlaubt, alle Kommandos als „root“ ohne Eingabe des Passworts auszuführen:
tux ALL = NOPASSWD: ALL
Eine Regel, die es tux erlaubt, systemctl restart apache2 auszuführen:
tux ALL = /usr/bin/systemctl restart apache2
Eine Regel, die es tux erlaubt, wall als admin ohne Argumente auszuführen:
tux ALL = (admin) /usr/bin/wall ""
Konstrukte des Typs
ALL ALL = ALL
dürfen nicht ohne Defaults targetpw verwendet werden, sonst kann jeder Kommandos als root ausführen.
2.3 Häufige Einsatzmöglichkeiten #
Obwohl die Standardkonfiguration oft für einfache Konfigurationen und Desktopumgebungen ausreicht, können benutzerdefinierte Konfigurationen sehr hilfreich sein.
2.3.1 Verwenden von sudo ohne root-Passwort #
In Anwendungsfällen mit besonderen Einschränkungen („Benutzer X kann Kommando Y nur als root“ ausführen) ist dies nicht möglich. In anderen Fällen ist es weiterhin vorteilhaft, eine Art Trennung zu haben. Grundsätzlich können Mitglieder der Gruppe wheel alle Kommandos mit sudo als „root“ ausführen.
Fügen Sie sich selbst zur Gruppe
wheelhinzu.Ist Ihr Benutzerkonto nicht bereits Mitglied der Gruppe
wheel, fügen Sie es hinzu, indem Siesudo usermod -a -G wheel BENUTZERNAMEausführen und sich ab- und wieder anmelden. Überprüfen Sie, ob die Änderung erfolgreich war, indem Siegroups BENUTZERNAMEausführen.Legen Sie die Authentifizierung mit dem Passwort des aufrufenden Benutzers als Standard fest.
Erstellen Sie die Datei
/etc/sudoers.d/userpwmitvisudo(siehe Abschnitt 2.2.1, „Bearbeiten der Konfigurationsdateien“) und fügen Sie Folgendes hinzu:Defaults !targetpw
Wählen Sie eine neue Standardregel aus.
Je nachdem, ob Sie möchten, dass Benutzer ihre Passwörter erneut eingeben oder nicht, entfernen Sie das Kommentarzeichen in der entsprechenden Zeile in
/etc/sudoersund kommentieren Sie die Standardregel aus.## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
Gestalten Sie die Standardregel restriktiver.
Kommentieren Sie die Regel, die alles erlaubt, in
/etc/sudoersaus oder löschen Sie sie:ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Warnung: Gefährliche Regel in sudoersVergessen Sie diesen Schritt nicht, sonst kann jeder Benutzer alle Kommandos als
rootausführen!Testen Sie die Konfiguration.
Versuchen Sie,
sudoals Mitglied und Nicht-Mitglied vonwheelauszuführen.tux:~ >groups users wheeltux:~ >sudo id -un tux's password: rootwilber:~ >groups userswilber:~ >sudo id -un wilber is not in the sudoers file. This incident will be reported.
2.3.2 Verwenden von sudo mit X.Org-Anwendungen #
Wenn Sie Grafikanwendungen mit sudo starten, stoßen Sie auf den folgenden Fehler:
tux > sudo xterm
xterm: Xt error: Can't open display: %s
xterm: DISPLAY is not setYaST wählt die ncurses-Schnittstelle und nicht die grafische Schnittstelle.
Um X.Org in Anwendungen zu verwenden, die mit sudo gestartet werden, müssen die Umgebungsvariablen DISPLAY und XAUTHORITY übertragen werden. Um dies zu konfigurieren, erstellen Sie die Datei /etc/sudoers.d/xorg (siehe Abschnitt 2.2.1, „Bearbeiten der Konfigurationsdateien“) und fügen Sie die folgende Zeile hinzu:
Defaults env_keep += "DISPLAY XAUTHORITY"
Wenn die Variable XAUTHORITY nicht bereits entsprechend festgelegt ist, legen Sie sie wie folgt fest:
export XAUTHORITY=~/.Xauthority
Jetzt können X.Org-Anwendungen wie üblich ausgeführt werden:
sudo yast2
2.4 Weitere Informationen #
Einen kurzen Überblick über die verfügbaren Kommandozeilenschalter können Sie mit sudo --help abrufen. Eine Erklärung und andere wichtige Informationen finden Sie auf der man-Seite: man 8 sudo. Die Konfiguration ist auf der man-Seite man 5 sudoers dokumentiert.