15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
10.11.2023

So deaktivieren Sie die Passwortabfrage für den Sudo-Befehl in Linux

Der sudo Befehl — kurz für superuser do — gewährt autorisierten Linux-Benutzern temporäre Root-Rechte zur Ausführung administrativer Aufgaben. Standardmäßig erfordert jeder sudo Aufruf eine Passwortauthentifizierung zur Überprüfung der Identität des Aufrufers. Sie können diese Passwortabfrage entweder global für einen Benutzer, selektiv für bestimmte Befehle oder vorübergehend für eine Sitzung deaktivieren, indem Sie die /etc/sudoers Datei über visudo bearbeiten oder die timestamp_timeout Direktive anpassen.

Bevor Sie fortfahren: Die Deaktivierung der sudo-Passwortauthentifizierung verringert die Defense-in-Depth-Sicherheit Ihres Systems. Wenden Sie diese Änderungen nur auf vertrauenswürdige Konten an, vorzugsweise auf bestimmte Befehle beschränkt, anstatt pauschale ALL Rechte zu vergeben. In jeder produktiven VPS Hosting Umgebung sollte passwortloses sudo als kalkulierter Kompromiss betrachtet werden, nicht als praktischer Standard.

Verstehen, wie die Sudo-Authentifizierung funktioniert

Wenn ein Benutzer sudo ausführt, authentifiziert der Linux PAM (Pluggable Authentication Modules) Stack die Anfrage anhand der in /etc/sudoers definierten Regeln. Nach erfolgreicher Authentifizierung zeichnet der Kernel einen Credential-Zeitstempel in /run/sudo/ts/ (oder /var/db/sudo/ bei älteren Distributionen) auf. Nachfolgende sudo Aufrufe innerhalb des timestamp_timeout Fensters — standardmäßig 15 Minuten — überspringen die erneute Authentifizierung vollständig.

Diese Architektur bedeutet, dass es zwei grundlegend verschiedene Hebel gibt, die Sie betätigen können:

  • Credential-Caching — Verlängern oder Eliminieren des Timeout-Fensters, sodass der Benutzer sich einmal authentifiziert und das Credential länger bestehen bleibt.
  • NOPASSWD-Direktivesudo anweisen, die Authentifizierung für bestimmte Befehle oder Benutzer vollständig zu überspringen, unabhängig vom Timing.

Das Verständnis dieses Unterschieds ist entscheidend. Die Verlängerung von timestamp_timeout auf einen großen Wert erfordert immer noch eine initiale Authentifizierung. Die NOPASSWD Direktive erfordert überhaupt keine Authentifizierung. Diese sind aus Sicherheitssicht nicht gleichwertig.

Die sudoers-Datei: Architektur und sicheres Bearbeiten

Die primäre Konfigurationsdatei ist /etc/sudoers. Sie darf niemals direkt mit einem Standard-Texteditor bearbeitet werden. Verwenden Sie immer visudo, welches:

  • Die Datei gegen gleichzeitige Bearbeitungen sperrt
  • Die Syntax vor dem Speichern validiert
  • Verhindert, dass eine fehlerhafte sudoers-Datei alle Benutzer aus sudo aussperrt
sudo visudo

Auf modernen Debian/Ubuntu-Systemen enthält /etc/sudoers ein Drop-in-Verzeichnis:

/etc/sudoers.d/

Sie können dort einzelne Regeldateien ablegen, anstatt die Hauptdatei direkt zu bearbeiten. Dies ist der empfohlene Ansatz für Produktionssysteme — er hält Ihre benutzerdefinierten Regeln isoliert und macht die Überprüfung unkompliziert.

sudo visudo -f /etc/sudoers.d/custom_nopasswd

Dateien in /etc/sudoers.d/ dürfen keinen . in ihrem Namen enthalten (z. B. custom.conf vermeiden) und müssen Berechtigungen auf 0440 gesetzt haben:

sudo chmod 0440 /etc/sudoers.d/custom_nopasswd

