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>sudoid -unroot's password:2 root>id -untux3>sudoid -un4 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:
        
>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 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 - SHELLangegebene 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 (- .profileetc.) 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:~ >
          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 visudofür die Bearbeitung vonsudo-Konfigurationsdateien verwenden
- Alle Änderungen an der - sudo-Konfiguration sollten mit dem Befehl- visudovorgenommen werden.- visudoist 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- sudoabgerufen 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_myfirstconfigbeispielsweise vor- 10_myotherconfiganalysiert. 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 hierzu- visudo. Verwenden Sie sowohl die Nummerierung als auch einen beschreibenden Namen:- #- visudo -f /etc/sudoers.d/02_usermanagement
- Erstellen Sie eine Regel, mit der - tuxdie Binärdatei- /usr/sbin/useraddin der gesamten Umgebung ausführen kann, für die diese- sudo-Konfiguration gilt:- tux1 ALL2 = /usr/sbin/useradd3 - Legen Sie den Benutzer oder die Gruppe fest. Listen Sie Benutzer nach Namen oder - #UIDund Gruppen nach- %GROUPNAMEauf. 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 - ALLwird 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 - useraddohne 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 - rootlautet. 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.
- Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von - sudoberü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 - rootlautet. 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.
- Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von - sudoberü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 - visudoals 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_Aliasdefiniert sind, ihr eigenes Passwort anstelle des- root-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 - sudoberü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 - sudozur Eingabe des- root-Passworts auf. Die Standardeinstellung ist “OFF”.- Defaults !rootpw # Turn rootpw flag OFF 
- env_reset
- Wenn - sudofestgelegt wird, wird eine minimale Umgebung mit- TERM,- PATH,- HOME,- MAIL,- SHELL,- LOGNAME,- USER,- USERNAMEund- SUDO_*erstellt. 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 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 - %GROUPNAMEoder 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.- ALList 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_Listnach- NOPASSWD:: entsprechen.- PASSWDist die Standardeinstellung. Es muss nur angegeben werden, wenn sich sowohl- PASSWDals auch- NOPASSWDin 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:
    
>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 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.