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 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 -un1 tux>sudoid -unroot's password:2 root>id -untux3>sudoid -un4 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:
    
>sudoecho s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission denied>sudocat < /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 (<Kommando>)
- Startet eine von der Umgebungsvariablen - SHELLangegebene 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. Das bedeutet, dass die Startdateien der Shell (- .profileusw.) verarbeitet werden und das aktuelle Arbeitsverzeichnis auf das Home-Verzeichnis des Zielbenutzers festgelegt wird.- tux:~ >sudo -i root's password:- root:~ #exit- tux:~ >
    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.
  
    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
/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
| 
      Es gibt zwei Ausnahmen:  | |
| 
      Entfernen Sie das Ausrufezeichen ( | |
- 
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 - sudozur Eingabe des- root-Passworts auf. Die Standardeinstellung ist “OFF”.- Defaults !rootpw # Turn rootpw flag OFF 
- 
env_reset
- Bei diesem Flag konstruiert - sudoeine minimale Umgebung mit- TERM,- PATH,- HOME,- MAIL,- SHELL,- LOGNAME,- USER,- USERNAMEund- SUDO_*. Zusätzlich werden Variablen, die in- env_keepaufgelistet 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_resetON 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_resetOFF 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
- User_List
- Eine oder mehrere (durch Komma getrennte) Kennungen: Entweder ein Benutzername, eine Gruppe im Format - %GROUPNAMEoder eine Benutzer-ID im Format- #UID. Eine Negierung wird mit dem Präfix- !Präfix.
- 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 - !Präfix.- ALList 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_Listnach- NOPASSWD:entsprechen.- PASSWDist der Standard. Es muss nur angegeben werden, wenn sich sowohl- PASSWDals auch- NOPASSWDauf 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 ""
     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.
   
- Fügen Sie Ihr Benutzerkonto zur Gruppe - wheelhinzu.- Falls Ihr Benutzerkonto nicht bereits Mitglied der Gruppe - wheelist, fügen Sie es mit dem Kommando- sudo usermod -a -G wheel USERNAMEhinzu. 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 BENUTZERNAMEausführen.
- Authentifizieren Sie sich mit dem normalen Passwort des Benutzerkontos. - Erstellen Sie die Datei - /etc/sudoers.d/userpwmit dem Kommando- visudo(siehe Abschnitt 2.2.1, „Bearbeiten der Konfigurationsdateien“) und fügen Sie Folgendes hinzu:- Defaults !targetpw 
- 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/sudoersund 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/sudoersaus 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 - rootausführen.
- Testen Sie die Konfiguration. - Führen Sie - sudoals Mitglied und Nicht-Mitglied von- wheelaus.- 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:
   
>sudoxterm 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 detaillierte Informationen über sudoers und dessen Konfiguration.