Methode 1: Vorübergehendes Umgehen der Passwortabfrage für eine einzelne Sitzung

Das -S Flag weist sudo an, das Passwort von der Standardeingabe (stdin) statt vom Terminal zu lesen. Dies ist hauptsächlich in nicht-interaktiven Skripten nützlich, wo Sie das Passwort programmatisch übergeben:

echo "your_password" | sudo -S apt update

Wichtiger Vorbehalt: Das Einbetten von Klartext-Passwörtern in Skripten oder der Shell-Historie ist ein erhebliches Sicherheitsrisiko. Diese Methode eignet sich für isolierte Automatisierungs-Pipelines, bei denen das Passwort über einen Secrets-Manager oder eine Umgebungsvariable injiziert wird — nicht fest in einer Skriptdatei kodiert. Für unbeaufsichtigte Automatisierung auf einem Server ist die unten beschriebene NOPASSWD Direktive die architektonisch sauberere Lösung.

Methode 2: Deaktivieren der Passwortabfrage für alle Befehle eines bestimmten Benutzers

Diese Methode gewährt einem benannten Benutzer die Möglichkeit, jeden sudo Befehl ohne Passwort auszuführen. Verwenden Sie sie sparsam — typischerweise für dedizierte Dienstkonten oder Automatisierungsbenutzer, nicht für menschliche Operatorkonten.

Schritt 1: Öffnen Sie die sudoers-Datei:

sudo visudo

Schritt 2: Fügen Sie die folgende Zeile hinzu und ersetzen Sie username durch den tatsächlichen Linux-Kontonamen:

username ALL=(ALL) NOPASSWD: ALL

Schritt 3: Speichern und beenden. In nano-basiertem visudo, drücken Sie Ctrl+X, dann Y, dann Enter. In vi-basiertem visudo, geben Sie :wq ein.

Was diese Regel bedeutet, aufgeschlüsselt:

FeldWertBedeutung
usernameDer ZielbenutzerFür wen die Regel gilt
ALL (erste)Jeder HostRegel gilt auf allen Maschinen (nützlich für gemeinsame sudoers-Konfigurationen)
(ALL)Jeder ZielbenutzerKann Befehle als jeder Benutzer ausführen, einschließlich root
NOPASSWD: ALLAlle Befehle, kein PasswortKeine Authentifizierung für irgendeinen Befehl erforderlich

Methode 3: Deaktivieren der Passwortabfrage nur für bestimmte Befehle

Dies ist der sicherheitsbewussteste Ansatz, wenn passwortlose Ausführung tatsächlich erforderlich ist. Anstatt pauschale NOPASSWD: ALL Rechte zu vergeben, beschränken Sie die Ausnahme auf einen präzisen Binärpfad.

Schritt 1: Öffnen Sie die sudoers-Datei:

sudo visudo

Schritt 2: Suchen Sie den Defaults Abschnitt und fügen Sie darunter eine gezielte Regel hinzu:

username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt-get update

Ersetzen Sie username durch das tatsächliche Konto und geben Sie den vollständigen, absoluten Pfad zu jedem Befehl an. Sie können mehrere Befehle durch Kommas getrennt in einer einzigen Zeile angeben.

Schritt 3: Speichern und beenden.

Warum absolute Pfade wichtig sind: sudo löst Befehle anhand der sudoers-Regeln über den vollständigen Binärpfad auf. Wenn Sie apt-get ohne Pfad angeben, stimmt die Regel möglicherweise nicht überein, oder schlimmer noch, eine bösartige Binärdatei, die früher in $PATH platziert wurde, könnte stattdessen aufgerufen werden. Überprüfen Sie Pfade immer mit which:

which systemctl
# /usr/bin/systemctl

Praxisbeispiel: Eine Deployment-Pipeline, die als deploy Benutzer läuft, muss nach jeder Veröffentlichung Anwendungsdienste neu starten. Die Vergabe von NOPASSWD nur für systemctl restart myapp bedeutet, dass die Pipeline autonom funktionieren kann, ohne vollen Root-Zugriff preiszugeben.

