2 sudo
Grundlagen #
Für bestimmte Kommandos sind root-Berechtigungen erforderlich. Die Anmeldung als root
ist aus Sicherheitsgründen und zur Vermeidung von Fehlern jedoch nicht zu empfehlen. Es ist sicherer, sich als normaler Benutzer anzumelden und dann mit sudo
Kommandos mit höheren Rechten auszuführen.
Auf SUSE Linux Enterprise Server ist sudo
standardmäßig auf eine ähnliche Funktionsweise wie su
konfiguriert. sudo
ist jedoch eine flexible Methode, mit der Benutzer Kommandos mit den Rechten eines beliebigen anderen Benutzers ausführen können. 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 des Benutzers wilber
zu erlauben. Der Zugriff auf das Kommando wird weiter eingeschränkt, wenn Kommandooptionen nicht zugelassen werden. 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. Benutzer müssen folglich ihr root
-Passwort nicht bekanntgeben, was die Sicherheit erhöht.
2.1 Grundlegende Verwendung von sudo
#
Im folgenden Kapitel wird die grundlegende Verwendung von sudo
vorgestellt.
2.1.1 Ausführung eines einzelnen Kommandos #
Als normaler Benutzer können Sie alle Kommandos als root
ausführen, indem Sie sudo
vor das Kommando setzen. Dadurch werden Sie aufgefordert, das root-Passwort anzugeben. Bei erfolgreicher Authentifizierung wird daraufhin das Kommando als root
ausgeführt:
>
id -un
1 tux>
sudo
id -un
root's password:2 root>
id -un
tux3>
sudo
id -un
4 root
Das Kommando | |
Das Passwort wird bei der Eingabe weder als Klartext noch durch maskierende Zeichen angezeigt. | |
Nur Kommandos, die mit | |
Die erhöhten Rechte bleiben für bestimmte Zeit erhalten, sodass Sie das |
Die E/A-Umleitung funktioniert nicht mit sudo
:
>
sudo
echo s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission denied>
sudo
cat < /proc/1/maps bash: /proc/1/maps: Permission denied
Im oben genannten Beispiel werden nur die Kommandos echo
und cat
mit erhöhten Rechten ausgeführt. Die Umleitung wird von der Shell des Benutzers mit Benutzerrechten ausgeführt. Für eine Umleitung mit erhöhten Rechten müssen Sie eine Shell starten wie in Abschnitt 2.1.2, „Starten einer Shell“ beschrieben oder das dd
-Dienstprogramm verwenden:
echo s | sudo dd of=/proc/sysrq-trigger sudo dd if=/proc/1/maps | cat
2.1.2 Starten einer Shell #
Es ist nicht immer praktisch, sudo
jedes mal zur Ausführung eines Kommandos mit erhöhten Rechten zu verwenden. Sie können zwar das Kommando sudo
bash
verwenden, doch zum Starten einer Shell empfiehlt sich die Verwendung einer der integrierten Methoden:
sudo -s (<command>)
Startet eine von der Umgebungsvariablen
SHELL
angegebene Shell oder die Standard-Shell des Zielbenutzers. Falls ein Kommando angegeben ist, wird es (mit der Option-c
) an die Shell übergeben. Andernfalls wird die Shell im interaktiven Modus ausgeführt.tux:~ >
sudo -s root's password:root:/home/tux #
exittux:~ >
sudo -i (<command>)
Ähnlich wie
-s
, doch die Shell wird als Login-Shell gestartet. Das bedeutet, dass die Startdateien der Shell (.profile
usw.) verarbeitet werden und das aktuelle Arbeitsverzeichnis auf das Home-Verzeichnis des Zielbenutzers festgelegt wird.tux:~ >
sudo -i root's password:root:~ #
exittux:~ >
Standardmäßig gibt sudo
keine Umgebungsvariablen weiter. Dieses Verhalten kann mit der Option env_reset
geändert werden (weitere Informationen finden Sie unter Hilfreiche Flags und Optionen).
2.2 Konfigurieren sudo
#
sudo
umfasst eine breite Palette an konfigurierbaren Optionen.
Wenn Sie sich versehentlich aus sudo
ausgesperrt haben, starten 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 die Datei nicht gut erstellt ist, wird dringend empfohlen, visudo
zum Bearbeiten zu verwenden. Es verhindert Bearbeitungskonflikte und prüft auf Syntaxfehler, bevor die Änderungen gespeichert werden.
Sie können statt visudo auch einen anderen verwenden. Legen Sie dazu die Umgebungsvariable EDITOR
EDITOR fest, wie zum Beispiel:
sudo EDITOR=/usr/bin/nano visudo
Denken Sie daran, dass die Datei /etc/sudoers
von den Systempaketen bereitgestellt wird und direkt in der Datei vorgenommene Änderungen möglicherweise Aktualisierungen beschädigen. Daher wird empfohlen, benutzerdefinierte Konfigurationen in Dateien im Verzeichnis /etc/sudoers.d/
abzulegen. Erstellen oder bearbeiten Sie eine Datei mit folgendem Kommando:
sudo visudo -f /etc/sudoers.d/NAME
Mit folgendem Kommando wird die Datei geöffnet und ein anderer Editor verwendet (in diesem Fall nano
):
sudo EDITOR=/usr/bin/nano visudo -f /etc/sudoers.d/NAME
/etc/sudoers.d
Die Direktive #includedir
in /etc/sudoers
ignoriert Dateien, die auf das Zeichen ~
(Tilde) enden oder das Zeichen .
(Punkt) enthalten.
Führen Sie visudo
aus, um weitere Informationen zum Kommando man 8 visudo
zu erhalten.
2.2.2 Basiskonfigurationssyntax von sudoers #
Die sudoers-Konfigurationsdateien enthalten zwei Optionstypen: Zeichenketten und Flags. Zeichenketten 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 # is 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 Zeichen | |
targetpw
Dieses Flag steuert, ob der aufrufende Benutzer das Passwort des Zielbenutzers (ON) (beispielsweise
root
) oder des aufrufenden Benutzers (OFF) eingeben muss.Defaults targetpw # Turn targetpw flag ON
rootpw
Bei diesem Flag fordert
sudo
zur Eingabe desroot
-Passworts auf. Die Standardeinstellung ist “OFF”.Defaults !rootpw # Turn rootpw flag OFF
env_reset
Bei diesem Flag stellt
sudo
eine minimale Umgebung mitTERM
,PATH
,HOME
,MAIL
,SHELL
,LOGNAME
,USER
,USERNAME
undSUDO_*
bereit. Zusätzlich werden Variablen, die inenv_keep
aufgelistet sind, aus der aufrufenden Umgebung importiert. Standardmäßig ist ON festgelegt.Defaults env_reset # Turn env_reset flag ON
env_keep
Eine Liste der Umgebungsvariablen, die beizubehalten sind, wenn für das Flag
env_reset
ON festgelegt ist.# 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
env_reset
OFF festgelegt ist.# 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 über man 5 sudoers
.
2.2.3 Grundlegende sudoers-Regeln #
Jede Regel befolgt folgendes Schema ([]
markiert optionale Teile):
#Who Where As whom Tag What User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
User_List
Eine oder mehrere (durch Komma getrennte) Kennungen: entweder einen Benutzernamen, eine Gruppe im Format
%GROUPNAME
oder eine Benutzer-ID im Format#UID
. Eine Negierung wird mit dem Präfix!
angegeben.Host_List
Eine oder mehrere (durch Komma getrennte) Kennungen: Entweder ein (vollständig qualifizierter) Hostname oder eine IP-Adresse. Eine Negierung wird mit dem Präfix
!
angegeben.ALL
ist eine häufige Wahl fürHost_List
.NOPASSWD:|PASSWD:
Der Benutzer wird nicht aufgefordert, ein Passwort einzugeben, wenn Kommandos ausgeführt werden, die
Cmd_List
nachNOPASSWD:
: entsprechen.PASSWD
ist die Standardeinstellung. Es muss nur angegeben werden, wenn sich sowohlPASSWD
als auchNOPASSWD
auf derselben Zeile befinden:tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_List
Einen oder mehrere (durch Komma getrennte) Bezeichner: ein Pfad zu einer ausführbaren Datei, gefolgt von einem optionalen zulässigen Argument.
/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 ""
Verwenden Sie keine Regeln wie ALL ALL =
ALL
ohne Defaults targetpw
. Andernfalls kann jeder Benutzer Kommandos als root
ausführen.
Wenn Sie den Gruppennamen in der Datei sudoers
angeben, verwenden Sie den NetBIOS-Domänennamen statt des Bereichs, beispielsweise:
%DOMAIN\\GROUP_NAME ALL = (ALL) ALL
Denken Sie bei winbindd daran, dass das Format auch von der Option winbind separator
in der Datei smb.conf
abhängt. Die Standardeinstellung ist \
. Wird sie beispielsweise in +
geändert, muss das Kontoformat in der Datei sudoers
entsprechend DOMAIN+GROUP_NAME
lauten.
2.3 sudo
-Anwendungsfälle #
Die Standardkonfiguration funktioniert bei standardmäßigen Verwendungsszenarien, lässt sich jedoch für spezifische Bedürfnisse anpassen.
2.3.1 Verwenden von sudo
ohne root
-Passwort #
Grundsätzlich können Mitglieder der Gruppe wheel
alle Kommandos mit sudo
als „root“ ausführen. In der folgenden Vorgehensweise wird erklärt, wie ein Benutzerkonto zur Gruppe wheel
hinzugefügt wird.
Überprüfen Sie, ob die Gruppe
wheel
vorhanden ist:>
getent group wheel
Wenn das vorherige Kommando kein Ergebnis zurückgegeben hat, installieren Sie das Paket system-group-wheel, das die Gruppe
wheel
erstellt:>
sudo
zypper install system-group-wheel
Fügen Sie Ihr Benutzerkonto zur Gruppe
wheel
hinzu.Falls Ihr Benutzerkonto nicht bereits Mitglied der Gruppe
wheel
ist, fügen Sie es mit dem Kommandosudo usermod -a -G wheel USERNAME
hinzu. Melden Sie sich ab und wieder an, um die Änderung zu aktivieren. Überprüfen Sie, ob die Änderung erfolgreich war, indem Sie das Kommandogroups USERNAME
ausführen.Authentifizieren Sie sich mit dem normalen Passwort des Benutzerkontos.
Erstellen Sie die Datei
/etc/sudoers.d/userpw
mit dem Kommandovisudo
(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, 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 sudoersÜberspringen Sie diesen Schritt nicht. Andernfalls kann jeder beliebige Benutzer jedes beliebige Kommando als
root
ausführen.Testen Sie die Konfiguration.
Führen Sie
sudo
als Mitglied und Nicht-Mitglied vonwheel
aus.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 #
Werden grafische Anwendungen mit sudo
gestartet, führt dies normalerweise zu folgendem Fehler:
>
sudo
xterm xterm: Xt error: Can't open display: %s xterm: DISPLAY is not set
Eine einfache Behelfslösung ist xhost. Damit wird dem root-Benutzer vorübergehend der Zugriff auf die X-Sitzung des lokalen Benutzers gestattet. Dies erfolgt mit folgendem Kommando:
xhost si:localuser:root
Folgendes Kommando entfernt den gewährten Zugriff:
xhost -si:localuser:root
Die Ausführung grafischer Anwendungen mit root-Rechten beeinträchtigt die Sicherheit. Es wird empfohlen, den root-Zugriff für eine grafische Anwendung nur in Ausnahmefällen zu aktivieren. Außerdem sollte der gewährte root-Zugriff sofort nach Schließen der grafischen Anwendung entzogen werden.
2.4 Weitere Informationen #
Das Kommando sudo --help
gibt einen kurzen Überblick über die verfügbaren Kommandozeilenoptionen und das Kommando man sudoers
bietet detaillierte Informationen über sudoers
und dessen Konfiguration.