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 -un
1 tuxtux >
sudo id -un
root's password:2 roottux >
id -un
tux3tux >
sudo id -un
4 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
SHELL
angegebene 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 (.profile
usw.) 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_List
Eine oder mehrere Kennungen (getrennt durch
,
): Entweder ein Benutzername, eine Gruppe im Format%GROUPNAME
oder eine Benutzer-ID im Format#UID
. Eine Negation erzielen Sie mit dem Präfix!
Host_List
Eine oder mehrere Kennungen (getrennt durch
,
): Entweder ein (vollständig qualifizierter) Hostname oder eine IP-Adresse. Eine Negation erzielen Sie mit dem Präfix!
ALL
ist die übliche Option fürHost_List
.NOPASSWD:|PASSWD:
Der Benutzer wird nicht aufgefordert, ein Passwort einzugeben, wenn Kommandos ausgeführt werden, die
CMDSPEC
nachNOPASSWD:
entsprechen.PASSWD
ist 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_List
Eine 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
wheel
hinzu.Ist Ihr Benutzerkonto nicht bereits Mitglied der Gruppe
wheel
, fügen Sie es hinzu, indem Siesudo usermod -a -G wheel BENUTZERNAME
ausführen und sich ab- und wieder anmelden. Überprüfen Sie, ob die Änderung erfolgreich war, indem Siegroups BENUTZERNAME
ausführen.Legen Sie die Authentifizierung mit dem Passwort des aufrufenden Benutzers als Standard fest.
Erstellen Sie die Datei
/etc/sudoers.d/userpw
mitvisudo
(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/sudoers
und 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/sudoers
aus 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
root
ausführen!Testen Sie die Konfiguration.
Versuchen Sie,
sudo
als Mitglied und Nicht-Mitglied vonwheel
auszufü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 set
YaST 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.