Methode 4: Verlängern des Credential-Zeitstempel-Timeouts

Anstatt die Authentifizierung vollständig zu eliminieren, können Sie verlängern, wie lange sudo eine erfolgreiche Authentifizierung speichert. Dies ist die am wenigsten invasive Option für interaktive Benutzer, die mehrere administrative Befehle in einer einzigen Arbeitssitzung ausführen.

Schritt 1: Öffnen Sie die sudoers-Datei:

sudo visudo

Schritt 2: Ändern oder fügen Sie die timestamp_timeout Direktive unter dem Defaults Block hinzu:

Defaults    timestamp_timeout=60

Dies setzt den Credential-Cache auf 60 Minuten. Der Benutzer authentifiziert sich einmal, und nachfolgende sudo Befehle innerhalb dieses Fensters erfordern kein Passwort.

Spezielle Werte:

WertVerhalten
0Passwort bei jedem einzelnen sudo Aufruf erforderlich
-1Credential läuft nie ab (effektiv passwortlos nach erster Authentifizierung)
15Standard auf den meisten Distributionen
60Sinnvoll für aktive Admin-Sitzungen

Schritt 3: Speichern und beenden.

Um ein Timeout-Override nur für einen bestimmten Benutzer statt systemweit anzuwenden:

Defaults:username    timestamp_timeout=60

Methode 5: Verwendung einer sudoers Drop-in-Datei (Best Practice für die Produktion)

Anstatt /etc/sudoers direkt zu bearbeiten, erstellen Sie eine bereichsspezifische Drop-in-Datei. Dieser Ansatz ist idempotent, überprüfbar und sicher über Konfigurationsverwaltungstools wie Ansible, Puppet oder Chef zu verwalten.

sudo visudo -f /etc/sudoers.d/deploy_nopasswd

Inhalt der Datei:

# Allow the deploy user to restart services without a password
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

Korrekte Berechtigungen setzen:

sudo chmod 0440 /etc/sudoers.d/deploy_nopasswd

Überprüfen, ob die sudoers-Konfiguration über alle Dateien hinweg gültig ist:

sudo visudo -c
# sudoers file: /etc/sudoers, parsed OK
# sudoers file: /etc/sudoers.d/deploy_nopasswd, parsed OK

Vergleich aller Methoden

MethodeGeltungsbereichErfordert initiale AuthentifizierungSicherheitsrisikoBester Anwendungsfall
sudo -S mit stdinEinzelner BefehlJa (übergeben)Hoch bei HardcodierungCI/CD mit Secrets-Manager
NOPASSWD: ALLAlle Befehle, ein BenutzerNeinSehr hochIsolierte Automatisierungskonten
NOPASSWD: /path/cmdNur bestimmte BefehleNeinNiedrig-MittelDeployment-Pipelines, Skripte
timestamp_timeout VerlängerungAlle Befehle, zeitlich begrenztJa (einmal)NiedrigInteraktive Admin-Sitzungen
Drop-in /etc/sudoers.d/ DateiKonfigurierbarKonfigurierbarAbhängig von der RegelProduktion, IaC-verwaltete Server

Überlegungen zur Sicherheitshärtung

