sudo ohne Passworteingabe unter Linux verwenden
sudo apt update
sudo systemctl restart nginx
sudo reboot
Wer Linux nutzt, kommt um sudo kaum herum. Doch jedes Mal das Passwort einzugeben, kann auf Dauer lästig werden.
Wenn diese Bequemlichkeit zum Ärgernis wird, entscheidet man sich schließlich, die sudo-Passworteingabe zu deaktivieren. Wer diesen Artikel gefunden hat, teilt sicherlich ein ähnliches Gefühl.
In diesem Beitrag erkläre ich, wie Sie die sudo-Passworteingabe umgehen können.

Wo finde ich die sudo-Konfiguration und wie bearbeite ich sie?
Die Hauptkonfigurationsdatei für sudo befindet sich hier:
/etc/sudoers
Fehler in der sudo-Konfiguration können zu erheblichen Problemen führen. Wenn Sie eine falsche Einstellung vornehmen und sudo selbst blockieren, kann die Wiederherstellung mühsam sein. Aus diesem Grund verwendet man den speziellen Befehl visudo.
sudo visudo
visudo prüft die Syntax beim Speichern und warnt Sie sofort bei Tippfehlern. Auch im offiziellen Handbuch wird dringend empfohlen, visudo zu verwenden.
Vermeiden Sie die direkte Bearbeitung von /etc/sudoers
Wenn Sie sudo visudo eingeben, öffnet sich sofort die Datei /etc/sudoers und Sie können sie direkt bearbeiten.
Es ist jedoch keine gute Praxis, die Datei /etc/sudoers direkt zu ändern.
Ich persönlich ziehe es vor, die Hauptkonfigurationsdatei nicht anzutasten und stattdessen neue Dateien in diesem Verzeichnis zu erstellen: /etc/sudoers.d/.
Das macht es später einfacher, Änderungen zu finden und rückgängig zu machen.
sudo ist so konzipiert, dass es zusätzliche Konfigurationen aus Dateien in diesem Verzeichnis einbindet.
Tatsächlich finden Sie in der letzten Zeile der Datei /etc/sudoers den Eintrag include /etc/sudoers.d/.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
Der Dateiname kann frei gewählt werden, sollte aber so beschreibend sein, dass Sie ihn später leicht wiedererkennen können. Vermeiden Sie es, einen zu allgemeinen Namen zu wählen, da dies später zu Verwirrung führen kann.
Übrigens: Dateinamen, die ~ oder . enthalten, werden von sudo ignoriert. Diese Information findet sich oft in Kommentaren innerhalb der README-Datei des Verzeichnisses.
Die Konfigurationsstruktur verstehen
Die sudoers-Konfiguration folgt im Allgemeinen diesem Format:
Diese Syntax ist wirklich schwer auswendig zu lernen. Schreiben Sie sie sich am besten irgendwo auf oder speichern Sie diese Blogseite als Lesezeichen. Man braucht es nicht oft, aber wenn man es braucht, erinnert man sich einfach nicht daran.
Benutzername Host=(Benutzer_als_der_ausgeführt_wird) Optionen: Befehl
Wenn Ihr Benutzername beispielsweise potter ist und Sie apt update ohne Passworteingabe ausführen möchten, könnten Sie dies wie folgt schreiben:
potter ALL=(ALL) NOPASSWD: /usr/bin/apt
Die einzelnen Teile bedeuten Folgendes:
- potter: Der Benutzername, für den die Einstellung gilt.
- ALL: Gilt auf allen Hosts.
- (ALL): Bedeutet, unter welchen Benutzerrechten der Befehl ausgeführt werden kann. Manchmal sieht man auch
(root). Ich verwendeALL. - NOPASSWD: Es wird kein Passwort abgefragt.
- /usr/bin/apt: Der "absolute Pfad" des erlaubten Befehls.
Wenn Sie den Pfad eines Befehls nicht kennen, können Sie ihn mit which überprüfen:
~$which apt
/usr/bin/apt
~$which apt-get
/usr/bin/apt-get
~$which reboot
/usr/sbin/reboot
~$which systemctl
/usr/bin/systemctl
Die Verlockung, alles mit ALL freizugeben
An dieser Stelle kommt eine sehr starke Verlockung auf:
potter ALL=(ALL) NOPASSWD: ALL
Das ist extrem sauber. Alle sudo-Befehle werden ohne Passwort ausgeführt. Es ist bequem, sehr bequem.
Jeder muss selbst entscheiden, aber ich persönlich denke, es ist besser, dieser Versuchung zu widerstehen. Ich mag mir nicht vorstellen, dass ein falsch eingegebener Befehl sofort mit Root-Rechten ausgeführt wird.
Selbst wenn ein Skript unerwartet läuft, gibt es keine letzte Bremse in Form einer Passworteingabe. Wenn das Terminal kurz offen bleibt und jemand darauf zugreift, ist alles vorbei. Es gibt viele seltsame Leute auf der Welt...
Die Entscheidung liegt bei jedem selbst.
Nur häufig genutzte Befehle ohne Passwort zulassen
Ich persönlich bevorzuge den Kompromiss, nur die häufig verwendeten Befehle freizugeben. Dieser Ansatz hat sich bewährt.
Nehmen wir an, Sie möchten apt, apt-get, reboot und systemctl ohne Passworteingabe nutzen. Dann öffnen Sie zuerst die Konfigurationsdatei:
sudo visudo -f /etc/sudoers.d/no-password-common-commands
Und fügen Sie die folgende Zeile hinzu:
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot, /usr/bin/systemctl
Nun kann der Benutzer potter die folgenden Befehle ohne Passworteingabe ausführen:
sudo apt update
sudo apt -y upgrade
sudo apt-get update
sudo reboot
sudo systemctl reload nginx
Falls es Ihnen zu unsicher ist, systemctl vollständig freizugeben, können Sie auch nur bestimmte Befehle erlauben:
potter ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx
Mehrere Zeilen für bessere Lesbarkeit
Wenn die Liste der Befehle lang wird, kann eine einzelne Zeile unübersichtlich werden. In solchen Fällen können Sie Zeilenumbrüche mit \ verwenden.
Obwohl dies für Linux-Benutzer eine vertraute und logische Art der Zeilenaufteilung ist, wird \ in der Praxis oft nicht verwendet. Doch die Lesbarkeit verbessert sich dadurch erheblich.
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot, \
/usr/bin/systemctl
Das sieht übersichtlich und sauber aus.
Auf eine bestimmte Gruppe anwenden
Diese Einstellung ist ebenfalls sehr nützlich. Auf Servern, die von mehreren Personen verwaltet werden, kann die gruppenbasierte Verwaltung praktischer sein.
Wenn Sie die Einstellung nur auf eine bestimmte Gruppe anwenden möchten, verwenden Sie das Format %Gruppenname.
Für die Gruppe admin würde dies beispielsweise so aussehen:
%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt, /usr/bin/apt-get
Die Gültigkeitsdauer der Passworteingabe verlängern
Wenn Ihnen die vollständige Deaktivierung der Passworteingabe zu unsicher ist, gibt es eine weitere Option: die Anpassung der Gültigkeitsdauer des Passworts. Standardmäßig wird das Passwort nach etwa 10 bis 15 Minuten nicht erneut abgefragt, aber diese Zeitspanne lässt sich ändern.
Dies geschieht über die Einstellung timestamp_timeout.
Wenn Sie beispielsweise die folgende Zeile hinzufügen, wird das sudo-Passwort 60 Minuten lang nicht erneut abgefragt:
Defaults timestamp_timeout=60
Die Einheit ist "Minuten". Wenn Sie jedoch '0' eingeben, wird das Passwort jedes Mal abgefragt – ein Albtraum. Eine Einstellung von '-1' sorgt dafür, dass das sudo-Passwort nach einmaliger Eingabe bis zum Schließen des Terminals nicht mehr verlangt wird. Dies bietet eine ähnliche Bequemlichkeit wie ALL, hinterlässt aber dennoch ein gewisses Unbehagen.
Selbstverständlich können diese Einstellungen – passwortlose Ausführung und verlängerte Gültigkeitsdauer – miteinander kombiniert werden.
Ein Beispiel für eine solche Kombination:
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot
Häufig genutzte Befehle laufen passwortlos, während für andere sudo-Befehle eine einmalige Authentifizierung für 30 Minuten ausreicht.
Ich denke, dies ist ein guter Kompromiss zwischen Bequemlichkeit und Sicherheit. Es ist gut, den Aufwand zu reduzieren, aber ich möchte nicht, dass dies auf Kosten der Sicherheit geht.
Fazit
Die Deaktivierung der sudo-Passworteingabe ist nicht kompliziert.
Obwohl die obige Erklärung ausführlich war, lässt sie sich kurz zusammenfassen:
- Erstellen Sie mit
visudoeine separate Konfigurationsdatei unter/etc/sudoers.d/.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
- Fügen Sie die
NOPASSWD-Regel hinzu.
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot
Wie weit Sie die Passworteingabe lockern, liegt in Ihrem eigenen Ermessen. Doch eines sollten Sie immer bedenken:
Wahre Bequemlichkeit entsteht erst, wenn sowohl die Finger als auch das Gefühl der Sicherheit gleichermaßen zufrieden sind.