(execute a command as another user)
sudo ermöglicht es einem berechtigten Benutzer, ein Kommando als Administrator oder als ein anderer Benutzer auszuführen, wie durch die Sicherheitsrichtlinie festgelegt.
Die unterstützte Sicherheitsrichtlinie ist sudoers, die über die Datei /etc/sudoers konfiguriert wird.
Die Sicherheitsrichtlinie legt fest, welche Berechtigungen ein Benutzer gegebenenfalls hat, um sudo auszuführen. Die Richtlinie kann vorsehen, dass sich Benutzer mit einem Kennwort authentifizieren müssen. Wenn eine Authentifizierung erforderlich ist, wird sudo beendet, wenn das Kennwort des Benutzers nicht innerhalb eines konfigurierbaren Zeitlimits eingegeben wird. Das Standard-Timeout für die Kennworteingabe gemäß der sudoers-Sicherheitsrichtlinie ist 5 Minuten.
Sicherheitsrichtlinien können das Zwischenspeichern von Anmeldeinformationen unterstützen, damit der Benutzer sudo innerhalb eines bestimmten Zeitraums erneut ausführen kann, ohne dass eine Authentifizierung erforderlich ist. Gemäß der sudoers-Richtlinie werden Anmeldeinformationen 5 Minuten lang zwischengespeichert, es sei denn, dies wird in sudoers außer Kraft gesetzt. Durch die Ausführung von sudo mit der Option -v kann ein Benutzer die zwischengespeicherten Anmeldeinformationen aktualisieren, ohne ein Kommando auszuführen.
Bei einem Aufruf als sudoedit ist die Option -e (weiter unten beschrieben) einbezogen.
Sicherheitsrichtlinien können erfolgreiche und fehlgeschlagene Versuche der Verwendung von sudo protokollieren.
Syntax
sudo -h | -K | -k | -V
|
sudo -v [-AknS][-g group][-p prompt][-u user] |
sudo -l [-AknS][-g group][-p prompt][-U user][-u user][ command] |
sudo [-AbEHnPS][-C num][-g group][-p prompt][-u user][ VAR=value] [-i | -s][command] |
sudoedit [-AknS][-C num][-g group][-p prompt][-u user] file ... |
Wenn sudo ein Kennwort erfordert, liest es dieses normalerweise vom Terminal des Benutzers. Wenn die Option -A (askpass) angegeben ist, wird ein Hilfsprogramm ausgeführt, um das Kennwort des Benutzers zu lesen und das Kennwort auf die Standard-Ausgabe auszugeben. Wenn die Umgebungsvariable SUDO_ASKPASS festgelegt ist, gibt sie den Pfad zu dem Hilfsprogramm an. Wenn kein askpass-Programm verfügbar ist, wird sudo mit einem Fehler beendet.
Angegebenes Kommando im Hintergrund ausführen. Beachten Sie, dass es nicht möglich ist, die Shell-Auftragssteuerung zu verwenden, um von sudo gestartete Hintergrundprozesse zu ändern. Die meisten interaktiven Kommandos funktionieren im Hintergrundmodus nicht ordnungsgemäß.
Alle Dateideskriptoren größer oder gleich num vor dem Ausführen eines Kommandos schließen. Werte, die kleiner als drei sind, sind nicht zulässig.
Zeigt der Sicherheitsrichtlinie an, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer keine Berechtigung zur Beibehaltung der Umgebung hat.
Eine oder mehrere Dateien bearbeiten, anstatt ein Kommando auszuführen. Anstelle eines Pfadnamens wird die Zeichenfolge "sudoedit" verwendet, wenn die Sicherheitsrichtlinie herangezogen wird. Wenn der Benutzer von der Richtlinie autorisiert wird, werden die folgenden Schritte ausgeführt:
Wenn die angegebene Datei nicht vorhanden ist, wird sie erstellt. Beachten Sie, dass der Editor anders als die meisten von sudo ausgeführten Kommandos ausgeführt wird, ohne dass die Umgebung des aufrufenden Benutzers geändert wird. Wenn sudo eine Datei aus irgendeinem Grund nicht mit deren aktualisierten Version aktualisieren kann, erhält der Benutzer eine Warnmeldung und die bearbeitete Kopie bleibt in einer temporären Datei.
Kommando ausführen, wobei die primäre Gruppe auf group und nicht auf die von dem Kennwortdatenbankeintrag des Zielbenutzers angegebene primäre Gruppe festgelegt ist. Die Gruppe kann entweder ein Gruppenname oder eine numerische Gruppen-ID (GID), der das Zeichen '#' (z. B. #0 für GID 0) vorangestellt ist, sein. Wenn ein Kommando als GID ausgeführt wird, erfordern viele Shells, dass das Zeichen '#' durch einen Gegenschrägstrich ('\') entwertet wird. Wenn keine Option -u angegeben ist, wird das Kommando als der aufrufende Benutzer ausgeführt. In jedem Fall wird die primäre Gruppe auf group festgelegt.
Anfordern, dass die Sicherheitsrichtlinie die Umgebungsvariable HOME auf das von dem Kennwortdatenbankeintrag des Zielbenutzers angegebene Stammverzeichnis festlegt. Je nach Richtlinie kann dies das Standardverhalten sein.
Kurze Hilfemeldung in der Standard-Ausgabe anzeigen und beenden.
Von dem Kennwortdatenbankeintrag des Zielbenutzers angegebene Shell als Anmelde-Shell ausführen. Dies bedeutet, dass anmeldungsspezifische Ressourcendateien wie .profile oder .login von der Shell gelesen werden. Wenn ein Kommando angegeben ist, wird es an die Shell weitergeleitet, um über die Option -c der Shell ausgeführt zu werden. Wenn kein Kommando angegeben ist, wird eine interaktive Shell ausgeführt. sudo versucht, das Stammverzeichnis dieses Benutzers vor dem Ausführen der Shell zu ändern. Das Kommando wird mit einer Umgebung ausgeführt, die mit der vergleichbar ist, die ein Benutzer bei der Anmeldung erhalten würde. Die Beschreibung der Kommandoumgebung im sudoers-Handbuchabschnitt dokumentiert, wie sich die Option -i auf die Umgebung auswirkt, in der ein Kommando ausgeführt wird, wenn die sudoers-Richtlinie verwendet wird.
Ähnlich wie die Option -k. Allerdings entfernt diese Option die zwischengespeicherten Anmeldeinformationen des Benutzers vollständig und kann nicht in Verbindung mit einem Kommando oder einer anderen Option verwendet werden. Diese Option erfordert kein Kennwort.
Wenn diese Option ohne ein Kommando verwendet wird, macht sie die zwischengespeicherten Anmeldeinformationen des Benutzers ungültig. Mit anderen Worten: Bei der nächsten Ausführung von sudo ist ein Kennwort erforderlich. Diese Option erfordert kein Kennwort und wurde hinzugefügt, um es einem Benutzer zu ermöglichen, sudo-Berechtigungen aus einer Datei .logout zu widerrufen. Wenn diese Option in Verbindung mit einem Kommando oder einer Option verwendet wird, für die möglicherweise ein Kennwort erforderlich ist, bewirkt sie, dass sudo die zwischengespeicherten Anmeldeinformationen des Benutzers ignoriert. Dies hat zur Fol- ge, dass sudo zur Kennworteingabe auffordert (wenn ein Kennwort gemäß der Sicherheitsrichtlinie erforderlich ist) und die zwischengespeicherten Anmeldeinformationen des Benutzers nicht aktualisiert.
Wenn kein Kommando angegeben ist, die zulässigen (und unzulässigen) Kommandos für den aufrufenden Benutzer (oder den von der Option -U angegebenen Benutzer) auf dem aktuellen Host auflisten. Ein längeres Listenformat wird verwendet, wenn diese Option mehrfach angegeben ist und die Sicherheitsrichtlinie ein ausführliches Ausgabeformat unterstützt. Wenn ein Kommando angegeben ist und von der Sicherheitsrichtlinie erlaubt wird, wird der vollqualifizierte Pfad zu dem Kommando zusammen mit Kommandozeilenargumenten angezeigt. Wenn ein Kommando angegeben, aber nicht zulässig ist, wird sudo mit dem Statuswert 1 beendet.
Aufforderung des Benutzers zur Eingabe irgendeiner Art vermeiden. Wenn für die Ausführung des Kommandos ein Kennwort erforderlich ist, zeigt sudo eine Fehlermeldung an und wird beendet.
Gruppenvektor des aufrufenden Benutzers unverändert beibehalten. Standardmäßig initialisiert die sudoers-Richtlinie den Gruppenvektor auf der Liste der Gruppen, von denen der Zielbenutzer ein Mitglied ist. Die realen und effektiven Gruppen-IDs sind jedoch weiterhin so festgelegt, dass sie mit dem Zielbenutzer übereinstimmen.
Benutzerdefinierte Aufforderung zur Kennworteingabe mit optionalen Escape-Sequenzen verwenden. Die folgenden Escape-Sequenzen mit Prozentzeichen ('%') werden von der sudoers-Richtlinie unterstützt:
erweitert auf den Hostnamen, einschließlich des Domänennamens (nur, wenn der Hostname des Computers vollqualifiziert ist oder wenn die Option fqdn in sudoers festgelegt ist)
erweitert auf den lokalen Hostnamen ohne den Domänennamen
erweitert auf den Namen des Benutzers, dessen Kennwort angefordert wird (berücksichtigt die Kennzeichnungen rootpw, targetpw und runaspw in sudoers)
erweitert auf den Anmeldenamen des Benutzers, als der das Kommando ausgeführt wird (standardmäßig SYSROOT, es sei denn, auch die Option -u ist angegeben)
erweitert auf den Anmeldenamen des aufrufenden Benutzers
zwei aufeinanderfolgende Zeichen '%' werden zu einem einzigen Zeichen '%' reduziert
Aufforderung auf die Standard-Fehlerausgabe schreiben und Kennwort aus der Standard-Eingabe lesen, anstatt das Terminalgerät zu verwenden. Auf das Kennwort muss ein Zeilenvorschubzeichen folgen.
Von der Umgebungsvariable SHELL angegebene Shell (sofern festgelegt) oder von dem Kennwortdatenbankeintrag des aufrufenden Benutzers angegebene Shell ausführen. Wenn ein Kommando angegeben ist, wird er an die Shell weitergeleitet, um über die Option -c der Shell ausgeführt zu werden. Wenn kein Kommando angegeben ist, wird eine interaktive Shell ausgeführt.
Wird in Verbindung mit der Option -l verwendet, um die Berechtigungen für den angegebenen Benutzer anstatt für den aufrufenden Benutzer aufzulisten. Die Sicherheitsrichtlinie kann das Auflisten von Berechtigungen anderer Benutzer einschränken. Die sudoers-Richtlinie erlaubt es nur dem Administrator oder einem Benutzer mit der Option ALL auf dem aktuellen Host, diese Option zu verwenden.
Kommando als ein anderer Benutzer als der Standardzielbenutzer (normalerweise SYSROOT) ausführen. Der Benutzer kann entweder ein Benutzername oder eine numerische Benutzer-ID (UID), der das Zeichen '#' (z. B. #0 für UID 0) vorangestellt ist, sein. Wenn Kommandos als UID ausgeführt werden, erfordern viele Shells, dass das Zeichen '#' durch einen Gegenschrägstrich ('\') entwertet wird.
sudo-Version und Version des Sicherheitsrichtlinien-Plugins ausgeben. Wenn der aufrufende Benutzer bereits der Administrator ist, zeigt die Option -V die Konfigurationseinstellungen an, die bei der Erstellung von sudo verwendet wurden.
Zwischengespeicherte Anmeldeinformationen des Benutzers aktualisieren und gegebenenfalls den Benutzer authentifizieren. Hierdurch wird der sudo-Timeout standardmäßig um weitere 5 Minuten verlängert. Es wird jedoch kein Kommando ausgeführt.
Zeigt an, dass sudo die Verarbeitung von Kommandozeilenargumenten anhalten soll. Umgebungsvariablen, die für das Kommando festgelegt werden sollen, können auch in der Form VAR=Wert in die Kommandozeile weitergeleitet werden. Beispiel:
Für Variablen, die in die Kommandozeile weitergeleitet werden, gelten von der Sicherheitsrichtlinie auferlegte Einschränkungen. Die sudoers-Richtlinie wendet auf Variablen, die in die Kommandozeile weitergeleitet werden, dieselben Einschränkungen an, die auch für normale Umgebungsvariablen gelten. Es besteht jedoch eine wichtige Ausnahme. Wenn die Option setenv in sudoers festgelegt ist, wenn bei dem auszuführenden Kommando das Kenn- zeichen SETENV festgelegt ist oder wenn das zugeordnete Kommando ALL ist, kann der Benutzer Variablen festlegen, die andernfalls unzulässig wären. Siehe sudoers, um weitere Informationen zu erhalten. |
Kommandoausführung
Wenn sudo ein Kommando ausführt, gibt die Sicherheitsrichtlinie die Ausführungsumgebung für das Kommando an. Normalerweise werden die realen und effektiven Benutzer- und Gruppen-IDs so festgelegt, dass sie mit denen des Zielbenutzers übereinstimmen, und der Gruppenvektor wird basierend auf der Gruppendatenbank initialisiert (es sei denn, die Option -P wurde angegeben). Die folgenden Parameter können von der Sicherheitsrichtlinie angegeben werden:
Prozessmodell Wenn sudo ein Kommando ausführt, ruft es fork auf, richtet die Ausführungsumgebung wie oben beschrieben ein und ruft den Systemaufruf execve im untergeordneten Prozess auf. Der sudo-Hauptprozess wartet, bis das Kommando abgeschlossen ist, leitet den Endestatus des Kommandos an die Sicherheitsrichtlinie weiter und wird dann beendet. Signalverarbeitung Wenn das Kommando als untergeordnetes Element des sudo-Prozesses ausgeführt wird, gibt sudo empfangene Signale an das Kommando weiter. Die Signale SIGHUP, SIGINT und SIGQUIT werden nicht weitergegeben, außer sie werden von einem Benutzerprozess und nicht vom Kernel gesendet. Andernfalls würde das Kommando jedes Mal, wenn der Benutzer Strg+C eingibt, SIGINT zweimal erhalten. Einige Signale wie SIGSTOP und SIGKILL können nicht erfasst werden und werden deshalb nicht an das Kommando weitergegeben. Grundsätzlich sollte SIGTSTP anstelle von SIGSTOP verwendet werden, wenn Sie ein von sudo ausgeführtes Kommando anhalten möchten. |
Endestatus
Nach erfolgreicher Ausführung eines Programms ist der Endestatus von sudo einfach der Endestatus des Programms, das ausgeführt wurde. Andernfalls wird sudo mit dem Wert 1 beendet, wenn ein Konfigurations-/Berechtigungsproblem besteht oder wenn sudo das angegebene Kommando nicht ausführen kann. Im letzteren Fall wird die Fehlerzeichenfolge auf die Standard-Fehlerausgabe ausgegeben. Wenn sudo auf einen oder mehrere Einträge im PATH des Benutzers nicht zugreifen kann, wird ein Fehler auf stderr ausgegeben. (Wenn das Verzeichnis nicht vorhanden ist oder wenn es sich nicht wirklich um ein Verzeichnis handelt, wird der Eintrag ignoriert und es wird kein Fehler ausgegeben.) Dies sollte unter normalen Bedingungen nicht passieren. |
Sicherheitshinweise
sudo versucht sicher zu sein, wenn es externe Kommandos ausführt. Um ein Kommando-Spoofing zu verhindern, überprüft sudo "." und "" (beide zeigen das aktuelle Verzeichnis an) zuletzt, wenn es nach einem Kommando im PATH des Benutzers sucht (wenn eines oder beide im PATH sind). Beachten Sie jedoch, dass die tatsächliche PATH-Umgebungsvariable nicht geändert und unverändert zu dem Programm weitergeleitet wird, das sudo ausführt. Beachten Sie, dass sudo normalerweise nur das Kommando protokolliert, das es explizit ausführt. Wenn ein Benutzer ein Kommando wie |
Variable
sudo verwendet die folgenden Umgebungsvariablen. Die Sicherheitsrichtlinie hat die Kontrolle über den tatsächlichen Inhalt der Umgebung des Kommandos. EDITOR Standardeditor für die Verwendung im Modus -e (sudoedit), wenn weder SUDO_EDITOR noch VISUAL festgelegt ist. Im Modus -i oder wenn env_reset in sudoers aktiviert ist, auf die Postfach-Dateides Zielbenutzers festgelegt. HOME Auf das Stammverzeichnis des Zielbenutzers festgelegt, wenn -i oder -H angegeben sind, wenn env_reset oder always_set_home in sudoers festgelegt sind oder wenn die Option -s angegeben und set_home in sudoers festgelegt ist. PATH Kann von der Sicherheitsrichtlinie außer Kraft gesetzt werden. SHELL Wird verwendet, um festzulegen, dass die Shell mit der Option -s ausgeführt wird. SUDO_ASKPASS Gibt den Pfad zu einem Hilfsprogramm an, das zum Lesen des Kennworts verwendet wird, wenn kein Terminal verfügbar ist oder wenn die Option -A angegeben ist. SUDO_COMMAND Auf das von sudo ausgeführte Kommando festgelegt. SUDO_EDITOR Standardeditor für die Verwendung im Modus -e (sudoedit). SUDO_GID Auf die Gruppen-ID des Benutzers festgelegt, der sudo aufgerufen hat. SUDO_PROMPT Wird als Standardaufforderung zur Kennworteingabe verwendet. SUDO_PS1 Wenn festgelegt, wird PS1 auf seinen Wert für das ausgeführte Programm festgelegt. SUDO_UID Auf die Benutzer-ID des Benutzers festgelegt, der sudo aufgerufen hat. SUDO_USER Auf den Anmeldenamen des Benutzers festgelegt, der sudo aufgerufen hat. USER Auf den Zielbenutzer festgelegt (SYSROOT, es sei denn, die Option -u ist angegeben). VISUAL Standardeditor für die Verwendung im Modus -e (sudoedit), wenn SUDO_E DITOR nicht festgelegt ist. |
Beispiel
Hinweis: Bei den folgenden Beispielen wird von einer ordnungsgemäß konfigurierten Sicherheitsrichtlinie ausgegangen. Um eine Dateiauflistung eines nicht lesbaren Verzeichnisses abzurufen:
Um die Datei index.html als Benutzer www zu bearbeiten:
Um Systemprotokolle anzuzeigen, die nur für den Administrator und Benutzer in der Gruppe adm zugänglich sind:
Um einen Editor als jim mit einer anderen primären Gruppe auszuführen:
Um eine Verwendungsauflistung der Verzeichnisse in der Partition /home zu erstellen. Beachten Sie, dass hierdurch die Kommandos in einer Sub-Shell ausgeführt werden, damit das Kommando und die Dateiumleitung funktionieren:
|
Siehe auch
sudoers, visudo |