Die Deaktivierung von sudo-Passwortabfragen schafft eine reale Angriffsfläche. Wenden Sie diese Gegenmaßnahmen an:

  • Sudo-Nutzung überwachen: Aktivieren Sie sudo-Protokollierung, indem Sie Defaults logfile="/var/log/sudo.log" zu Ihrer sudoers-Konfiguration hinzufügen. Überprüfen Sie dieses Protokoll regelmäßig.
  • Nach Befehl und Argument einschränken: NOPASSWD: /usr/bin/systemctl restart nginx ist weitaus sicherer als NOPASSWD: /usr/bin/systemctl — letzteres erlaubt dem Benutzer, jeden Dienst zu stoppen, zu deaktivieren oder zu maskieren.
  • Dedizierte Dienstkonten verwenden: Wenden Sie NOPASSWD: ALL niemals auf das primäre Konto eines menschlichen Operators an. Erstellen Sie ein zweckspezifisches Konto (z. B. deploy, monitor) mit einer minimalen Befehlswhitelist.
  • Mit ausschließlicher SSH-Schlüsselauthentifizierung kombinieren: Wenn passwortloses sudo auf einem Server konfiguriert ist, stellen Sie sicher, dass der SSH-Zugang selbst schlüsselbasierte Authentifizierung erfordert. Die gleichzeitige Deaktivierung von SSH-Passwörtern und sudo-Passwörtern auf einem öffentlich zugänglichen Server ist eine kritische Fehlkonfiguration.
  • Rotieren und überprüfen: Überprüfen Sie /etc/sudoers.d/ regelmäßig auf veraltete Regeln, die mit stillgelegten Konten oder veralteten Skripten verbunden sind.

Auf Dedicated Servers, auf denen Sie volle Hardware-Kontrolle haben, haben diese Konfigurationen noch mehr Gewicht — ein kompromittiertes Konto mit passwortlosem sudo auf einer dedizierten Maschine bedeutet vollständigen, unbestrittenen Root-Zugriff ohne Eindämmung auf Hypervisor-Ebene.

Überprüfung Ihrer Konfiguration

Testen Sie nach Änderungen immer die Regel als Zielbenutzer, ohne zu root zu wechseln:

# Switch to the target user
su - username

# Test a specific command
sudo /usr/bin/systemctl restart nginx

# Verify sudo privileges without executing a command
sudo -l

sudo -l listet alle Befehle auf, die der aktuelle Benutzer ausführen darf, einschließlich derjenigen, die NOPASSWD sind. Dies ist Ihr primäres Debugging-Werkzeug, wenn eine Regel nicht wie erwartet funktioniert.

Um die effektiven sudoers-Regeln für einen bestimmten Benutzer aus einer Root-Sitzung zu überprüfen:

sudo -l -U username

Praktische Konfiguration für eine Webserver-Deployment-Pipeline

Im Folgenden finden Sie eine vollständige, produktionsreife Konfiguration für einen Deployment-Benutzer auf einem Webserver — die Art von Einrichtung, die Sie auf einem VPS mit cPanel oder einem benutzerdefinierten LEMP/LAMP-Stack verwenden würden:

1. Den Deployment-Benutzer erstellen:

sudo useradd -m -s /bin/bash deploy
sudo passwd deploy

2. Die sudoers Drop-in-Regel erstellen:

sudo visudo -f /etc/sudoers.d/deploy
# Deployment pipeline: passwordless service management only
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart php8.2-fpm
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/chown -R www-data /var/www/html

3. Berechtigungen setzen und validieren:

sudo chmod 0440 /etc/sudoers.d/deploy
sudo visudo -c

4. Als Deploy-Benutzer testen:

su - deploy
sudo systemctl restart nginx
# Should execute without a password prompt

Dieses Muster ist direkt auf jeden automatisierten Deployment-Workflow anwendbar, egal ob Sie GitHub Actions, GitLab CI, Jenkins oder ein benutzerdefiniertes Shell-Skript verwenden, das über SSH ausgelöst wird.

Wenn Ihre Infrastruktur verwaltete VPS Control Panels umfasst, stellen Sie sicher, dass der eigene Systembenutzer des Panels (z. B. cpanel, plesk) nicht unbeabsichtigt von breiten NOPASSWD: ALL Regeln betroffen ist, die Sie zu sudoers hinzufügen.

Checkliste der wichtigsten Erkenntnisse

