2 sudo
Grundlagen #
Für bestimmte Befehle 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
Befehle 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 Befehle 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 Befehls mit den Berechtigungen des Benutzers wilber
zu erlauben. Der Zugriff auf den Befehl wird weiter eingeschränkt, wenn Befehlsoptionen 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 Befehls #
Als normaler Benutzer können Sie alle Befehle als root
ausführen, indem Sie sudo
vor den Befehl setzen. Dadurch werden Sie aufgefordert, das root-Passwort anzugeben. Bei erfolgreicher Authentifizierung wird daraufhin der Befehl als root
ausgeführt:
>
id -un
1 tux>
sudo
id -un
root's password:2 root>
id -un
tux3>
sudo
id -un
4 root
Der Befehl | |
Das Passwort wird bei der Eingabe weder als Klartext noch durch maskierende Zeichen angezeigt. | |
Nur Befehle, 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 Befehle 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 Befehls mit erhöhten Rechten zu verwenden. Sie können zwar den Befehl 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 Befehl 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. Dies bedeutet, dass die Startdateien (.profile
etc.) der Shell 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 sudo
konfigurieren #
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
.
Die unten dargelegten Beispielregeln dienen ausschließlich zur Veranschaulichung. Hiermit soll die allgemeine Syntax der sudo
-Konfigurationsdateien erläutert werden. Verwenden Sie diese Regeln nicht im realen Einsatz, da sie der Komplexität dieser Umgebungen nicht gerecht werden.
2.2.1 Bewährte Verfahren für die sudo
-Konfiguration #
Machen Sie sich zunächst mit einigen grundlegenden Regeln für die Verwaltung von sudo
-Konfigurationen vertraut:
- Immer
visudo
für die Bearbeitung vonsudo
-Konfigurationsdateien verwenden Alle Änderungen an der
sudo
-Konfiguration sollten mit dem Befehlvisudo
vorgenommen werden.visudo
ist ein maßgeschneidertes Tool, mit dem Sie diesudo
-Konfigurationsdateien bearbeiten und grundlegende Syntaxprüfungen vornehmen können, um sicherzustellen, dass die Konfiguration intakt und funktionsfähig bleibt. Eine fehlerhaftesudo
-Konfiguration kann dazu führen, dass ein Benutzer aus dem eigenen System ausgesperrt wird.- Immer benutzerdefinierte Konfigurationen unter
/etc/sudoers.d/
erstellen Benutzerdefinierte Konfigurationen müssen unter
/etc/sudoers.d/
gespeichert werden, damit sie vonsudo
abgerufen werden können. Die Einstellungen in den benutzerdefinierten Konfigurationen haben Vorrang vor den Einstellungen in der Standardkonfiguration unter/etc/sudoers
.- Immer die Reihenfolge beachten, in der die Konfigurationen ausgelesen werden
Damit die benutzerdefinierten Konfigurationen in der richtigen Reihenfolge ausgelesen werden, stellen Sie ihnen eine Zahl voran. Verwenden Sie bei Bedarf auch führende Nullen. So wird
01_myfirstconfig
beispielsweise vor10_myotherconfig
analysiert. Wenn eine Direktive in einer Datei festgelegt wurde, die vor einer anderen Datei mit dazu widersprüchlichen Informationen gelesen wird, wird die zuletzt gelesene Direktive angewendet.- Immer beschreibende Dateinamen verwenden
Legen Sie Dateinamen fest, aus denen Sie schließen können, was die Konfigurationsdatei bewirkt. So können Sie leichter nachverfolgen, was das
sudo
-Setup bezwecken soll.
2.2.2 Erstellen einer benutzerspezifischen Konfigurationsdatei #
Erstellen Sie eine sudo
-Konfigurationsdatei, mit der ein normaler Benutzer (tux
) den Befehl useradd
mit seinem eigenen Passwort statt mit dem root
-Passwort ausführen kann.
Erstellen Sie als Systemadministrator (
root
) eine benutzerdefinierte Konfigurationsdatei, in die die neuen benutzerspezifischen Direktiven aufgenommen werden sollen. Starten Sie hierzuvisudo
. Verwenden Sie sowohl die Nummerierung als auch einen beschreibenden Namen:#
visudo -f /etc/sudoers.d/02_usermanagement
Erstellen Sie eine Regel, mit der
tux
die Binärdatei/usr/sbin/useradd
in der gesamten Umgebung ausführen kann, für die diesesudo
-Konfiguration gilt:tux1 ALL2 = /usr/sbin/useradd3
Legen Sie den Benutzer oder die Gruppe fest. Listen Sie Benutzer nach Namen oder
#UID
und Gruppen nach%GROUPNAME
auf. Mehrere Elemente müssen durch Kommas voneinander getrennt werden. Sollen Einträge negiert werden, verwenden Sie!
.Geben Sie einen oder mehrere (durch Komma getrennte) Hosts an. Verwenden Sie (vollqualifizierte) Hostnamen oder IP-Adressen. Mit
ALL
wird diese Einstellung global auf allen Hosts erzwungen. Eine Negierung geben Sie mit!
an.Geben Sie eine oder mehrere (durch Komma getrennte) ausführbare Dateien an. Beachten Sie dabei die folgenden Regeln:
/usr/sbin/useradd
Werden keine zusätzlichen Optionen angegeben, kann jeder mögliche
useradd
-Befehl ausgeführt werden./usr/sbin/useradd -c
Wenn Sie explizit eine Option angeben, ist ausschließlich diese Option zulässig. Andere Optionen stehen dem oben angegebenen Benutzer dann nicht zur Verfügung.
/usr/sbin/useradd ""
Damit kann der Benutzer lediglich
useradd
ohne jegliche Optionen aufrufen.
Im Beispiel oben möchten Sie entweder alle Optionen und Unterbefehle zulassen oder sie aus Sicherheitsgründen auf einige wenige beschränken, aber einem Benutzer zu verbieten, überhaupt eine Option anzugeben, wäre in diesem Kontext sinnlos.
Damit der Benutzer sein eigenes Passwort anstelle des
root
-Passworts verwenden kann, fügen Sie die folgende Zeile hinzu:Defaults:tux !targetpw
Wenn dieses Flag aktiv ist, muss der Benutzer das Passwort des Zielbenutzers eingeben, das
root
lautet. Dieses Flag ist standardmäßig auf allen SUSE Linux Enterprise Server-Systemen aktiviert. Negieren Sie es mithilfe von!
, um den Benutzer aufzufordern, nur sein eigenes Passwort anstelle desroot
-Passworts einzugeben.Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von
sudo
berücksichtigt wird.
2.2.3 Erstellen von benutzerdefinierten Konfigurationen durch Gruppieren von Elementen #
Bearbeiten Sie die Konfiguration aus Beispiel 2.1, „Erstellen einer benutzerspezifischen Konfigurationsdatei“, damit eine Gruppe benannter Benutzer den Befehl useradd
ausführen kann, ohne das root
-Passwort eingeben zu müssen. Fügen Sie der Liste der Befehle außerdem usermod
und userdel
hinzu, die für diese Gruppe verfügbar sind.
Zum Bearbeiten der Beispielkonfiguration öffnen Sie sie als Systemadministrator mit
visudo
:#
visudo /etc/sudoers.d/02_usermanagement
Fügen Sie der Regel zusätzliche Benutzer in einer durch Kommas getrennten Liste hinzu:
tux, wilber ALL = /usr/sbin/useradd
Damit die angegebenen Benutzer eine Liste von Befehlen ausführen können, geben Sie die Befehle als durch Kommas getrennte Liste an:
tux, wilber ALL = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
Damit die aufgelisteten Benutzer ihr eigenes Passwort anstelle des
root
-Passworts verwenden können, fügen Sie die folgende Zeile hinzu:Defaults:tux, wilber !targetpw
Wenn dieses Flag aktiv ist, müssen die aufgelisteten Benutzer das Passwort des Zielbenutzers eingeben, das
root
lautet. Dieses Flag ist standardmäßig auf allen SUSE Linux Enterprise Server-Systemen aktiviert. Negieren Sie es mithilfe von!
, um die aufgelisteten Benutzer aufzufordern, nur ihr eigenes Passwort anstelle desroot
-Passworts einzugeben.Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von
sudo
berücksichtigt wird.
2.2.4 Vereinfachen der Konfigurationen mithilfe von Aliasen #
Mithilfe von Aliasen können Sie die benutzerdefinierte Konfiguration aus Beispiel 2.2, „Erstellen von benutzerdefinierten Konfigurationen durch Gruppieren von Elementen“ noch weiter vereinfachen. Das Gruppieren von Elementen hilft bis zu einem gewissen Grad, aber das Verwenden globaler Aliase für Benutzer, Befehle und Hosts ist die effizienteste Möglichkeit, eine saubere und kurze sudo
-Konfiguration zu erhalten.
Die Verwendung von Aliasen und Gruppen anstelle von Listen ist eine viel bessere Möglichkeit, Änderungen bei Ihrer Einrichtung zu berücksichtigen. Wenn ein Benutzer ausscheidet, entfernen Sie ihn einfach aus der globalen User_Alias
-Deklaration in Ihrer Aliasdeklarationsdatei. Sie müssen nicht jede einzelne benutzerdefinierte Konfigurationsdatei durchsuchen. Dasselbe Verfahren gilt für jede andere Art von Alias (Host_Alias
, Cmnd_Alias
und Runas_Alias
).
Erstellen Sie eine neue Datei für Ihre globalen Aliasdefinitionen:
#
visudo /etc/sudoers.d/01_aliases
Fügen Sie die folgende Zeile hinzu, um den
TEAMLEADERS
-Alias zu erstellen:User_Alias TEAMLEADERS = tux, wilber
Fügen Sie die folgende Zeile hinzu, um den
USERMANAGEMENT
-Alias zu erstellen:Cmnd_Alias USERMANAGEMENT = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
Speichern Sie Ihre Änderungen und beenden Sie
visudo
.Starten Sie
visudo
als Systemadministrator und bearbeiten Sie die Beispielkonfigurationsdatei:#
visudo -f /etc/sudoers.d/02_usermanagement
Löschen Sie die vorherige Regel und ersetzen Sie sie durch die folgende Regel, die die oben von Ihnen definierten Aliase verwendet:
TEAMLEADERS ALL = USERMANAGEMENT
Damit alle Benutzer, die durch
User_Alias
definiert sind, ihr eigenes Passwort anstelle desroot
-Passworts verwenden können, fügen Sie die folgende Zeile hinzu:Defaults:TEAMLEADERS !targetpw
Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von
sudo
berücksichtigt wird.
2.2.5 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
Wenn
sudo
festgelegt wird, wird eine minimale Umgebung mitTERM
,PATH
,HOME
,MAIL
,SHELL
,LOGNAME
,USER
,USERNAME
undSUDO_*
erstellt. 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 Befehlen 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 sudoers-Konfigurationsdatei erhalten Sie mit man 5
sudoers
.
2.2.6 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 Befehle ausgeführt werden, die
Cmd_List
nachNOPASSWD:
: entsprechen.PASSWD
ist die Standardeinstellung. Es muss nur angegeben werden, wenn sich sowohlPASSWD
als auchNOPASSWD
in 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 Befehle 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 Befehle 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 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 Befehl:
xhost si:localuser:root
Folgender Befehl 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 #
Der Befehl sudo --help
bietet einen kurzen Überblick über die verfügbaren Befehlszeilenoptionen und der Befehl man sudoers
bietet detaillierte Informationen zu sudoers
und dessen Konfiguration.