# 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. ![Linux-Sicherheit mit Tux und Schlüssel](/media/whitedec/blog_img/vaBoSfdn.webp) ## 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`. ```bash 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/`. ```bash 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. ```bash 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: ```bash 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 verwende `ALL`. * 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: ```bash ~$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: ```bash 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: ```bash sudo visudo -f /etc/sudoers.d/no-password-common-commands ``` Und fügen Sie die folgende Zeile hinzu: ```ini 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: ```bash 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: ```bash 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. ```bash 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: ```bash %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: ```bash 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: ```bash 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: 1. Erstellen Sie mit `visudo` eine separate Konfigurationsdatei unter `/etc/sudoers.d/`. ```bash sudo visudo -f /etc/sudoers.d/no-password-common-commands ``` 2. Fügen Sie die `NOPASSWD`-Regel hinzu. ```ini 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.