Bevor Sie eine passwortlose sudo-Konfiguration anwenden, gehen Sie diese Entscheidungsmatrix durch:

  • Handelt es sich um ein menschliches Konto oder ein Dienstkonto? Dienstkonten können NOPASSWD tolerieren; menschliche Konten sollten stattdessen die timestamp_timeout Verlängerung verwenden.
  • Können Sie die Ausnahme auf bestimmte Befehle beschränken? Bevorzugen Sie immer NOPASSWD: /path/to/command gegenüber NOPASSWD: ALL.
  • Ist der SSH-Zugang mit schlüsselbasierter Authentifizierung gesichert? Falls nicht, beheben Sie das zuerst, bevor Sie sudo-Anforderungen lockern.
  • Wird sudo-Aktivität protokolliert? Fügen Sie Defaults logfile="/var/log/sudo.log" hinzu, falls noch nicht vorhanden.
  • Verwenden Sie Drop-in-Dateien in /etc/sudoers.d/? Bevorzugen Sie dies gegenüber der direkten Bearbeitung von /etc/sudoers für bessere Wartbarkeit.
  • Haben Sie sudo visudo -c ausgeführt, um die Syntax zu validieren? Überspringen Sie diesen Schritt niemals — ein Syntaxfehler in sudoers kann Sie vollständig aus dem administrativen Zugang aussperren.
  • Haben Sie eine Out-of-Band-Wiederherstellungsmethode? Stellen Sie bei Cloud-VPS-Instanzen sicher, dass Sie Konsolenzugang oder einen Wiederherstellungs-Snapshot haben, bevor Sie sudoers-Änderungen vornehmen.

FAQ

Was ist der sicherste Weg, passwortloses sudo für ein bestimmtes Skript zu erlauben?

Erstellen Sie ein Wrapper-Skript mit einem festen absoluten Pfad, platzieren Sie es in einem Systemverzeichnis (z. B. /usr/local/bin/deploy-restart.sh), und gewähren Sie NOPASSWD nur für diesen spezifischen Pfad in /etc/sudoers.d/. Dies verhindert Argument-Injection und begrenzt den Schaden, wenn das Konto kompromittiert wird.

Wirkt sich die Deaktivierung der sudo-Passwortabfrage sofort auf alle Terminal-Sitzungen aus?

Ja. Änderungen an /etc/sudoers oder Dateien in /etc/sudoers.d/ treten sofort für alle neuen sudo Aufrufe in Kraft. Es ist nicht notwendig, einen Dienst neu zu starten oder sich abzumelden. Bestehende zwischengespeicherte Credentials sind nicht betroffen, bis sie ablaufen.

Was passiert, wenn ich einen Syntaxfehler in der sudoers-Datei mache?

Wenn Sie visudo verwendet haben, wird es den Fehler vor dem Speichern erkennen und Sie auffordern, ihn zu korrigieren. Wenn Sie visudo irgendwie umgangen und einen Syntaxfehler eingeführt haben, wird sudo sich vollständig weigern zu laufen. Die Wiederherstellung erfordert das Booten in den Einzelbenutzermodus oder die Verwendung von Out-of-Band-Konsolenzugang zur Korrektur der Datei.

Kann ich NOPASSWD auf eine Gruppe statt auf einen einzelnen Benutzer anwenden?

Ja. Verwenden Sie die %groupname Syntax: %developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx. Dies wendet die Regel auf alle Mitglieder der developers Gruppe an, was die Verwaltung des Zugangs im großen Maßstab erleichtert, ohne sudoers für jedes neue Teammitglied bearbeiten zu müssen.

Verhält sich timestamp_timeout=-1 genauso wie NOPASSWD: ALL?

Nein. timestamp_timeout=-1 bedeutet, dass das Credential nach der ersten erfolgreichen Authentifizierung nie abläuft — aber diese erste Authentifizierung erfordert immer noch ein Passwort. NOPASSWD: ALL überspringt die Authentifizierung vollständig, einschließlich des allerersten Aufrufs. Ersteres ist für interaktive Benutzer deutlich sicherer.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen