Um sudo ohne Passwort für einen einzelnen Befehl zu erlauben, legen Sie mit visudo -f eine Datei in /etc/sudoers.d an und fügen eine Regel wie user ALL=(root) NOPASSWD: /absoluter/pfad argumente hinzu. Der absolute Pfad und die festen Argumente beschränken die Berechtigung auf genau diesen Befehl. NOPASSWD: ALL dagegen läuft darauf hinaus, root ohne Passwort zu vergeben.
Eine NOPASSWD-sudoers-Regel für einen Befehl: vollständiges Beispiel mit visudo
Die Regel wird mit visudo -f in einer neuen Datei innerhalb von /etc/sudoers.d erstellt, niemals indem man die Datei in einem beliebigen Editor öffnet. Das Beispiel verwendet einen Benutzer deploy, der nach einem Release nur nginx neu laden soll:
sudo visudo -f /etc/sudoers.d/deploy-nginxInhalt der Datei:
# deploy may reload nginx without a password, and nothing else
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginxPrüfen Sie zuerst den Pfad mit command -v systemctl. Je nach Distribution liegt er in /usr/bin oder /bin, und die Regel greift nur beim exakten Pfad. Anschließend validieren und testen:
sudo visudo -c
sudo -l -U deploy
sudo -n /usr/bin/systemctl reload nginxvisudo -c prüft die Syntax aller sudoers-Dateien. sudo -l -U deploy listet auf, was dieser Benutzer ausführen darf. sudo -n, als deploy ausgeführt, schlägt fehl, statt nach einem Passwort zu fragen, und zeigt Ihnen so, ob NOPASSWD tatsächlich greift.
Warum visudo und /etc/sudoers.d statt /etc/sudoers von Hand zu bearbeiten
visudo sperrt die Datei, während Sie sie bearbeiten, und prüft die Syntax vor dem Speichern. Findet es einen Fehler, warnt es Sie und lässt Sie ihn beheben. Eine kaputte /etc/sudoers kann sudo unbrauchbar machen, und auf einem Server ohne Root-Passwort bedeutet das einen Ausflug in die Recovery-Konsole.
- Eine Datei pro Berechtigung. Wer die Datei löscht, widerruft die Regel, ohne etwas anderes anzufassen.
- Getrennt von der Hauptdatei. Änderungen, die ein Paket für /etc/sudoers mitbringt, kollidieren nicht mit Ihren.
- Keine Punkte in Dateinamen. sudo überspringt Dateien in /etc/sudoers.d, deren Name einen Punkt enthält oder auf
~endet:deploy-nginxwird gelesen,deploy.confnicht. - Eigentümer root, Modus 0440. Prüfen Sie das mit
ls -l /etc/sudoers.d; wenn Sie die Datei von woanders kopiert haben, korrigieren Sie es mitchown root:rootundchmod 0440.
Absolute Pfade bei NOPASSWD: warum sudoers sie verlangt und wie man Argumente festlegt
sudoers verlangt den vollständigen Pfad der ausführbaren Datei: Ein bloßer Name wie systemctl ist in visudo ein Syntaxfehler. Der absolute Pfad verhindert, dass jemand ein anderes Binary mit demselben Namen in ein Verzeichnis seines PATH legt und es als root ausführt.
Die Argumente sind die andere Hälfte der Kontrolle:
- Keine Argumente in der Regel (
/usr/bin/systemctl): Beliebige Argumente sind erlaubt, einschließlich des Stoppens oder Bearbeitens jedes Dienstes. - Exakte Argumente (
/usr/bin/systemctl reload nginx): nur genau diese Befehlszeile. - Ein leeres
""(/usr/local/bin/backup ""): Der Befehl wird nur ohne Argumente akzeptiert. - Platzhalter (
/usr/bin/systemctl restart *): Das Sternchen passt auch auf Leerzeichen und lässt mehr Argumente durch als beabsichtigt. Vermeiden Sie sie.
Warum nicht NOPASSWD: ALL in sudoers: die Risiken im Vergleich
Mit NOPASSWD: ALL erhält jeder Prozess, der unter Ihrem Benutzer läuft —ein kompromittiertes Skript, eine bösartige Abhängigkeit, ein gestohlener SSH-Schlüssel— über sudo -n root, ganz ohne Interaktion. Eine eingegrenzte Regel schrumpft diese Beute auf einen einzigen Befehl.
| Was gemessen wird | Eingegrenzte Regel mit absolutem Pfad | NOPASSWD: ALL | sudo mit Passwort |
|---|---|---|---|
| Reichweite ohne Passwort | Eine exakte Befehlszeile | Jeder Befehl als root | Keine |
| Eignung für Automatisierung | Ja, für diese Aufgabe | Ja, ohne Grenzen | Nein, sudo -n schlägt fehl |
| Wenn die Benutzersitzung gestohlen wird | Angreifer kann nur diesen Befehl ausführen | Angreifer ist root | Angreifer braucht zusätzlich das Passwort |
Prüfung mit sudo -l | Zeigt den erlaubten Befehl | Zeigt ALL, ohne Details | Hängt von anderen Regeln ab |
Eine eingegrenzte Regel bleibt gefährlich, wenn der erlaubte Befehl eine Shell starten oder andere Programme ausführen kann: Editoren wie vi, Pager wie less, find mit -exec oder ein Skript, das der Benutzer ändern kann. Wenn Sie ein Skript erlauben, muss es root gehören und darf für niemanden sonst beschreibbar sein. Um geschützte Dateien zu bearbeiten, verwenden Sie sudoedit, das mit den Rechten des Benutzers an einer Kopie arbeitet. Das Tag NOEXEC kann verhindern, dass ein Befehl andere startet, funktioniert aber nicht mit jedem Binary.
Reihenfolge der Regeln in sudoers: Der letzte Treffer gewinnt
Wenn mehrere Regeln auf denselben Benutzer und Befehl passen, wendet sudo die letzte an. Wird /etc/sudoers.d am Ende von /etc/sudoers eingebunden, steht Ihre NOPASSWD-Regel nach der allgemeinen Regel für die Admin-Gruppe und hat Vorrang. Verlangt eine spätere Zeile für diesen Benutzer ein Passwort, überschreibt sie Ihre Regel und sudo -n schlägt weiterhin fehl. sudo -l gibt die Einträge der Reihe nach aus, wodurch der Konflikt leicht zu erkennen ist.
sudoers mit termi1 vom Handy aus bearbeiten, ohne sich auszusperren
visudo öffnet den im System konfigurierten Editor, oft vi oder nano, und beide brauchen Esc, Strg und die Pfeiltasten. termi1s eigene Tastatur hat die Tasten, die die Systemtastatur versteckt, dazu eine fn-Ebene mit F1–F12, Bild auf/Bild ab, Pos1 und Ende.
- Halten Sie eine Reserve-Root-Shell bereit. Öffnen Sie
sudo -iin einem anderen tmux-Fenster, bevor Sie sudoers anfassen; wenn etwas kaputtgeht, haben Sie immer noch root, um es zu reparieren. - Halten Sie die Sitzung am Leben. Mit Mosh hält termi1 die Sitzung, wenn Sie von WLAN auf mobile Daten wechseln, und tmux bewahrt alles, was Sie laufen gelassen haben.
- Prüfen vor dem Ausführen. termi1s KI verwandelt einen Satz wie „deploy darf nginx ohne Passwort neu laden“ in einen Befehl, der am Prompt eingetippt wird, ohne Enter zu drücken. Bei Verbindungen, die als Produktion markiert sind, hält Production Guard alles zurück, was etwas löscht, stoppt oder ändert, bevor es den Prompt erreicht.
SSH-Schlüssel lassen sich auf dem Handy erzeugen, und der private Schlüssel verlässt das Gerät nie. Mehr über das SSH-Terminal für Ihr Handy, termi1 für iPhone herunterladen oder das technische Support-Center besuchen.
Häufig gestellte Fragen
Wo steht NOPASSWD in einer sudoers-Regel?
NOPASSWD steht in einer sudoers-Regel direkt vor dem Befehl, nach dem Doppelpunkt: deploy ALL=(root) NOPASSWD: /usr/bin/systemctl reload nginx. Das Tag gilt auch für nachfolgende Befehle in derselben Zeile, beschränken Sie diese Zeile daher auf den einen Befehl, den Sie ohne Passwort erlauben möchten.
Warum funktioniert meine Datei in /etc/sudoers.d nicht?
Eine Datei in /etc/sudoers.d scheitert meist aus einem von drei Gründen: Ihr Name enthält einen Punkt oder endet auf ~, eine spätere Regel verlangt ein Passwort und überschreibt sie, oder der Befehlspfad stimmt nicht exakt überein. Prüfen Sie das mit sudo visudo -c und sudo -l als dieser Benutzer.
Was passiert, wenn ich sudoers mit einem Syntaxfehler speichere?
Wer sudoers mit einem Syntaxfehler speichert, kann sudo für alle Benutzer unbrauchbar machen. visudo verhindert das, weil es die Syntax vor dem Speichern prüft und den Fehler meldet. Wenn Sie mit einem anderen Editor bearbeiten und die Datei beschädigen, brauchen Sie eine bereits offene Root-Shell oder die Recovery-Konsole.
Ist es sicher, meinem eigenen Skript NOPASSWD zu geben?
NOPASSWD für Ihr eigenes Skript ist nur sicher, wenn das Skript root gehört und kein anderer Benutzer es ändern kann. Kann der Benutzer mit der sudo-Berechtigung das Skript bearbeiten, kann er beliebige Befehle hinzufügen und sie ohne Passwort als root ausführen. Verwenden Sie immer absolute Pfade und feste Argumente.