Handbücher für die Kommandozeile

Man » sudo-Handbuch online - detaillierte Online-Dokumentation für die sudo-Manpage

🌍
sudo, sudoedit — Befehl als anderer Benutzer ausführen

SYNOPSIS

sudo -h | -K | -k | -V
sudo -v [-ABkNnS] [-g Gruppe] [-h Host] [-p Eingabeaufforderung] [-u Benutzer]
sudo -l [-ABkNnS] [-g Gruppe] [-h Host] [-p Eingabeaufforderung] [-U Benutzer] [-u Benutzer] [Befehl [Argument ...]]
sudo  [-ABbEHnPS]  [-C  Nummer]  [-D  Verzeichnis]  [-g  Gruppe]  [-h  Host] [-p Eingabeaufforderung] [-R Verzeichnis]
[-r Rolle] [-t Typ] [-T Timeout] [-u Benutzer] [VAR=Wert] [-i | -s] [Befehl [Argument ...]]
sudoedit [-ABkNnS] [-C Nummer] [-D Verzeichnis] [-g  Gruppe]  [-h  Host]  [-p  Eingabeaufforderung]  [-R  Verzeichnis]
[-r Rolle] [-t Typ] [-T Timeout] [-u Benutzer] Datei ...

BESCHREIBUNG

sudo ermöglicht es einem berechtigten Benutzer, einen Befehl als Superuser oder einen anderen Benutzer auszuführen, wie durch die Sicherheitsrichtlinie festgelegt. Die tatsächliche (nicht effektive) Benutzer-ID des aufrufenden Benutzers wird verwendet, um den Benutzernamen zu bestimmen, mit dem die Sicherheitsrichtlinie abgefragt wird.

sudo unterstützt eine Plugin-Architektur für Sicherheitsrichtlinien, Auditing und Eingabe-/Ausgabe-Protokollierung. Dritte können eigene Plugins entwickeln und verteilen, die nahtlos mit dem sudo-Frontend zusammenarbeiten. Die Standard-Sicherheitsrichtlinie ist sudoers, die über die Datei /etc/sudoers oder über LDAP konfiguriert wird. Weitere Informationen finden Sie im Abschnitt „Plugins“.

Die Sicherheitsrichtlinie bestimmt, welche Rechte ein Benutzer zum Ausführen von sudo hat. Die Richtlinie kann verlangen, dass sich Benutzer mit einem Passwort oder einem anderen Authentifizierungsmechanismus authentifizieren. Wenn eine Authentifizierung erforderlich ist, wird sudo beendet, wenn das Passwort des Benutzers nicht innerhalb eines konfigurierbaren Zeitlimits eingegeben wird. Dieses Limit ist richtlinienspezifisch; das Standard-Timeout für die Passwortabfrage der sudoers-Sicherheitsrichtlinie beträgt 0 Minuten.

Sicherheitsrichtlinien können die Speicherung von Anmeldeinformationen unterstützen, so dass ein Benutzer sudo für einen bestimmten Zeitraum erneut ausführen kann, ohne eine Authentifizierung durchführen zu müssen. Standardmäßig speichert die sudoers-Richtlinie Anmeldeinformationen pro Terminal für 15 Minuten. Weitere Informationen finden Sie in den Optionen timestamp_type und timestamp_timeout in sudoers(5). Durch die Ausführung von sudo mit der Option -v kann ein Benutzer die zwischengespeicherten Anmeldeinformationen aktualisieren, ohne einen Befehl auszuführen.

Auf Systemen, auf denen sudo die primäre Methode zum Erhalten von Superuser-Rechten ist, ist es wichtig, Syntaxfehler in den Konfigurationsdateien der Sicherheitsrichtlinie zu vermeiden. Für die Standard-Sicherheitsrichtlinie sudoers(5) sollten Änderungen an den Konfigurationsdateien mit dem Dienstprogramm visudo(8) vorgenommen werden, das sicherstellt, dass keine Syntaxfehler eingeführt werden.

Wenn sudo als sudoedit aufgerufen wird, ist die Option -e (wie unten beschrieben) impliziert.

Sicherheitsrichtlinien und Audit-Plugins können erfolgreiche und fehlgeschlagene Versuche, sudo auszuführen, protokollieren. Wenn ein I/O-Plugin konfiguriert ist, kann die Eingabe und Ausgabe des ausgeführten Befehls ebenfalls protokolliert werden.


Die folgenden Optionen stehen zur Verfügung:

-A, --askpass

Normalerweise liest sudo, wenn ein Passwort erforderlich ist, dieses vom Terminal des Benutzers. Wenn die Option -A (askpass) angegeben wird, wird ein (möglicherweise grafisches) Hilfsprogramm ausgeführt, um das Passwort des Benutzers zu lesen und das Passwort auf die Standardausgabe auszugeben. Wenn die Umgebungsvariable SUDO_ASKPASS gesetzt ist, wird der Pfad zum Hilfsprogramm angegeben. Andernfalls wird, wenn sudo.conf(5) eine Zeile enthält, die das Askpass-Programm angibt, dieser Wert verwendet. Zum Beispiel:

# Pfad zum Askpass-Hilfsprogramm

Path askpass /usr/bin/ssh-askpass

Wenn kein Askpass-Programm verfügbar ist, beendet sudo mit einem Fehler.

-B, --bell

Klingeln als Teil der Passwortaufforderung, wenn ein Terminal vorhanden ist. Diese Option hat keine Auswirkung, wenn ein Askpass-Programm verwendet wird.

-b, --background

Führt den angegebenen Befehl im Hintergrund aus. Es ist nicht möglich, die Shell-Jobsteuerung zu verwenden, um Hintergrundprozesse zu steuern, die von sudo gestartet wurden. Die meisten interaktiven Befehle funktionieren im Hintergrundmodus nicht richtig.

-C num, --close-from=num

Schließt alle Dateideskriptoren größer oder gleich num, bevor ein Befehl ausgeführt wird. Werte kleiner als drei sind nicht zulässig. Standardmäßig schließt sudo alle offenen Dateideskriptoren außer Standardeingabe, Standardausgabe und Standardfehler, wenn ein Befehl ausgeführt wird. Die Sicherheitsrichtlinie kann die Fähigkeit des Benutzers einschränken, diese Option zu verwenden. Die sudoers-Richtlinie erlaubt die Verwendung der Option -C nur, wenn der Administrator die Option closefrom_override aktiviert hat.

-D directory, --chdir=directory

Führt den Befehl im angegebenen Verzeichnis anstelle des aktuellen Arbeitsverzeichnisses aus. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer nicht die Erlaubnis hat, das Arbeitsverzeichnis anzugeben.

-E, --preserve-env

Gibt der Sicherheitsrichtlinie an, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer nicht die Erlaubnis hat, die Umgebung beizubehalten.

--preserve-env=list

Gibt der Sicherheitsrichtlinie an, dass der Benutzer die durch Kommas getrennte Liste von Umgebungsvariablen zu den aus der Umgebung des Benutzers übernommenen Variablen hinzufügen möchte. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer nicht die Erlaubnis hat, die Umgebung beizubehalten. Diese Option kann mehrmals angegeben werden.

-e, --edit

Bearbeitet eine oder mehrere Dateien anstelle der Ausführung eines Befehls. Anstelle eines Pfadnamens wird die Zeichenfolge "sudoedit" verwendet, wenn die Sicherheitsrichtlinie abgefragt wird. Wenn der Benutzer von der Richtlinie autorisiert ist, werden die folgenden Schritte ausgeführt:

      Es werden temporäre Kopien der zu bearbeitenden Dateien erstellt, wobei der Besitzer auf den aufrufenden Benutzer gesetzt wird.

      Der in der Richtlinie angegebene Editor wird ausgeführt, um die temporären Dateien zu bearbeiten. Die `sudoers`-Richtlinie verwendet die Umgebungsvariablen `SUDO_EDITOR`, `VISUAL` und `EDITOR` (in dieser Reihenfolge). Wenn keine der Umgebungsvariablen `SUDO_EDITOR`, `VISUAL` oder `EDITOR` gesetzt ist, wird das erste in der `editor`-Option in `sudoers(5)` aufgeführte Programm verwendet.

Wenn sie geändert wurden, werden die temporären Dateien an ihren ursprünglichen Speicherort zurückkopiert, und die temporären Versionen werden entfernt.

Um die Bearbeitung nicht autorisierter Dateien zu verhindern, werden die folgenden Einschränkungen durchgesetzt, es sei denn, die Sicherheitsrichtlinie erlaubt dies ausdrücklich:

Symbolische Links dürfen nicht bearbeitet werden (Version 1.8.15 und höher).

Symbolische Links entlang des zu bearbeitenden Pfads werden nicht verfolgt, wenn das übergeordnete Verzeichnis vom aufrufenden Benutzer beschreibbar ist, es sei denn, dieser Benutzer ist Root (Version 1.8.16 und höher).

Dateien, die sich in einem Verzeichnis befinden, das vom aufrufenden Benutzer beschreibbar ist, dürfen nicht bearbeitet werden, es sei denn, dieser Benutzer ist Root (Version 1.8.16 und höher).

Benutzer dürfen niemals Gerätespezialdateien bearbeiten.

Wenn die angegebene Datei nicht vorhanden ist, wird sie erstellt. Im Gegensatz zu den meisten Befehlen, die mit sudo ausgeführt werden, wird der Editor mit der unveränderten Umgebung des aufrufenden Benutzers ausgeführt. Wenn die temporäre Datei nach der Bearbeitung leer wird, wird der Benutzer aufgefordert, bevor sie installiert wird.

Wenn sudo aus irgendeinem Grund eine Datei nicht mit ihrer bearbeiteten Version aktualisieren kann, erhält der Benutzer eine Warnung, und die bearbeitete Kopie verbleibt in einer temporären Datei.

