Das Sicherheitsprinzip der minimalen Rechte (Principle of Least Privilege) besagt, dass Benutzer und Prozesse nur über die Berechtigungen verfügen sollten, die sie zur Erfüllung ihrer Aufgaben tatsächlich benötigen. Unter Linux bedeutet dies insbesondere, administrative Tätigkeiten nicht dauerhaft mit dem privilegierten Benutzer root auszuführen.
Mit dem Kommando sudo (superuser do) können berechtigte Benutzer einzelne Befehle mit erhöhten Rechten ausführen, ohne sich unmittelbar als root anmelden zu müssen. Die administrativen Berechtigungen werden damit gezielt und nur bei Bedarf verwendet. Das reduziert das Risiko unbeabsichtigter Änderungen und erschwert den Missbrauch privilegierter Benutzerkonten.
Für die Systemadministration empfiehlt es sich, personenbezogene Benutzerkonten einzusetzen, anstatt ein gemeinsames Administratorkonto zu verwenden. sudo protokolliert standardmäßig die darüber aufgerufenen Befehle und den ausführenden Benutzer. Administrative Eingriffe lassen sich dadurch besser nachvollziehen und einzelnen Benutzerkonten zuordnen. Dies ist insbesondere für die Informationssicherheit und die Erfüllung von Compliance-Anforderungen von Bedeutung.
Installation
Bei minimalen Linux-Installationen, beispielsweise unter Debian, ist sudo möglicherweise noch nicht installiert. Die Installation erfolgt zunächst mit administrativen Rechten, beispielsweise nach einer Anmeldung als root:
# apt install sudo
Unter Debian erhalten Mitglieder der Gruppe sudo standardmäßig die Berechtigung, administrative Befehle auszuführen. Ein vorhandener Benutzer kann als root dieser Gruppe hinzugefügt werden:
# usermod -aG sudo pronto
Die neue Gruppenzugehörigkeit wird in der Regel erst nach einer erneuten Anmeldung wirksam. Anschließend kann der Benutzer administrative Befehle mit sudo ausführen.
sudoers-Datei
Die sudoers-Konfiguration
Welche Benutzer administrative Befehle ausführen dürfen und unter welchen Bedingungen dies geschieht, wird durch die sudoers-Konfiguration festgelegt.
Die zentrale Konfigurationsdatei befindet sich unter /etc/sudoers. Unter Debian enthält sie normalerweise bereits die folgende Regel:
%sudo ALL=(ALL:ALL) ALL
Das vorangestellte % kennzeichnet eine Benutzergruppe. Die Regel erlaubt allen Mitgliedern der Gruppe sudo, auf dem jeweiligen System Befehle als beliebiger Benutzer und mit beliebiger Zielgruppe auszuführen. Standardmäßig wird dabei das Passwort des aufrufenden Benutzers verlangt.
Zusätzliche Konfigurationen können über das Verzeichnis /etc/sudoers.d/ eingebunden werden. Dazu enthält die zentrale Datei üblicherweise folgende Direktive:
@includedir /etc/sudoers.d
Für individuelle Anpassungen empfiehlt es sich, separate Konfigurationsdateien in diesem Verzeichnis anzulegen. Die zentrale /etc/sudoers bleibt dadurch unverändert. Das erleichtert die Verwaltung und verhindert Konflikte mit Aktualisierungen der systemseitigen Konfiguration.
Benutzerspezifische Konfiguration: Timeout
Standardmäßig speichert sudo eine erfolgreiche Authentifizierung für einen begrenzten Zeitraum zwischen. Innerhalb dieser Zeit kann der Benutzer weitere administrative Befehle ausführen, ohne sein Passwort erneut eingeben zu müssen. Unter Debian beträgt dieser Zeitraum üblicherweise 15 Minuten.
Für interaktive Administrationsarbeiten kann es sinnvoll sein, die Authentifizierung stattdessen an das jeweilige Terminal zu binden und den zeitlichen Ablauf innerhalb dieser Terminalsitzung zu deaktivieren.
Damit muss sich ein Benutzer beim ersten administrativen Befehl authentifizieren. Weitere sudo-Aufrufe innerhalb desselben Terminals erfordern keine erneute Passworteingabe. Wird ein neues Terminal geöffnet, ist grundsätzlich eine neue Authentifizierung erforderlich.
Für den Benutzer pronto wird dazu eine eigene Konfigurationsdatei angelegt:
$ sudo visudo -f /etc/sudoers.d/pronto
Fügen Sie folgenden Inhalt ein:
# Administrative Rechte mit terminalbezogener Authentifizierung
Defaults:pronto timestamp_timeout=-1
Defaults:pronto timestamp_type=tty
pronto ALL=(ALL:ALL) PASSWD: ALL
Die beiden Defaults-Direktiven steuern das Verhalten der Authentifizierung.
Mit timestamp_timeout=-1 wird die zeitliche Begrenzung des Authentifizierungszeitstempels aufgehoben. Eine erneute Passworteingabe ist damit innerhalb derselben Terminalsitzung nicht erforderlich, solange der entsprechende Zeitstempel gültig bleibt.
Die Einstellung timestamp_type=tty bewirkt, dass sudo für jedes Terminal einen separaten Authentifizierungszeitstempel verwendet. Unter Debian ist dieses Verhalten normalerweise bereits voreingestellt. Die explizite Angabe macht die gewünschte Konfiguration jedoch unabhängig von abweichenden systemweiten Vorgaben nachvollziehbar. Ohne zugeordnetes Terminal orientiert sich sudo stattdessen an der übergeordneten Prozess-ID.
Die letzte Zeile erlaubt dem Benutzer pronto, administrative Befehle auszuführen, und verlangt hierfür grundsätzlich eine Passwortauthentifizierung. Gehört der Benutzer bereits der Gruppe sudo an, ist diese Berechtigung durch die Gruppenregel normalerweise schon vorhanden. Die zusätzliche Angabe dient hier der expliziten Dokumentation der Benutzerrechte.
Konfiguration überprüfen
Verwenden Sie für Änderungen an der sudoers-Konfiguration grundsätzlich visudo. Das Programm prüft die Syntax vor der Übernahme und hilft dadurch, fehlerhafte Konfigurationen zu vermeiden. visudo öffnet die Konfigurationsdatei im eingestellten Standardeditor.
Eine zusätzliche Prüfung sämtlicher eingebundener Konfigurationsdateien ist mit folgendem Kommando möglich:
$ sudo visudo -c
Zur Überprüfung der Authentifizierung kann der vorhandene Zeitstempel zunächst zurückgesetzt werden:
$ sudo -k
Anschließend führen Sie einen administrativen Befehl aus:
$ sudo id
Beim ersten Aufruf sollte eine Passwortabfrage erscheinen. Wiederholen Sie das Kommando, erfolgt die Ausführung ohne erneute Authentifizierung.
Öffnen Sie nun ein weiteres Terminal und führen Sie denselben Befehl aus. In diesem Terminal sollte sudo erneut nach dem Passwort fragen.
Mit sudo -k kann die zwischengespeicherte Authentifizierung des aktuellen Terminals jederzeit ungültig gemacht werden. sudo -K entfernt dagegen sämtliche gespeicherten Authentifizierungszeitstempel des Benutzers.
Die Bindung erfolgt technisch an die Terminalsitzung und nicht unmittelbar an das grafische Terminalfenster. Moderne sudo-Versionen berücksichtigen zusätzliche Sitzungsmerkmale, um eine unbeabsichtigte Wiederverwendung von Authentifizierungszeitstempeln nach dem Abmelden zu verhindern.
Alternative: NOPASSWD
Für spezielle Anwendungsfälle, beispielsweise bestimmte automatisierte Abläufe, können Befehle auch ohne Passwortabfrage freigegeben werden. Dazu dient die Option NOPASSWD.
Eine entsprechende Regel könnte beispielsweise lauten:
pronto ALL=(ALL:ALL) NOPASSWD: ALL
Damit kann der Benutzer pronto sämtliche erlaubten administrativen Befehle ohne Passwort ausführen. Die Regel sollte deshalb nicht als allgemeine Standardeinstellung verwendet werden.
Für automatisierte Prozesse empfiehlt es sich, die Freigabe auf die tatsächlich erforderlichen Befehle zu beschränken, anstatt pauschal sämtliche administrativen Rechte ohne Authentifizierung bereitzustellen.
Protokollierung
sudo protokolliert standardmäßig die ausgeführten administrativen Befehle zusammen mit Informationen zum aufrufenden Benutzer, zum Arbeitsverzeichnis und zum verwendeten Terminal.
Auf Linux-Systemen mit systemd können diese Ereignisse über das Journal eingesehen werden:
$ journalctl _COMM=sudo
Mai 31 11:07:22 debian125 sudo[1263]: pronto : TTY=pts/0 ; PWD=/home/pronto ; USER=root ; COMMAND=/usr/bin/apt update
Mai 31 11:07:22 debian125 sudo[1263]: pam_unix(sudo:session): session opened for user root(uid=0) by pronto(uid=1000)
Mai 31 11:07:23 debian125 sudo[1263]: pam_unix(sudo:session): session closed for user root
Mai 31 11:27:27 debian125 sudo[1547]: pronto : TTY=pts/0 ; PWD=/home/pronto ; USER=root ; COMMAND=/usr/bin/ls -l /var/log/
Mai 31 11:27:27 debian125 sudo[1547]: pam_unix(sudo:session): session opened for user root(uid=0) by pronto(uid=1000)
Mai 31 11:27:27 debian125 sudo[1547]: pam_unix(sudo:session): session closed for user root
Aus den Einträgen lässt sich erkennen, welcher Benutzer den jeweiligen Befehl ausgeführt hat, unter welcher Benutzeridentität der Befehl gestartet wurde und von welchem Terminal der Aufruf erfolgte.
Die Protokollierung erfasst jedoch nicht automatisch sämtliche Aktivitäten innerhalb eines mit sudo gestarteten Programms. Wird beispielsweise eine interaktive Root-Shell mit sudo -i geöffnet, wird standardmäßig der Start dieser Shell protokolliert, nicht aber jeder anschließend darin eingegebene Befehl.
Für erhöhte Anforderungen an die Nachvollziehbarkeit unterstützt sudo zusätzliche Protokollierungsfunktionen, darunter die Aufzeichnung von Ein- und Ausgaben administrativer Sitzungen.
Befehlszeilenreferenz
Die folgende Übersicht fasst die wichtigsten sudo-Befehle und Optionen für die tägliche Linux-Administration zusammen. Die Beispiele beziehen sich auf Debian und vergleichbare Linux-Distributionen.
Grundlegende Befehle
| Befehl | Beschreibung |
|---|---|
sudo <Befehl> | Führt einen Befehl mit administrativen Rechten aus, standardmäßig als root. |
sudo -u <Benutzer> <Befehl> | Führt einen Befehl unter der Identität eines anderen Benutzers aus. |
sudo -g <Gruppe> <Befehl> | Führt einen Befehl mit einer bestimmten primären Gruppe aus. |
sudo -i | Öffnet eine Login-Shell als root, einschließlich der entsprechenden Anmeldeumgebung. |
sudo -s | Öffnet eine Shell mit erhöhten Rechten, ohne eine vollständige Login-Umgebung herzustellen. |
sudo -H <Befehl> | Setzt die Umgebungsvariable HOME auf das Home-Verzeichnis des Zielbenutzers. |
sudo -E <Befehl> | Versucht, die aktuelle Benutzerumgebung zu übernehmen, soweit die Sicherheitsrichtlinie dies erlaubt. |
sudoedit <Datei> | Bearbeitet eine geschützte Datei mit dem eigenen Editor, ohne diesen dauerhaft als root auszuführen. |
sudo !! | Wiederholt den vorherigen Shell-Befehl mit sudo (Bash-History-Expansion, kein eigener sudo-Befehl). |
Authentifizierung und Berechtigungen
| Befehl | Beschreibung |
|---|---|
sudo -v | Prüft beziehungsweise erneuert die zwischengespeicherte Authentifizierung, ohne einen Befehl auszuführen. |
sudo -k | Macht den aktuellen Authentifizierungszeitstempel ungültig. Der nächste entsprechende sudo-Aufruf verlangt erneut eine Authentifizierung. |
sudo -K | Entfernt sämtliche gespeicherten Authentifizierungszeitstempel des aktuellen Benutzers. |
sudo -n <Befehl> | Führt einen Befehl ohne interaktive Passwortabfrage aus. Ist eine Authentifizierung erforderlich, schlägt der Aufruf fehl. |
sudo -l | Zeigt die für den aktuellen Benutzer erlaubten und verbotenen Befehle sowie relevante sudoers-Einstellungen an. |
sudo -ll | Zeigt die Berechtigungen ausführlicher an. |
sudo -l -U <Benutzer> | Zeigt die Berechtigungen eines anderen Benutzers an, sofern der Aufrufer dazu berechtigt ist. |
sudo -V | Zeigt Versionsinformationen von sudo und den verwendeten Plugins an. |
sudo -h | Zeigt die Kommandozeilenhilfe an. |
Konfiguration und Verwaltung
| Befehl | Beschreibung |
|---|---|
sudo visudo | Öffnet die zentrale sudoers-Konfiguration mit Syntaxprüfung. |
sudo visudo -f /etc/sudoers.d/pronto | Bearbeitet die benutzerspezifische sudoers-Datei für pronto. |
sudo visudo -c | Überprüft die Syntax der zentralen sudoers-Datei einschließlich eingebundener Dateien. |
sudo visudo -c -f /etc/sudoers.d/pronto | Prüft gezielt die angegebene Konfigurationsdatei. |
sudo cat /etc/sudoers | Zeigt die zentrale Konfiguration an. |
sudo ls -l /etc/sudoers.d/ | Listet die zusätzlichen Konfigurationsdateien und ihre Dateiberechtigungen auf. |
sudo -l -U pronto | Prüft die für pronto wirksamen Berechtigungen, sofern der Aufrufer dazu berechtigt ist. |
Praktische Anwendungsbeispiele
| Befehl | Beschreibung |
|---|---|
sudo apt update | Aktualisiert die Paketlisten. |
sudo apt upgrade | Installiert verfügbare Paketaktualisierungen. |
sudo systemctl restart apache2 | Startet den Apache-Webserver neu. |
sudo systemctl status ssh | Zeigt den Status des SSH-Dienstes an. |
sudo journalctl -u ssh | Zeigt die Journal-Einträge des SSH-Dienstes an. |
sudo journalctl _COMM=sudo | Zeigt sudo-Protokolleinträge aus dem systemd-Journal an, soweit sie verfügbar sind. |
sudo -u www-data id | Führt id unter dem Benutzerkonto www-data aus. |
sudoedit /etc/hosts | Bearbeitet die Hosts-Datei mit einem unprivilegierten Editor und privilegiertem Schreibvorgang. |
sudo id | Zeigt die Benutzer- und Gruppenidentität an, unter der der Befehl ausgeführt wird. |
Weiterführende Dokumentation
Die vollständige Dokumentation kann direkt im Terminal mit den folgenden Befehlen aufgerufen werden:
| Befehl | Beschreibung |
|---|---|
man sudo | Dokumentation zu sudo und seinen Kommandozeilenoptionen. |
man sudoers | Aufbau und Syntax der sudoers-Konfiguration. |
man visudo | Bearbeitung und Prüfung der sudoers-Dateien. |
man sudoers_timestamp | Technische Hintergründe der zwischengespeicherten Authentifizierung. |
![]()