Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
documentation.suse.com / SUSE Linux Enterprise Server-Dokumentation / Verwaltungshandbuch / Häufige Tasks / sudo Grundlagen
Gilt für SUSE Linux Enterprise Server 15 SP6

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 -un1
tux
> sudo id -un
root's password:2
root
> id -un
tux3
> sudo id -un
4
root

1

Der Befehl id -un druckt den Anmeldenamen des aktuellen Benutzers.

2

Das Passwort wird bei der Eingabe weder als Klartext noch durch maskierende Zeichen angezeigt.

3

Nur Befehle, die mit sudo beginnen, werden mit höheren Rechten ausgeführt.

4

Die erhöhten Rechte bleiben für bestimmte Zeit erhalten, sodass Sie das root-Passwort nicht erneut eingeben müssen.

Tipp
Tipp: E/A-Umleitung

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 UmgebungsvariablenSHELL 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 # exit
tux:~ > 
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:~ # exit
tux:~ > 
Tipp
Tipp: Umgebungsvariablen

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.

Anmerkung
Anmerkung: Versehentliches Aussperren aus sudo

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.

Warnung
Warnung: Beispielkonfigurationen dienen ausschließlich zur Veranschaulichung

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 von sudo-Konfigurationsdateien verwenden

Alle Änderungen an der sudo-Konfiguration sollten mit dem Befehl visudo vorgenommen werden. visudo ist ein maßgeschneidertes Tool, mit dem Sie die sudo-Konfigurationsdateien bearbeiten und grundlegende Syntaxprüfungen vornehmen können, um sicherzustellen, dass die Konfiguration intakt und funktionsfähig bleibt. Eine fehlerhafte sudo-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 von sudo 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 vor 10_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.

Beispiel 2.1: Erstellen einer benutzerspezifischen Konfigurationsdatei
  1. Erstellen Sie als Systemadministrator (root) eine benutzerdefinierte Konfigurationsdatei, in die die neuen benutzerspezifischen Direktiven aufgenommen werden sollen. Starten Sie hierzu visudo. Verwenden Sie sowohl die Nummerierung als auch einen beschreibenden Namen:

      # visudo -f /etc/sudoers.d/02_usermanagement
  2. Erstellen Sie eine Regel, mit der tux die Binärdatei /usr/sbin/useradd in der gesamten Umgebung ausführen kann, für die diese sudo-Konfiguration gilt:

      tux1 ALL2 = /usr/sbin/useradd3

    1

    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 !.

    2

    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.

    3

    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.

  3. 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 des root-Passworts einzugeben.

  4. 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.

Beispiel 2.2: Erstellen von benutzerdefinierten Konfigurationen durch Gruppieren von Elementen
  1. Zum Bearbeiten der Beispielkonfiguration öffnen Sie sie als Systemadministrator mit visudo:

    # visudo /etc/sudoers.d/02_usermanagement
  2. Fügen Sie der Regel zusätzliche Benutzer in einer durch Kommas getrennten Liste hinzu:

    tux, wilber ALL = /usr/sbin/useradd
  3. 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
  4. 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 des root-Passworts einzugeben.

  5. 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).

Beispiel 2.3: Vereinfachen der Konfigurationen mithilfe von Aliasen
  1. Erstellen Sie eine neue Datei für Ihre globalen Aliasdefinitionen:

    # visudo /etc/sudoers.d/01_aliases
  2. Fügen Sie die folgende Zeile hinzu, um den TEAMLEADERS-Alias zu erstellen:

    User_Alias    TEAMLEADERS = tux, wilber
  3. 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
  4. Speichern Sie Ihre Änderungen und beenden Sie visudo.

  5. Starten Sie visudo als Systemadministrator und bearbeiten Sie die Beispielkonfigurationsdatei:

    # visudo -f /etc/sudoers.d/02_usermanagement
  6. 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
  7. Damit alle Benutzer, die durch User_Alias definiert sind, ihr eigenes Passwort anstelle des root-Passworts verwenden können, fügen Sie die folgende Zeile hinzu:

    Defaults:TEAMLEADERS !targetpw
  8. 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

1

Es gibt zwei Ausnahmen: #include und #includedir sind normale Befehle.

2

Entfernen Sie das Zeichen !, um das gewünschte Flag zu aktivieren (ON).

3

Siehe Abschnitt 2.2.6, „Grundlegende sudoers-Regeln“.

Hilfreiche Flags und Optionen
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 des root-Passworts auf. Die Standardeinstellung ist “OFF”.

Defaults !rootpw # Turn rootpw flag OFF
env_reset

Wenn sudo festgelegt wird, wird eine minimale Umgebung mit TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME und SUDO_* erstellt. Zusätzlich werden Variablen, die in env_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
sudoers-Regelsyntax
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ür Host_List.

NOPASSWD:|PASSWD:

Der Benutzer wird nicht aufgefordert, ein Passwort einzugeben, wenn Befehle ausgeführt werden, die Cmd_List nach NOPASSWD: : entsprechen.

PASSWD ist die Standardeinstellung. Es muss nur angegeben werden, wenn sich sowohl PASSWD als auch NOPASSWD 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 ""
Warnung
Warnung: Unsichere Regeln

Verwenden Sie keine Regeln wie ALL ALL = ALL ohne Defaults targetpw. Andernfalls kann jeder Benutzer Befehle als root ausführen.

Wichtig
Wichtig: „winbind“ und „sudo“

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
Warnung
Warnung: Potenzielles Sicherheitsproblem

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.