-g Gruppe, --group=Gruppe
Führen Sie den Befehl mit der Primärgruppe aus, die auf Gruppe anstelle der in der Benutzerdatenbank des Zielbenutzers angegebenen Primärgruppe festgelegt ist. Die Gruppe kann entweder ein Gruppenname oder eine numerische Gruppen-ID (GID) sein, die mit dem Zeichen '#' versehen ist (z. B. '#0' für GID 0). Wenn ein Befehl als GID ausgeführt wird, erfordern viele Shells, dass das '#' mit einem Backslash ('\') maskiert wird. Wenn keine Option `-u` angegeben wird, wird der Befehl als aufrufender Benutzer ausgeführt. In beiden Fällen wird die Primärgruppe auf Gruppe gesetzt. Die `sudoers`-Richtlinie erlaubt, dass alle Gruppen des Zielbenutzers über die Option `-g` angegeben werden, solange die Option `-P` nicht verwendet wird.

-H, --set-home
Fordern Sie an, dass die Sicherheitsrichtlinie die Umgebungsvariable `HOME` auf das Home-Verzeichnis setzt, das in der Benutzerdatenbank des Zielbenutzers angegeben ist. Abhängig von der Richtlinie kann dies das Standardverhalten sein.

-h, --help
Zeigen Sie eine kurze Hilfemeldung auf der Standardausgabe an und beenden Sie das Programm.

-h Host, --host=Host
Führen Sie den Befehl auf dem angegebenen Host aus, wenn das Sicherheitsrichtlinien-Plugin die Ausführung von Remote-Befehlen unterstützt. Das `sudoers`-Plugin unterstützt derzeit nicht die Ausführung von Remote-Befehlen. Dies kann auch in Verbindung mit der Option `-l` verwendet werden, um die Privilegien eines Benutzers für den Remote-Host aufzulisten.

-i, --login
Führen Sie die Shell aus, die in der Benutzerdatenbank des Zielbenutzers angegeben ist, als Login-Shell aus. Dies bedeutet, dass Shell-spezifische Ressourcen-Dateien wie `.profile`, `.bash_profile` oder `.login` von der Shell gelesen werden. Wenn ein Befehl angegeben wird, wird er als einfacher Befehl unter Verwendung der Option `-c` an die Shell übergeben. Der Befehl und alle Argumente werden verkettet und durch Leerzeichen getrennt, nachdem jedes Zeichen (einschließlich Leerzeichen) mit einem Backslash ('\') maskiert wurde, mit Ausnahme von alphanumerischen Zeichen, Unterstrichen, Bindestrichen und Dollarzeichen. Wenn kein Befehl angegeben wird, wird eine interaktive Shell ausgeführt. `sudo` versucht, vor dem Ausführen der Shell in das Home-Verzeichnis dieses Benutzers zu wechseln. Der Befehl wird mit einer Umgebung ausgeführt, die der Umgebung ähnelt, die ein Benutzer bei der Anmeldung erhält. Die meisten Shells verhalten sich anders, wenn ein Befehl angegeben wird, als in einer interaktiven Sitzung; weitere Informationen finden Sie im Handbuch der Shell. Der Abschnitt "Umgebung des Befehls" im Handbuch `sudoers(5)` dokumentiert, wie sich die Option `-i` auf die Umgebung auswirkt, in der ein Befehl ausgeführt wird, wenn die `sudoers`-Richtlinie verwendet wird.

-K, --remove-timestamp

Ähnlich wie die Option -k, außer dass sie alle zwischengespeicherten Anmeldeinformationen für den Benutzer entfernt, unabhängig vom Terminal oder der übergeordneten Prozess-ID. Wenn sudo das nächste Mal ausgeführt wird, muss ein Passwort eingegeben werden, falls die Sicherheitsrichtlinie eine Authentifizierung erfordert. Es ist nicht möglich, die Option -K in Verbindung mit einem Befehl oder einer anderen Option zu verwenden. Diese Option erfordert kein Passwort. Nicht alle Sicherheitsrichtlinien unterstützen die Zwischenspeicherung von Anmeldeinformationen.

-k, --reset-timestamp

Wenn sie ohne Befehl verwendet wird, ungültigt sie die zwischengespeicherten Anmeldeinformationen des Benutzers für die aktuelle Sitzung. Wenn sudo das nächste Mal in der Sitzung ausgeführt wird, muss ein Passwort eingegeben werden, falls die Sicherheitsrichtlinie eine Authentifizierung erfordert. Standardmäßig verwendet die sudoers-Richtlinie einen separaten Eintrag im Anmeldeinformations-Cache für jedes Terminal (oder jede übergeordnete Prozess-ID, falls kein Terminal vorhanden ist). Dadurch wird verhindert, dass die Option -k mit sudo-Befehlen in einer anderen Terminalsitzung interagiert. Weitere Informationen finden Sie in der Option timestamp_type in sudoers(5). Diese Option erfordert kein Passwort und wurde hinzugefügt, um einem Benutzer die Möglichkeit zu geben, sudo-Berechtigungen aus einer .logout-Datei zu entziehen.

Wenn sie in Verbindung mit einem Befehl oder einer Option verwendet wird, die möglicherweise ein Passwort erfordert, bewirkt diese Option, dass sudo die zwischengespeicherten Anmeldeinformationen des Benutzers ignoriert. Infolgedessen fordert sudo ein Passwort an (falls eines durch die Sicherheitsrichtlinie erforderlich ist) und aktualisiert nicht die zwischengespeicherten Anmeldeinformationen des Benutzers.

Nicht alle Sicherheitsrichtlinien unterstützen die Zwischenspeicherung von Anmeldeinformationen.

-l, --list

Wenn kein Befehl angegeben wird, werden die Berechtigungen für den aufrufenden Benutzer (oder den mit der Option -U angegebenen Benutzer) auf dem aktuellen Host aufgelistet. Ein längeres Listenformat wird verwendet, wenn diese Option mehrfach angegeben wird und die Sicherheitsrichtlinie ein ausführliches Ausgabeformat unterstützt.

Wenn ein Befehl angegeben wird und dieser durch die Sicherheitsrichtlinie für den aufrufenden Benutzer (oder den mit der Option -U angegebenen Benutzer) auf dem aktuellen Host zulässig ist, wird der vollständig qualifizierte Pfad zum Befehl zusammen mit allen Argumenten angezeigt. Wenn -l mehr als einmal angegeben wird (und die Sicherheitsrichtlinie dies unterstützt), wird die übereinstimmende Regel in einem ausführlichen Format zusammen mit dem Befehl angezeigt. Wenn ein Befehl angegeben wird, aber nicht von der Richtlinie zulässig ist, wird sudo mit einem Statuswert von 1 beendet.


-N, --no-update

Verhindert das Aktualisieren der zwischengespeicherten Anmeldeinformationen des Benutzers, auch wenn der Benutzer erfolgreich authentifiziert wurde. Anders als beim -k-Flag werden vorhandene, zwischengespeicherte Anmeldeinformationen verwendet, wenn sie gültig sind. Um zu erkennen, wann die zwischengespeicherten Anmeldeinformationen des Benutzers gültig sind (oder wann keine Authentifizierung erforderlich ist), kann Folgendes verwendet werden:

sudo -Nnv

Nicht alle Sicherheitsrichtlinien unterstützen das Zwischenspeichern von Anmeldeinformationen.

-n, --non-interactive

Vermeidet die Aufforderung an den Benutzer, Eingaben jeglicher Art vorzunehmen. Wenn für die Ausführung des Befehls ein Passwort erforderlich ist, zeigt sudo eine Fehlermeldung an und beendet das Programm.

-P, --preserve-groups

Behält den Gruppenvektor des aufrufenden Benutzers unverändert bei. Standardmäßig initialisiert die sudoers-Richtlinie den Gruppenvektor auf die Liste der Gruppen, deren Mitglied der Zielbenutzer ist. Die tatsächlichen und effektiven Gruppen-IDs werden jedoch so eingestellt, dass sie dem Zielbenutzer entsprechen.

-p prompt, --prompt=prompt

Verwendet eine benutzerdefinierte Passwortaufforderung mit optionalen Escape-Sequenzen. Die folgenden Prozent-('%')-Escape-Sequenzen werden von der sudoers-Richtlinie unterstützt:

%H wird zu dem Hostnamen einschließlich des Domainnamens erweitert (nur wenn der Hostname der Maschine vollständig qualifiziert ist oder die Option fqdn in sudoers(5) gesetzt ist)

%h wird zu dem lokalen Hostnamen ohne den Domainnamen erweitert

%p wird zu dem Namen des Benutzers erweitert, dessen Passwort angefordert wird (beachtet die Flags rootpw, targetpw und runaspw in sudoers(5))

%U wird zu dem Login-Namen des Benutzers erweitert, als der der Befehl ausgeführt wird (standardmäßig root, es sei denn, die Option -u ist ebenfalls angegeben)

%u wird zu dem Login-Namen des aufrufenden Benutzers erweitert

%% Zwei aufeinanderfolgende '%'-Zeichen werden zu einem einzelnen '%'-Zeichen zusammengefasst.

Die benutzerdefinierte Aufforderung überschreibt die Standardaufforderung, die entweder durch die Sicherheitsrichtlinie oder die Umgebungsvariable SUDO_PROMPT angegeben wird. Auf Systemen, die PAM verwenden, überschreibt die benutzerdefinierte Aufforderung auch die von einem PAM-Modul angegebene Aufforderung, es sei denn, das Flag passprompt_override ist in sudoers deaktiviert.

-R directory, --chroot=directory

Wechselt in das angegebene Root-Verzeichnis (siehe chroot(8)), bevor der Befehl ausgeführt wird. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer nicht die Berechtigung hat, das Root-Verzeichnis anzugeben.

Diese Option ist veraltet und wird in einer zukünftigen Version von sudo entfernt.

-r role, --role=role

Führt den Befehl mit einem SELinux-Sicherheitskontext aus, der die angegebene Rolle enthält.

-S, --stdin

Schreibt die Aufforderung in die Standardfehlerausgabe und liest das Passwort aus der Standardeingabe anstelle der Verwendung des Terminalgeräts.

-s, --shell

Führt die in der Umgebungsvariablen SHELL angegebene Shell aus, wenn diese gesetzt ist, oder die in dem Passwortdatensatz des aufrufenden Benutzers angegebene Shell. Wenn ein Befehl angegeben wird, wird er als einfacher Befehl mithilfe der Option -c an die Shell übergeben. Der Befehl und alle Argumente werden verkettet, durch Leerzeichen getrennt, nachdem jedes Zeichen (einschließlich Leerzeichen) mit einem umgekehrten Schrägstrich ('\') versehen wurde, mit Ausnahme von alphanumerischen Zeichen, Unterstrichen, Bindestrichen und Dollarzeichen. Wenn kein Befehl angegeben wird, wird eine interaktive Shell ausgeführt. Die meisten Shells verhalten sich anders, wenn ein Befehl als interaktive Sitzung angegeben wird; Informationen dazu finden Sie in der Shell-Dokumentation.


-t type, --type=type
Führt den Befehl mit einem SELinux-Sicherheitskontext aus, der den angegebenen Typ enthält. Wenn kein Typ angegeben ist, wird der Standardtyp aus der Rolle abgeleitet.

-U user, --other-user=user
Wird in Verbindung mit der Option -l verwendet, um die Berechtigungen für einen anderen Benutzer als den aufrufenden Benutzer aufzulisten. Die Sicherheitsrichtlinie kann das Auflisten der Berechtigungen anderer Benutzer einschränken. Bei Verwendung der sudoers-Richtlinie ist die Option -U auf den Root-Benutzer und Benutzer beschränkt, die entweder die Berechtigung „list“ für den angegebenen Benutzer oder die Möglichkeit haben, einen beliebigen Befehl als Root-Benutzer oder Benutzer auf dem aktuellen Host auszuführen.

-T timeout, --command-timeout=timeout
Wird verwendet, um ein Timeout für den Befehl festzulegen. Wenn das Timeout abläuft, bevor der Befehl beendet wurde, wird der Befehl beendet. Die Sicherheitsrichtlinie kann die Möglichkeit des Benutzers, Timeouts festzulegen, einschränken. Die sudoers-Richtlinie erfordert, dass benutzerdefinierte Timeouts explizit aktiviert werden.

-u user, --user=user
Führt den Befehl als einen anderen Benutzer als den Standardzielbenutzer (normalerweise Root) aus. Der Benutzer kann entweder ein Benutzername oder eine numerische Benutzer-ID (UID) sein, die mit dem Zeichen „#“ versehen ist (z. B. „#0“ für UID 0). Beim Ausführen von Befehlen mit einer UID erfordern einige Shells, dass das Zeichen „#“ mit einem Backslash („\“) maskiert wird. Einige Sicherheitsrichtlinien können UIDs auf diejenigen beschränken, die in der Passwortdatenbank aufgeführt sind. Die sudoers-Richtlinie ermöglicht UIDs, die nicht in der Passwortdatenbank enthalten sind, solange die Option targetpw nicht gesetzt ist. Andere Sicherheitsrichtlinien unterstützen dies möglicherweise nicht.

-V, --version
Gibt die sudo-Versionszeichenfolge sowie die Versionszeichenfolge aller konfigurierten Plugins aus. Wenn der aufrufende Benutzer bereits Root ist, zeigt die Option -V die beim Erstellen von sudo übergebenen Optionen an; Plugins können zusätzliche Informationen wie Standardoptionen anzeigen.

-v, --validate
Aktualisiert die zwischengespeicherten Anmeldeinformationen des Benutzers und authentifiziert den Benutzer bei Bedarf. Für das sudoers-Plugin verlängert dies standardmäßig das sudo-Timeout um weitere 15 Minuten, führt aber keinen Befehl aus. Nicht alle Sicherheitsrichtlinien unterstützen zwischengespeicherte Anmeldeinformationen.

--
Das „--“ wird verwendet, um das Ende der sudo-Optionen zu kennzeichnen. Nachfolgende Optionen werden an den Befehl übergeben.

Optionen, die einen Wert benötigen, dürfen nur einmal angegeben werden, es sei denn, dies wird in der Beschreibung anders angegeben. Dies soll dazu beitragen, Probleme zu vermeiden, die durch schlecht geschriebene Skripte verursacht werden, die sudo mit vom Benutzer gesteuerten Eingaben aufrufen.

Umgebungsvariablen, die für den Befehl festgelegt werden sollen, können auch als Optionen an sudo übergeben werden, z. B. VAR=value, z. B. LD_LIBRARY_PATH=/usr/local/pkg/lib. Umgebungsvariablen können Beschränkungen unterliegen, die von dem Sicherheitsrichtlinien-Plugin auferlegt werden. Die sudoers-Richtlinie unterwirft Umgebungsvariablen, die als Optionen übergeben werden, den gleichen Beschränkungen wie vorhandene Umgebungsvariablen, mit einem wichtigen Unterschied. Wenn die Option setenv in sudoers festgelegt ist, der auszuführende Befehl das Tag SETENV hat oder die übereinstimmende Befehlsangabe ALL lautet, darf der Benutzer Variablen festlegen, die sonst verboten wären. Weitere Informationen finden Sie in sudoers(5).

AUSFÜHRUNG VON BEFEHLEN

Wenn sudo einen Befehl ausführt, legt die Sicherheitsrichtlinie die Ausführungsumgebung für den Befehl fest. Typischerweise werden die realen und effektiven Benutzer- und Gruppen-IDs so eingestellt, dass sie mit denen des Zielbenutzers übereinstimmen, wie in der Passwortdatenbank angegeben, und der Gruppenvektor wird basierend auf der Gruppendatenbank initialisiert (es sei denn, die Option -P wurde angegeben).

Die folgenden Parameter können durch die Sicherheitsrichtlinie angegeben werden:

reale und effektive Benutzer-ID
reale und effektive Gruppen-ID
zusätzliche Gruppen-IDs
die Umgebungsvariablenliste
aktuelles Arbeitsverzeichnis
Datei-Erstellungsmodusmaske (umask)
SELinux-Rolle und -Typ
Planungspriorität (auch bekannt als Nice-Wert)

Prozessmodell

Es gibt zwei verschiedene Möglichkeiten, wie sudo einen Befehl ausführen kann.

Wenn ein I/O-Protokollierungs-Plugin konfiguriert ist, um die Terminal-I/O zu protokollieren, oder wenn die Sicherheitsrichtlinie dies explizit anfordert, wird ein neues Pseudo-Terminal („pty“) zugewiesen und fork(2) wird verwendet, um einen zweiten sudo-Prozess zu erstellen, der als Monitor bezeichnet wird. Der Monitor erstellt eine neue Terminalsitzung mit sich selbst als führendem Prozess und dem pty als seinem Kontrollterminal, ruft erneut fork(2) auf, richtet die Ausführungsumgebung wie oben beschrieben ein und verwendet dann den Systemaufruf execve(2), um den Befehl im untergeordneten Prozess auszuführen. Der Monitor existiert, um Job-Steuerungssignale zwischen dem Terminal des Benutzers und dem pty, in dem der Befehl ausgeführt wird, weiterzuleiten. Dadurch kann der Befehl normal unterbrochen und fortgesetzt werden. Ohne den Monitor wäre der Befehl in dem, was POSIX als „verwaiste Prozessgruppe“ bezeichnet, und er würde keine Job-Steuerungssignale vom Kernel empfangen. Wenn der Befehl beendet oder durch ein Signal beendet wird, übergibt der Monitor den Exit-Status des Befehls an den Haupt-sudo-Prozess und beendet sich. Nachdem der Haupt-sudo-Prozess den Exit-Status des Befehls empfangen hat, übergibt er den Exit-Status des Befehls an die Schließfunktion der Sicherheitsrichtlinie sowie an die Schließfunktion aller konfigurierten Audit-Plugins und beendet sich. Dieser Modus ist der Standard für sudo-Versionen 1.9.14 und höher, wenn die sudoers-Richtlinie verwendet wird.

Wenn kein pty verwendet wird, ruft sudo fork(2) auf, richtet die Ausführungsumgebung wie oben beschrieben ein und verwendet den Systemaufruf execve(2), um den Befehl im untergeordneten Prozess auszuführen. Der Haupt-sudo-Prozess wartet, bis der Befehl abgeschlossen ist, übergibt dann den Exit-Status des Befehls an die Schließfunktion der Sicherheitsrichtlinie sowie an die Schließfunktion aller konfigurierten Audit-Plugins und beendet sich. In einem speziellen Fall führt sudo den Befehl direkt aus, anstatt zuerst fork(2) aufzurufen, wenn das Richtlinien-Plugin keine Schließfunktion definiert. Das sudoers-Richtlinien-Plugin definiert nur eine Schließfunktion, wenn die I/O-Protokollierung aktiviert ist, ein pty erforderlich ist, eine SELinux-Rolle angegeben ist, der Befehl ein zugeordnetes Timeout hat oder die Optionen pam_session oder pam_setcred aktiviert sind. Sowohl pam_session als auch pam_setcred sind standardmäßig auf Systemen mit PAM aktiviert. Dieser Modus ist der Standard für sudo-Versionen vor 1.9.14, wenn die sudoers-Richtlinie verwendet wird.


Auf Systemen, die PAM verwenden, ist die Schließfunktion der Sicherheitsrichtlinie für das Schließen der PAM-Sitzung verantwortlich. Sie kann auch den Beendigungsstatus des Befehls protokollieren.

Signalverarbeitung

Wenn der Befehl als Kindprozess des sudo-Prozesses ausgeführt wird, leitet sudo die Signale weiter, die es empfängt, an den Befehl. Die Signale SIGINT und SIGQUIT werden nur dann weitergeleitet, wenn der Befehl in einem neuen PTY ausgeführt wird oder wenn das Signal von einem Benutzerprozess gesendet wurde, nicht vom Kernel. Dadurch wird verhindert, dass der Befehl jedes Mal, wenn der Benutzer Strg+C drückt, zweimal SIGINT empfängt. Einige Signale, wie z. B. SIGSTOP und SIGKILL, können nicht abgefangen werden und werden daher nicht an den Befehl weitergeleitet. Als allgemeine Regel sollte SIGTSTP anstelle von SIGSTOP verwendet werden, wenn Sie einen von sudo ausgeführten Befehl anhalten möchten.

Als Sonderfall leitet sudo keine Signale weiter, die vom Befehl, den es ausführt, gesendet wurden. Dies verhindert, dass der Befehl versehentlich sich selbst beendet. Auf einigen Systemen sendet das Dienstprogramm reboot(8) vor dem Neustart des Systems SIGTERM an alle Nicht-Systemprozesse außer sich selbst. Dadurch wird verhindert, dass sudo das SIGTERM-Signal, das es empfangen hat, an reboot(8) weiterleitet, was dazu führen könnte, dass reboot(8) beendet wird, bevor das System tatsächlich neu gestartet wurde, wodurch es in einem halb toten Zustand ähnlich dem Single-User-Modus verbleiben würde. Beachten Sie jedoch, dass diese Überprüfung nur für den von sudo ausgeführten Befehl gilt und nicht für andere Prozesse, die der Befehl möglicherweise erstellt. Daher kann das Ausführen eines Skripts, das reboot(8) oder shutdown(8) über sudo aufruft, dazu führen, dass das System in diesem undefinierten Zustand endet, es sei denn, reboot(8) oder shutdown(8) werden mithilfe der exec()-Familie von Funktionen anstelle von system() ausgeführt (was eine Shell zwischen den Befehl und den aufrufenden Prozess schaltet).

Plugins

Plugins können über Plugin-Direktiven in der Datei sudo.conf(5) angegeben werden. Sie können als dynamische Shared Objects (auf Systemen, die dies unterstützen) oder direkt in die sudo-Binärdatei kompiliert werden. Wenn keine Datei sudo.conf(5) vorhanden ist oder diese keine Plugin-Zeilen enthält, verwendet sudo sudoers(5) für die Richtlinien-, Audit- und I/O-Protokollierungs-Plugins. Weitere Informationen finden Sie in der Dokumentation sudo.conf(5) und sudo_plugin(5).

EXIT-WERT

Bei erfolgreicher Ausführung eines Befehls ist der Exit-Status von sudo der Exit-Status des ausgeführten Programms. Wenn der Befehl aufgrund des Empfangs eines Signals beendet wird, sendet sudo sich selbst dasselbe Signal, das den Befehl beendet hat.

Wenn die Option -l ohne Befehl angegeben wird, beendet sudo mit dem Wert 0, wenn der Benutzer berechtigt ist, sudo auszuführen, und er sich erfolgreich authentifiziert hat (wie es von der Sicherheitsrichtlinie vorgeschrieben ist). Wenn ein Befehl mit der Option -l angegeben wird, ist der Exit-Wert nur dann 0, wenn der Befehl von der Sicherheitsrichtlinie erlaubt ist, andernfalls ist er 1.

Wenn ein Authentifizierungsfehler, ein Konfigurations-/Berechtigungsproblem oder wenn der angegebene Befehl nicht ausgeführt werden kann, beendet sudo mit dem Wert 1. In letzterem Fall wird die Fehlermeldung auf die Standardfehlerausgabe gedruckt. Wenn sudo einen oder mehrere Einträge in der PATH-Variable des Benutzers nicht stat(2) kann, wird ein Fehler auf die Standardfehlerausgabe gedruckt. (Wenn das Verzeichnis nicht existiert oder nicht wirklich ein Verzeichnis ist, wird der Eintrag ignoriert und es wird kein Fehler ausgegeben.) Dies sollte unter normalen Umständen nicht vorkommen. Der häufigste Grund, warum stat(2) „Berechtigung verweigert“ zurückgibt, ist, wenn Sie einen Automounter verwenden und eines der Verzeichnisse in Ihrer PATH-Variable sich auf einem Computer befindet, der derzeit nicht erreichbar ist.

SICHERHEITSHINWEISE

sudo versucht, beim Ausführen externer Befehle sicher zu sein.

Um das Spoofing von Befehlen zu verhindern, überprüft sudo „.“ und „“ (beide bezeichnen das aktuelle Verzeichnis) als Letztes, wenn es nach einem Befehl in der PATH-Variable des Benutzers sucht (falls eines oder beide in der PATH-Variable enthalten sind). Abhängig von der Sicherheitsrichtlinie kann die PATH-Umgebungsvariable des Benutzers geändert, ersetzt oder unverändert an das Programm übergeben werden, das sudo ausführt.

Benutzern sollten niemals sudo-Berechtigungen für die Ausführung von Dateien gewährt werden, die vom Benutzer beschreibbar sind oder die sich in einem vom Benutzer beschreibbaren Verzeichnis befinden. Wenn der Benutzer den Befehl ändern oder ersetzen kann, gibt es keine Möglichkeit, zu beschränken, welche zusätzlichen Befehle er ausführen kann.

Standardmäßig protokolliert sudo nur den Befehl, den es explizit ausführt. Wenn ein Benutzer einen Befehl wie „sudo su“ oder „sudo sh“ ausführt, unterliegen nachfolgende Befehle, die von dieser Shell aus ausgeführt werden, nicht der Sicherheitsrichtlinie von sudo. Dasselbe gilt für Befehle, die Shell-Escapes anbieten (einschließlich der meisten Editoren). Wenn die I/O-Protokollierung aktiviert ist, werden die Eingabe und/oder Ausgabe nachfolgender Befehle protokolliert, aber es gibt keine herkömmlichen Protokolle für diese Befehle. Aus diesem Grund ist Vorsicht geboten, wenn Benutzern über sudo Zugriff auf Befehle gewährt wird, um sicherzustellen, dass der Befehl dem Benutzer nicht unbeabsichtigt eine effektive Root-Shell ermöglicht. Informationen zu Möglichkeiten, dies zu verhindern, finden Sie im Abschnitt „Verhindern von Shell-Escapes“ in sudoers(5).

Um die Offenlegung potenziell sensibler Informationen zu verhindern, deaktiviert sudo standardmäßig Core-Dumps während der Ausführung (sie werden für den ausgeführten Befehl wieder aktiviert). Diese historische Praxis stammt aus einer Zeit, in der die meisten Betriebssysteme es set-user-ID-Prozessen standardmäßig erlaubten, Core-Dumps zu erstellen. Um die Fehlersuche bei sudo-Abstürzen zu unterstützen, können Sie Core-Dumps aktivieren, indem Sie „disable_coredump“ in der Datei sudo.conf(5) auf „false“ setzen:


Setzen Sie disable_coredump auf false.

Weitere Informationen finden Sie in der sudo.conf(5)-Dokumentation.

UMGEBUNG

sudo verwendet die folgenden Umgebungsvariablen. Die Sicherheitsrichtlinie steuert den tatsächlichen Inhalt der Umgebung des Befehls.

EDITOR Standardeditor für den Modus -e (sudoedit), falls weder SUDO_EDITOR noch VISUAL gesetzt sind.

MAIL Wird auf den Mail-Spool des Zielbenutzers gesetzt, wenn die Option -i angegeben ist oder wenn env_reset in sudoers aktiviert ist (es sei denn, MAIL ist in der Liste env_keep enthalten).

HOME Wird auf das Home-Verzeichnis des Zielbenutzers gesetzt, wenn die Optionen -i oder -H angegeben sind, wenn die Option -s angegeben ist und set_home in sudoers gesetzt ist, wenn always_set_home in sudoers aktiviert ist oder wenn env_reset in sudoers aktiviert ist und HOME nicht in der Liste env_keep enthalten ist.

LOGNAME Wird auf den Login-Namen des Zielbenutzers gesetzt, wenn die Option -i angegeben ist, wenn die Option set_logname in sudoers aktiviert ist oder wenn die Option env_reset in sudoers aktiviert ist (es sei denn, LOGNAME ist in der Liste env_keep enthalten).

PATH Kann durch die Sicherheitsrichtlinie überschrieben werden.

SHELL Wird verwendet, um die Shell zu bestimmen, die mit der Option -s ausgeführt wird.

SUDO_ASKPASS Gibt den Pfad zu einem Hilfsprogramm an, das verwendet wird, um das Passwort zu lesen, wenn kein Terminal verfügbar ist oder wenn die Option -A angegeben ist.

SUDO_COMMAND Wird auf den von sudo ausgeführten Befehl einschließlich aller Argumente gesetzt. Die Argumente werden auf 4096 Zeichen gekürzt, um einen potenziellen Ausführungsfehler zu vermeiden.

SUDO_EDITOR Standardeditor für den Modus -e (sudoedit).

SUDO_GID Wird auf die Gruppen-ID des Benutzers gesetzt, der sudo aufgerufen hat.

SUDO_HOME Wird auf das Home-Verzeichnis des Benutzers gesetzt, der sudo aufgerufen hat.

SUDO_PROMPT Wird als Standardpasswortaufforderung verwendet, es sei denn, die Option -p wurde angegeben.

SUDO_PS1 Wenn gesetzt, wird PS1 auf seinen Wert für das ausgeführte Programm gesetzt.

SUDO_TTY Wird auf das Terminalgerät des Benutzers gesetzt, der sudo aufgerufen hat, falls vorhanden.

SUDO_UID Wird auf die Benutzer-ID des Benutzers gesetzt, der sudo aufgerufen hat.

SUDO_USER Wird auf den Login-Namen des Benutzers gesetzt, der sudo aufgerufen hat.

USER Wird auf denselben Wert wie LOGNAME gesetzt, wie oben beschrieben.

VISUAL Standardeditor für den Modus -e (sudoedit), falls SUDO_EDITOR nicht gesetzt ist.

DATEIEN

/etc/sudo.conf sudo-Frontend-Konfiguration

BEISPIELE

Die folgenden Beispiele gehen von einer korrekt konfigurierten Sicherheitsrichtlinie aus.

Um eine Dateiliste eines nicht lesbaren Verzeichnisses abzurufen:

$ sudo ls /usr/local/protected

Um das Home-Verzeichnis des Benutzers yaz auf einem System aufzulisten, auf dem das Dateisystem, das ~yaz enthält, nicht als Root exportiert wird:

$ sudo -u yaz ls ~yaz

Um die Datei index.html als Benutzer www zu bearbeiten:

$ sudoedit -u www ~www/htdocs/index.html

Um Systemprotokolle anzuzeigen, auf die nur Root und Benutzer in der Gruppe adm Zugriff haben:

$ sudo -g adm more /var/log/syslog

Um einen Editor als Benutzer Jim mit einer anderen primären Gruppe auszuführen:

$ sudoedit -u jim -g audio ~jim/sound.txt

Um einen Computer herunterzufahren:

$ sudo shutdown -r +15 "schneller Neustart"

Um eine Nutzungsliste der Verzeichnisse in der /home-Partition zu erstellen. Die Befehle werden in einer Subshell ausgeführt, damit die cd-Befehl und die Dateiumleitung funktionieren.

$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

DIAGNOSTIK

Fehlermeldungen von sudo umfassen:

Das Bearbeiten von Dateien in einem beschreibbaren Verzeichnis ist nicht zulässig

Standardmäßig erlaubt sudoedit nicht das Bearbeiten einer Datei, wenn eines der übergeordneten Verzeichnisse für den aufrufenden Benutzer beschreibbar ist. Dadurch wird eine Race Condition vermieden, die es dem Benutzer ermöglichen könnte, eine beliebige Datei zu überschreiben. Weitere Informationen finden Sie in der Option sudoedit_checkdir in sudoers(5).

Das Bearbeiten von symbolischen Links ist nicht zulässig

Standardmäßig folgt sudoedit beim Öffnen von Dateien keine symbolischen Links. Weitere Informationen finden Sie in der Option sudoedit_follow in sudoers(5).

Die effektive UID ist nicht 0, ist sudo als Set-UID-Root installiert?

sudo wurde nicht mit Root-Privilegien ausgeführt. Die sudo-Binärdatei muss im Besitz des Root-Benutzers sein und das Set-User-ID-Bit gesetzt haben. Außerdem darf sie sich nicht auf einem mit der Option nosuid gemounteten Dateisystem oder auf einem NFS-Dateisystem befinden, das UID 0 einem nicht privilegierten Benutzer zuordnet.

Die effektive UID ist nicht 0, befindet sich sudo auf einem Dateisystem mit der Option `nosuid` oder auf einem NFS-Dateisystem ohne Root-Privilegien?

sudo wurde nicht mit Root-Privilegien ausgeführt. Die sudo-Binärdatei hat den richtigen Besitzer und die richtigen Berechtigungen, wurde aber trotzdem nicht mit Root-Privilegien ausgeführt. Der häufigste Grund dafür ist, dass sich die sudo-Binärdatei auf einem mit der Option nosuid gemounteten Dateisystem befindet oder es sich um ein NFS-Dateisystem handelt, das UID 0 einem nicht privilegierten Benutzer zuordnet.

Fataler Fehler, Plugins können nicht geladen werden

Es ist ein Fehler aufgetreten, während die in sudo.conf(5) angegebenen Plugins geladen oder initialisiert wurden.

Ungültiger Name der Umgebungsvariable

Einer oder mehrere der über die Option -E angegebenen Namen von Umgebungsvariablen enthielten ein Gleichheitszeichen (=). Die Argumente der Option -E sollten Namen von Umgebungsvariablen ohne zugehörigen Wert sein.

Es wurde kein Passwort eingegeben

Als sudo versuchte, das Passwort zu lesen, hat es keine Zeichen empfangen. Dies kann vorkommen, wenn kein Terminal verfügbar ist (oder die Option -S angegeben ist) und die Standardeingabe von /dev/null umgeleitet wurde.

Ein Terminal ist erforderlich, um das Passwort zu lesen

sudo muss das Passwort lesen, aber es gibt keinen Mechanismus, mit dem es dies tun kann. Remote-Befehle, die über ssh(1) ausgeführt werden, haben standardmäßig kein Terminal verfügbar; die Übergabe der Option -t an ssh(1) führt dazu, dass ein Terminal zugewiesen wird, was sudo das Lesen des Passworts ermöglichen sollte. Um sudo zu ermöglichen, lokale Befehle ohne ein Terminal auszuführen, kann die Option -S verwendet werden, um ein Passwort von der Standardeingabe zu lesen, oder ein Askpass-Helfer kann über die Datei sudo.conf(5) oder durch Setzen der Umgebungsvariablen SUDO_ASKPASS konfiguriert werden.


kein beschreibbares temporäres Verzeichnis gefunden
sudoedit konnte kein verwendbares temporäres Verzeichnis finden, in dem die Zwischendateien gespeichert werden können.

Die „keine neuen Privilegien“-Flagge ist gesetzt, wodurch verhindert wird, dass sudo als Root ausgeführt wird.
sudo wurde von einem Prozess ausgeführt, bei dem die Linux-Flagge „keine neuen Privilegien“ gesetzt ist. Dadurch wird das Set-User-ID-Bit beim Ausführen einer ausführbaren Datei ignoriert, was dazu führt, dass sudo nicht funktioniert. Die wahrscheinlichste Ursache dafür ist die Ausführung von sudo in einem Container, der diese Flagge setzt. Überprüfen Sie die Dokumentation, um zu sehen, ob es möglich ist, den Container so zu konfigurieren, dass diese Flagge nicht gesetzt wird.

sudo muss dem Benutzer mit der UID 0 gehören und das Setuid-Bit gesetzt haben.
sudo wurde nicht mit Root-Rechten ausgeführt. Die sudo-Binärdatei hat nicht den richtigen Besitzer oder die richtigen Berechtigungen. Sie muss dem Root-Benutzer gehören und das Set-User-ID-Bit gesetzt haben.

sudoedit wird auf dieser Plattform nicht unterstützt.
sudoedit kann nur auf Systemen ausgeführt werden, die das Setzen der effektiven Benutzer-ID unterstützen.

Passwortabfrage hat das Zeitlimit überschritten.
Der Benutzer hat kein Passwort eingegeben, bevor das Standardzeitlimit von 5 Minuten abgelaufen ist.

Sie existieren nicht in der passwd-Datenbank.
Ihre Benutzer-ID ist nicht in der System-Passwortdatenbank vorhanden.

Sie dürfen keine Umgebungsvariablen im Bearbeitungsmodus angeben.
Es ist nur möglich, Umgebungsvariablen anzugeben, wenn ein Befehl ausgeführt wird. Beim Bearbeiten einer Datei wird der Editor mit der unveränderten Umgebung des Benutzers ausgeführt.

SIEHE AUCH

su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8).

HISTORIE

Sehen Sie sich die Datei HISTORY.md in der sudo-Distribution (https://www.sudo.ws/about/history/) an, um eine kurze Geschichte von sudo zu erhalten.

AUTOREN

Viele Personen haben im Laufe der Jahre an sudo gearbeitet; diese Version besteht hauptsächlich aus Code, der von Folgendem geschrieben wurde:

Todd C. Miller

Sehen Sie sich die Datei CONTRIBUTORS.md in der sudo-Distribution (https://www.sudo.ws/about/contributors/) an, um eine vollständige Liste der Personen zu erhalten, die zu sudo beigetragen haben.

HINWEISE

Es gibt keine einfache Möglichkeit, zu verhindern, dass ein Benutzer eine Root-Shell erhält, wenn dieser Benutzer beliebige Befehle über sudo ausführen darf. Außerdem ermöglichen viele Programme (wie z. B. Editoren) dem Benutzer, über Shell-Escapes Befehle auszuführen, wodurch die sudo-Prüfungen umgangen werden. Auf den meisten Systemen ist es jedoch mit der Funktion „noexec“ des sudoers(5)-Plugins möglich, Shell-Escapes zu verhindern.

Es ist nicht sinnvoll, den Befehl „cd“ direkt über sudo auszuführen, z. B.:

$ sudo cd /usr/local/protected

da beim Beenden des Befehls der übergeordnete Prozess (Ihre Shell) immer noch derselbe ist. Mit der Option -D kann ein Befehl in einem bestimmten Verzeichnis ausgeführt werden.

Das Ausführen von Shell-Skripten über sudo kann dieselben Kernel-Fehler aufdecken, die Set-User-ID-Shell-Skripte auf einigen Betriebssystemen unsicher machen (wenn Ihr Betriebssystem ein Verzeichnis /dev/fd/ hat, sind Set-User-ID-Shell-Skripte im Allgemeinen sicher).


FEHLER

Wenn Sie glauben, einen Fehler in sudo gefunden zu haben, können Sie entweder einen Fehlerbericht in der sudo-Fehlerdatenbank unter https://bugzilla.sudo.ws/ oder ein Problem unter https://github.com/sudo-project/sudo/issues einreichen. Wenn Sie es vorziehen, E-Mails zu verwenden, können Sie Nachrichten an die sudo-workers-Mailingliste unter https://www.sudo.ws/mailman/listinfo/sudo-workers (öffentlich) oder <_> (privat) senden.

Bitte melden Sie keine Sicherheitslücken über öffentliche GitHub-Probleme, Bugzilla oder Mailinglisten. Melden Sie diese stattdessen per E-Mail an <_>. Sie können Ihre Nachricht bei Bedarf mit PGP verschlüsseln. Der Schlüssel dazu finden Sie unter https://www.sudo.ws/dist/PGPKEYS.

SUPPORT

Begrenzter kostenloser Support ist über die sudo-users-Mailingliste verfügbar. Informationen zum Abonnieren oder zum Durchsuchen der Archive finden Sie unter https://www.sudo.ws/mailman/listinfo/sudo-users.

HAFTUNGSAUSSCHLUSS

sudo wird „WIE ES IST“ bereitgestellt, und alle ausdrücklichen oder stillschweigenden Garantien, einschließlich, aber nicht beschränkt auf die stillschweigenden Garantien der Marktgängigkeit und der Eignung für einen bestimmten Zweck, werden ausgeschlossen. Weitere vollständige Informationen finden Sie in der Datei LICENSE.md, die mit sudo verteilt wird, oder unter https://www.sudo.ws/about/license/.