Mit „sudo“ (superuser do) wird ein einzelner Befehl im Namen eines anderen Benutzers, in der Regel im Namen von „root“, ausgeführt. Auf diese Weise können Sie auf dem Server mit einem eigenen Benutzer mit eingeschränkten Rechten arbeiten und Ihre Berechtigungen nur für jene Schritte erweitern, für die dies tatsächlich erforderlich ist. Jeder mit „sudo“ ausgeführte Befehl wird protokolliert, sodass sich auch im Nachhinein feststellen lässt, wer welche Aktion durchgeführt hat.
Wie Sie einen Benutzer anlegen und ihm sudo-Rechte zuweisen können, wird im Artikel „Benutzer anlegen und sudo-Rechte unter Linux zuweisen“ beschrieben. Dieser Artikel erläutert die Verwendung des Befehls. Die Beispiele wurden auf einem AlmaLinux 10.2-System mit der sudo-Version 1.9.17 getestet, und zwar mit einem Benutzer namens „fejleszto“, der der Gruppe „wheel“ angehört. Ab Ubuntu 26.04 steht hinter dem Befehl „sudo“ das in Rust neu geschriebene „sudo-rs“ (die erste Zeile von „sudo -V“: „sudo-rs …“); die hier beschriebene grundlegende Verwendung ist zwar identisch, jedoch können einige selten verwendete Schalter und „sudoers“-Einstellungen fehlen.
Erste Nutzung
sudo whoami
Beim ersten Mal gibt „sudo“ eine kurze Warnmeldung aus und fordert Sie anschließend auf, Ihr eigenes Passwort einzugeben (nicht das von „root“):
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
For security reasons, the password you type will not be visible.
[sudo] password for fejleszto:
Während der Eingabe wird das Passwort nicht angezeigt, auch keine Sternchen. Bei einer Falscheingabe fordert sudo mit der Meldung „Sorry, try again.“ zur erneuten Eingabe auf; nach drei Fehlversuchen wird der Vorgang abgebrochen. Bei korrekter Passworteingabe wird der Befehl ausgeführt, die Ausgabe lautet „root“.
Der Passwort-Cache
Nach erfolgreicher Passworteingabe fordert sudo im selben Terminal fünf Minuten lang kein neues Passwort mehr an (Authentication timestamp timeout: 5.0 minutes). Dies können Sie wie folgt handhaben:
sudo -v # jelszó megadása előre, vagy az öt perc meghosszabbítása
sudo -k # a gyorsítótár azonnali törlése: a következő sudo újra jelszót kér
sudo -K # ugyanez az összes terminálra
Mit dem Schalter „-n“ (nicht interaktiv) fragt „sudo“ nicht nach einem Passwort, sondern bricht mit der Fehlermeldung „sudo: a password is required“ ab, falls dies erforderlich wäre. Auf diese Weise lässt sich in Skripten vermeiden, dass die Ausführung bei einer Passwortabfrage unterbrochen wird.
In einem Skript empfiehlt es sich zudem, vorab zu prüfen, ob der Benutzer einen bestimmten Befehl ausführen darf. Dazu dient der Befehl „sudo -n -l“ mit dem vollständigen Pfad des Befehls:
sudo -n -l /usr/bin/systemctl restart nginx && sudo -n /usr/bin/systemctl restart nginx
Das „-l“ führt hier keine Aktion aus: Wenn die Regel den Befehl zulässt, gibt es den Befehl aus und beendet die Ausführung mit dem Wert 0; andernfalls mit dem Wert 1. Im Test ergab sich bei einem Benutzer, der lediglich zum Neustart von Nginx berechtigt war, bei „sudo -n -l … restart nginx“ der Wert 0 und bei „… stop nginx“ der Wert 1; der häufig anzutreffende Test „sudo -n true“ führte hingegen zu einem Fehler, obwohl der Neustart zulässig war. Das Gegenteil kann ebenfalls eintreten: Da „-l“ lediglich die Regel prüft, gibt es auch bei einem durch ein Passwort autorisierten Befehl den Wert 0 zurück, während die tatsächliche Ausführung von „sudo -n“ dennoch ein Passwort verlangen würde.
Geben Sie Ihr Passwort nicht über eine Pipe an sudo weiter (echo jelszo | sudo -S …): Es könnte in den Befehlsverlauf und die Prozessliste gelangen. Verwenden Sie für die Automatisierung eine eingeschränkte, passwortfreie Regel (siehe unten).
Die häufigsten Schalter
| Befehl | Was macht das Programm? |
|---|---|
sudo parancs |
Der Befehl wird als Root ausgeführt |
sudo -u apache parancs |
Der Befehl wird als apache-Benutzer ausgeführt |
sudo -i |
Root-Anmeldeshell: Startet in der Root-Umgebung im Verzeichnis /root |
sudo -s |
Root-Shell, bleibt jedoch im aktuellen Verzeichnis |
sudo -l |
Was können Sie mit „sudo“ ausführen? |
sudo -l -U fejleszto |
Regeln für einen anderen Benutzer (als Root oder sofern dieser dazu berechtigt ist) |
sudoedit /etc/fajl oder sudo -e |
Bearbeiten von Systemdateien mit dem hauseigenen Editor |
sudo -k, sudo -v, sudo -n |
Verwaltung des Passwort-Caches (siehe oben) |
Im Test lautete die Ausgabe von „sudo -i pwd“ /root, die Ausgabe von „sudo -s pwd“, das aus dem Verzeichnis /tmp gestartet wurde, lautete /tmp. Das Ausführen im Namen eines Dienstes ist beispielsweise nützlich, wenn Sie überprüfen möchten, ob der Webserver die Datei liest: „sudo -u apache cat /var/www/html/index.php“.
Unter AlmaLinux ist $HOME bei der Verwendung von sudo immer das Verzeichnis des Zielbenutzers (aufgrund der Einstellung „always_set_home“ in der sudoers-Datei; im Test lautete die Ausgabe von „sudo sh -c 'echo $HOME'“ /root), daher ist der hier nicht erforderliche Schalter -H, der in anderen Anleitungen zu finden ist, nicht anzugeben.
Der Befehl „sudo -i“ ist praktisch, wenn viele Administratorvorgänge nacheinander ausgeführt werden müssen; solange die Root-Shell jedoch geöffnet ist, werden alle Befehle ohne Einschränkungen ausgeführt. Wenn Sie fertig sind, verlassen Sie die Shell bitte mit dem Befehl „exit“.
Dateien bearbeiten: sudoedit
sudoedit /etc/nginx/nginx.conf
sudoedit erstellt eine temporäre Kopie der Datei, öffnet diese mit seinem eigenen Editor und unter den eigenen Berechtigungen und schreibt sie erst beim Speichern als root zurück. Auf diese Weise läuft der Editor nicht als root, und weder der Eigentümer noch die Berechtigungen der Datei ändern sich; im Test blieb eine Datei mit der Berechtigung 600, die root gehörte, auch nach der Bearbeitung unverändert. Den Editor können Sie über die Umgebungsvariable „SUDO_EDITOR“ oder „EDITOR“ festlegen, beispielsweise mit dem Befehl „export EDITOR=nano“ (zu den Editoren: Grundlagen zu nano und vim).
Häufige Fallstricke
Die Weiterleitung wird nicht als Root ausgeführt
sudo echo "teszt" > /etc/teszt.conf
bash: line 1: /etc/teszt.conf: Permission denied
Die Umleitung > wird noch von Ihrer Shell mit Ihren eigenen Rechten durchgeführt, bevor sudo gestartet wird. Tragen Sie daher Folgendes in die Systemdatei ein:
echo "teszt" | sudo tee /etc/teszt.conf # felülírás
echo "teszt" | sudo tee -a /etc/teszt.conf # hozzáfűzés
Der Befehl „sudo cd“ führt zu keiner Reaktion
„cd“ ist ein in die Shell integrierter Befehl; „sudo“ kann diesen nicht auf seine eigene Shell anwenden. Unter AlmaLinux gibt „sudo cd /root“ zwar keinen Fehler aus (es gibt ein Dienstprogramm namens /usr/bin/cd), doch das Verzeichnis ändert sich nicht. Wenn Sie in einem Verzeichnis arbeiten müssen, das nur für root lesbar ist, geben Sie den vollständigen Pfad an (sudo ls /root) oder führen Sie eine kurze Befehlszeile in einer Root-Shell aus:
sudo sh -c 'cd /var/log/nginx && ls -lh > /root/naplok.txt'
Hier werden sowohl der Verzeichniswechsel als auch die Umleitung als Root ausgeführt, jedoch nur für die Dauer dieses Befehls; Ihr eigenes Terminal bleibt unverändert. Achten Sie auf die Anführungszeichen: Alles, was darin steht, wird vollständig als Root ausgeführt.
Der PATH ist anders
sudo verwendet aus Sicherheitsgründen einen eigenen Suchpfad (secure_path = /sbin:/bin:/usr/sbin:/usr/bin), weshalb Programme, die in Ihrem Home-Verzeichnis (~/bin, ~/.local/bin) installiert sind, mit sudo unter Angabe des vollständigen Pfads aufgerufen werden müssen.
Aliase funktionieren nach „sudo“ nicht
Der Befehl „sudo ll“ gibt die Fehlermeldung „command not found“ aus, da die Shell Aliase nur beim ersten Wort der Befehlszeile auflöst. Die Lösung finden Sie im Artikel zum Thema Aliase: Erstellen und Verwalten von Bash-Aliasen.
Wenn Sie keine „sudo“-Rechte haben
ugyfel is not in the sudoers file.
Der Benutzer ist nicht Mitglied der Gruppe „wheel“, und es gibt keine gesonderte Regel für ihn. Falls er gerade in die Gruppe aufgenommen wurde, sollte er sich abmelden und erneut anmelden: Die Gruppenzugehörigkeit wird erst bei der nächsten Anmeldung wirksam (die aktuellen Gruppen werden durch den Befehl „id -nG“ angezeigt). Ältere sudo-Versionen fügten noch hinzu: „This incident will be reported.“; der Versuch wird auch jetzt noch im Protokoll vermerkt. Root-Rechte können vom Systemadministrator vergeben werden, siehe: Benutzer anlegen und sudo-Rechte vergeben.
Die Regeln: sudoers
Die sudo-Regeln befinden sich in der Datei /etc/sudoers und im Verzeichnis /etc/sudoers.d/. Unter AlmaLinux ist folgende Zeile entscheidend:
%wheel ALL=(ALL) ALL
Das bedeutet, dass Mitglieder der Gruppe „wheel“ auf jedem Rechner (ALL), als jeder Benutzer (ALL) und jeden Befehl ALL ausführen können – mit Passwort. Der Eintrag #includedir /etc/sudoers.d am Ende der Datei ist kein Kommentar: Er sorgt dafür, dass die Dateien aus diesem Verzeichnis eingelesen werden. Auf Rechnern, die aus Cloud-Images installiert wurden, befindet sich hier beispielsweise die Datei „90-cloud-init-users“ mit der Regel für den bei der Installation erstellten Benutzer.
Eingeschränkte Zugriffsrechte ohne Passwort
Wenn ein Benutzer (oder ein Installationsskript) nur wenige Befehle ausführen muss, legen Sie dafür eine spezifische Regel in einer separaten Datei fest:
sudo visudo -f /etc/sudoers.d/fejleszto-nginx
fejleszto ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl reload nginx
Im Test konnte der Benutzer „fejleszto“ Nginx ohne Passwort neu starten, während der Befehl „sudo systemctl stop nginx“ weiterhin ein Passwort verlangte.
Die Namen der Dateien im Verzeichnis /etc/sudoers.d/** dürfen keinen Punkt enthalten und nicht auf ~ enden**: Solche Dateien werden ohne das Wort „sudo“ übersprungen. Im Test funktionierte eine Regel in einer Datei namens „pont.teszt“ und einer namens „tilde-teszt~“ nicht, dieselbe Regel unter dem Namen „pontteszt“ hingegen schon. Auch „visudo -c“ gibt hierzu keine Warnung aus, da die übersprungene Datei gar nicht überprüft wird. Geben Sie Befehle stets mit dem vollständigen Pfad an (command -v systemctl) und erteilen Sie dem Editor, der Shell oder einem Programm, von dem aus eine Shell gestartet werden kann, keine NOPASSWD-Berechtigung, da dadurch vollständige Root-Rechte erlangt werden können.
Immer mit visudo
visudo überprüft die Syntax vor dem Speichern. Aufgrund einer fehlerhaften sudoers-Datei könnte niemand sudo verwenden, und der Fehler könnte nur mit dem Root-Passwort oder über die Konsole behoben werden. Überprüfung aller Dateien:
sudo visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/90-cloud-init-users: parsed OK
/etc/sudoers.d/fejleszto-nginx: parsed OK
Eine falsch eingegebene Regel (hier fehlt der Doppelpunkt nach „NOPASSWD“) wird von „visudo“ mit der Zeilen- und Spaltennummer gekennzeichnet:
/etc/sudoers.d/hibas:1:49: syntax error
fejleszto ALL=(root) NOPASSWD /usr/bin/systemctl
Protokoll: Wer hat was ausgeführt?
Unter AlmaLinux wird jeder sudo-Aufruf in die Datei /var/log/secure sowie in das Systemprotokoll geschrieben:
sudo grep 'sudo.*COMMAND' /var/log/secure | tail
sudo journalctl _COMM=sudo --since today
Ein Beispielbeitrag:
sudo[2772]: fejleszto : TTY=pts/0 ; PWD=/home/fejleszto ; USER=root ; COMMAND=/bin/whoami
Auch fehlgeschlagene Anmeldeversuche (falsches Passwort, fehlende Berechtigung) werden hier angezeigt. Informationen zur Verwaltung der Protokolle finden Sie im Artikel „Protokolldateien lesen: journalctl und /var/log“.
Bewährte Vorgehensweise
- Arbeiten Sie mit einem eigenen Benutzerkonto und führen Sie nur die erforderlichen Befehle mit „
sudo“ aus. Wenn alles einwandfrei funktioniert, können Sie die Root-SSH-Anmeldung deaktivieren; siehe: Sicherheitseinstellungen des SSH-Servers. - Verwenden Sie ein starkes, einzigartiges Passwort: Auch bei der Anmeldung mit SSH-Schlüssel schützt dies die Root-Rechte.
- Vergeben Sie die Mitgliedschaft in der Gruppe „
wheel“ nur an diejenigen, die sie tatsächlich benötigen; für alle anderen gilt eine strenge, befehlsbezogene Regelung.
Über die Verantwortung im Zusammenhang mit dem Root-Zugriff informiert der Artikel „Was bedeutet Root-Zugriff?“. Unsere KVM-VPS werden mit vollständigem Root-Zugriff bereitgestellt, sodass Sie die Benutzer und die sudo-Regeln selbst festlegen können.
