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 Desktop 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 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 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 Kommandos 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 #exittux:~ >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:~ #exittux:~ >
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.
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 Kommandovisudovorgenommen werden.visudoist ein maßgeschneidertes Tool, mit dem Sie diesudo-Konfigurationsdateien bearbeiten und grundlegende Syntaxprüfungen durchführen können, um sicherzustellen, dass die Konfiguration intakt und funktionsfähig bleibt. Eine fehlerhaftesudo-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/abgelegt werden, damit sie vonsudoabgerufen 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 vor10_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) das Kommando 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 hierzuvisudo. Verwenden Sie sowohl eine Nummerierung als auch einen beschreibenden Namen:#visudo -f /etc/sudoers.d/02_usermanagementErstellen Sie eine Regel, mit der
tuxdie Binärdatei/usr/sbin/useraddin der gesamten Umgebung ausführen kann, für die diesesudo-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/useraddWerden keine zusätzlichen Optionen angegeben, kann jedes mögliche
useradd-Kommando ausgeführt werden./usr/sbin/useradd -cWenn 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 Desktop-Systemen aktiviert. Negieren Sie es mit!, um den Benutzer aufzufordern, statt desroot-Passworts nur sein eigenes Passwort einzugeben.Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von
sudobeachtet 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 das Kommando useradd ausführen kann, ohne das root-Passwort eingeben zu müssen. Fügen Sie außerdem das usermod und userdel zur Liste der Kommandos hinzu, die dieser Gruppe zur Verfügung stehen.
Zum Bearbeiten der Beispielkonfiguration öffnen Sie sie als Systemadministrator mit
visudo:#visudo /etc/sudoers.d/02_usermanagementFü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 Kommandos ausführen können, geben Sie die Kommandos als durch Kommas getrennte Liste an:
tux, wilber ALL = /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel
Damit die aufgeführten 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 Desktop-Systemen aktiviert. Negieren Sie es mit!, um die aufgeführten Benutzer aufzufordern, statt desroot-Passworts nur das eigene Passwort einzugeben.Speichern Sie die Konfiguration, verlassen Sie den Editor und öffnen Sie eine zweite Shell, um zu testen, ob Ihre neue Konfiguration von
sudobeachtet 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. Die Gruppierung von Elementen ist bis zu einem gewissen Grad hilfreich, aber die Verwendung globaler Aliasnamen für Benutzer, Kommandos und Hosts ist der effizienteste Weg, um eine übersichtliche und schlanke sudo-Konfiguration zu erhalten.
Es ist viel besser, Aliasnamen und Gruppen anstelle von Listen zu verwenden, um Änderungen in Ihrer Einrichtung zu berücksichtigen. Sollte ein Benutzer ausscheiden, entfernen Sie ihn einfach aus der globalen User_Alias-Deklaration in Ihrer Alias-Deklarationsdatei, anstatt alle separaten benutzerdefinierten Konfigurationsdateien zu durchsuchen. Das gleiche Verfahren gilt für alle anderen Arten von Aliasnamen (Host_Alias, Cmnd_Alias und Runas_Alias).
Erstellen Sie eine neue Datei, die Ihre globalen Alias-Definitionen enthält:
#visudo /etc/sudoers.d/01_aliasesFü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_usermanagementLöschen Sie die vorherige Regel und ersetzen Sie sie durch die folgende Regel mit den oben definierten Aliasnamen:
TEAMLEADERS ALL = USERMANAGEMENT
Damit alle durch
User_Aliasdefinierten Benutzer ihr eigenes Passwort anstelle desroot-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
sudobeachtet 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 | |
Weitere Informationen hierzu finden Sie in Abschnitt 2.2.6, „Grundlegende sudoers-Regeln“. |
targetpwDieses 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
rootpwBei diesem Flag fordert
sudozur Eingabe desroot-Passworts auf. Die Standardeinstellung ist “OFF”.Defaults !rootpw # Turn rootpw flag OFF
env_resetBei dieser Einstellung erstellt
sudoeine Mindestumgebung mitTERM,PATH,HOME,MAIL,SHELL,LOGNAME,USER,USERNAMEundSUDO_*. Zusätzlich werden Variablen, die inenv_keepaufgelistet sind, aus der aufrufenden Umgebung importiert. Standardmäßig ist ON festgelegt.Defaults env_reset # Turn env_reset flag ON
env_keepEine 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_deleteEine 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_ListEine 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_ListEine 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ürHost_List.NOPASSWD:|PASSWD:Der Benutzer wird nicht aufgefordert, ein Passwort einzugeben, wenn Kommandos ausgeführt werden, die
Cmd_ListnachNOPASSWD:: entsprechen.PASSWDist die Standardeinstellung. Es muss nur angegeben werden, wenn sich sowohlPASSWDals auchNOPASSWDin derselben Zeile befinden:tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_ListEinen 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.