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

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 -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 Punkte angezeigt.

3

Nur Kommandos, die mit sudo beginnen, werden mit erhöhten Berechtigungen ausgeführt. Wenn Sie dasselbe Kommando ohne das Präfix sudo ausführen, wird es wieder mit den Berechtigungen des aktuellen Benutzers ausgeführt.

4

Für einen begrenzten Zeitraum müssen Sie das root-Passwort nicht erneut eingeben.

Tipp
Tipp: E/A-Umleitung

Die E/A-Umleitung funktioniert nicht so, wie Sie es wahrscheinlich erwarten:

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

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

2.1.3 Umgebungsvariablen

Standardmäßig gibt sudo keine Umgebungsvariablen weiter:

tux > ENVVAR=test env | grep ENVVAR
ENVVAR=test
tux > ENVVAR=test sudo env | grep ENVVAR
root's password:
1
tux > 

1

Die leere Ausgabe zeigt, dass die Umgebungsvariable ENVVAR im Kontext des Kommandos, das mit sudo ausgeführt wurde, nicht vorhanden war.

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.

Anmerkung
Anmerkung: Versehentliches Aussperren aus sudo

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
Anmerkung
Anmerkung: Ignorierte Dateien in /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

1

Es gibt zwei Ausnahmen: #include und #includedir sind normale Kommandos. Gefolgt von Zahlen, gibt es eine UID an.

2

Entfernen Sie das Ausrufezeichen (!), um für das angegebene Flag ON festzulegen.

3

Siehe Abschnitt 2.2.3, „Regeln in sudoers“.

Tabelle 2.1: Hilfreiche Flags und Optionen

Optionsname

Beschreibung

Beispiel

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

Falls sudo festgelegt ist, wird dazu aufgefordert, das root-Passwort einzugeben, statt des Passworts des Zielbenutzers oder des Passworts des Benutzers, der das Kommando initiiert hat. Die Standardeinstellung ist “OFF”.

Defaults !rootpw # Turn rootpw flag OFF
env_reset

Ist diese Option festgelegt, richtet sudo eine Minimalumgebung ein, in der nur TERM, PATH, HOME, MAIL, SHELL, LOGNAME, USER, USERNAME und SUDO_* festgelegt sind. Zusätzlich werden Variablen aus der aufrufenden Umgebung importiert, die in env_keep aufgelistet sind. 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 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
Syntax für sudoers-Regeln
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ür Host_List.

NOPASSWD:|PASSWD:

Der Benutzer wird nicht aufgefordert, ein Passwort einzugeben, wenn Kommandos ausgeführt werden, die CMDSPEC nach NOPASSWD: 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 ""
Warnung
Warnung: Gefährliche Konstrukte

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.

  1. Fügen Sie sich selbst zur Gruppe wheel hinzu.

    Ist Ihr Benutzerkonto nicht bereits Mitglied der Gruppe wheel, fügen Sie es hinzu, indem Sie sudo usermod -a -G wheel BENUTZERNAME ausführen und sich ab- und wieder anmelden. Überprüfen Sie, ob die Änderung erfolgreich war, indem Sie groups BENUTZERNAME ausführen.

  2. Legen Sie die Authentifizierung mit dem Passwort des aufrufenden Benutzers als Standard fest.

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

    Defaults !targetpw
  3. 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
  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'!
    Warnung
    Warnung: Gefährliche Regel in sudoers

    Vergessen Sie diesen Schritt nicht, sonst kann jeder Benutzer alle Kommandos als root ausführen!

  5. Testen Sie die Konfiguration.

    Versuchen Sie, sudo als Mitglied und Nicht-Mitglied von wheel auszuführen.

    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

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.