Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
documentation.suse.com / SUSE Linux Enterprise Server-Dokumentation / Verwaltungshandbuch / Häufige Tasks / Grundlegende Infos zu sudo
Applies to SUSE Linux Enterprise Server 15 SP2

2 Grundlegende Infos zu sudo

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 Benutzer 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:

tux > id -un1
tux
tux > sudo id -un
root's password:2
root
tux > id -un
tux3
tux > sudo id -un
4
root

1

Das Kommando 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 Kommandos, 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-Passport nicht erneut angeben müssen.

Tip
Tip: E/A-Umleitung

Die E/A-Umleitung funktioniert nicht mit sudo:

tux > sudo echo s > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Permission denied
tux > 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 Section 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 (<Kommando>)

Startet eine von der UmgebungsvariablenSHELL 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 # exit
tux:~ > 
sudo -i (<Kommando>)

Ähnlich wie -s, doch die Shell wird als Anmeldungs-Shell gestartet. Dies bedeutet, dass die Startdateien der Shell (.profile usw.) verarbeitet werden und das aktuelle Arbeitsverzeichnis als Basisverzeichnis des Zielbenutzers festgelegt wird.

tux:~ > sudo -i
root's password:
root:~ # exit
tux:~ > 
Tip
Tip: 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 Konfigurieren von sudo

sudo umfasst eine breite Palette an konfigurierbaren Optionen.

Note
Note: 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.

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 Editor verwenden. Legen Sie dazu die Umgebungsvariable 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
Note
Note: Ignorierte Dateien in /etc/sudoers.d

Die Anweisung #includedir in /etc/sudoers ignoriert Dateien, die auf das Zeichen ~ (Tilde) enden oder das Zeichen . (Punkt) enthalten.

Führen Sie man 8 visudo aus, um weitere Informationen zum Kommando 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

1

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

2

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

3

Siehe Section 2.2.3, “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

Bei diesem Flag konstruiert sudo eine minimale Umgebung mit TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME und SUDO_*. 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 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 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 ein Benutzername, 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 Kommandos ausgeführt werden, die Cmd_List nach NOPASSWD: entsprechen.

PASSWD ist der Standard. Es muss nur angegeben werden, wenn sich sowohl PASSWD als auch NOPASSWD auf derselben Zeile befinden:

tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_List

Einer 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 ""
Warning
Warning: Unsichere Regeln

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

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 der aktuelle Benutzer zur Gruppe wheel hinzugefügt wird.

  1. 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 Kommando sudo 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 Kommando groups BENUTZERNAME ausführen.

  2. Authentifizieren Sie sich mit dem Standardpasswort des Benutzers.

    Erstellen Sie die Datei /etc/sudoers.d/userpw mit dem Kommando visudo (siehe Section 2.2.1, “Bearbeiten der Konfigurationsdateien”) und fügen Sie Folgendes hinzu:

    Defaults !targetpw
  3. Wählen Sie eine neue Standardregel aus.

    Falls 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
  4. 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'!
    Warning
    Warning: Gefährliche Regel in sudoers

    Überspringen Sie diesen Schritt nicht. Andernfalls kann jeder beliebige Benutzer jedes beliebige Kommando als root ausführen.

  5. Testen Sie die Konfiguration.

    Führen Sie sudo als Mitglied und Nicht-Mitglied von wheel aus.

    tux:~ > groups
    users wheel
    tux:~ > sudo id -un
    tux's password:
    root
    wilber:~ > groups
    users
    wilber:~ > 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:

tux > 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
Warning
Warning: 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

Das Kommando sudo --help gibt einen kurzen Überblick über die verfügbaren Kommandozeilenoptionen und das Kommando man sudoers detaillierte Informationen über sudoers und dessen Konfiguration.