Wie führe ich bestimmte sudo-Befehle ohne Passwort aus?

211

Auf einem bestimmten Computer muss ich oft hin und wieder sudoBefehle ausführen. sudoIn den meisten Fällen kann ich kein Passwort eingeben .

Es gibt jedoch drei sudoBefehle, die ich ausführen möchte, ohne ein Kennwort einzugeben :

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Wie kann ich diese Befehle vom Passwortschutz ausschließen sudo?

Bhavesh Diwan
quelle

Antworten:

283

Verwenden Sie die NOPASSWDDirektive

Sie können die NOPASSWDDirektive in Ihrer /etc/sudoersDatei verwenden .

Wenn Ihr Benutzer angerufen wird userund Ihr Host angerufen wird, können hostSie diese Zeilen hinzufügen zu /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Auf diese Weise kann der Benutzer userdie gewünschten Befehle ausführen, hostohne ein Kennwort einzugeben. Für alle anderen sudoed-Befehle ist weiterhin ein Passwort erforderlich.

Die in der sudoersDatei angegebenen Befehle müssen vollständig qualifiziert sein (dh den absoluten Pfad zum auszuführenden Befehl verwenden), wie in der sudoersManpage beschrieben . Die Angabe eines relativen Pfads wird als Syntaxfehler angesehen.

Wenn der Befehl mit einem abschließenden /Zeichen endet und auf ein Verzeichnis verweist, kann der Benutzer einen beliebigen Befehl in diesem Verzeichnis ausführen (jedoch nicht in einem der darin enthaltenen Unterverzeichnisse). Im folgenden Beispiel kann der Benutzer usereinen beliebigen Befehl im Verzeichnis ausführen /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Hinweis: Verwenden Sie immer den Befehl visudozum Bearbeiten der sudoersDatei, um sicherzustellen, dass Sie sich nicht aus dem System ausschließen - nur für den Fall, dass Sie versehentlich etwas Falsches in die sudoersDatei schreiben . visudoIhre geänderte Datei in ein temporäres Verzeichnis speichern und nur die reale überschreiben sudoersDatei , wenn die geänderte Datei ohne Fehler analysiert werden kann.

Verwenden /etc/sudoers.dstatt modifizieren/etc/sudoers

Alternativ zum Bearbeiten der /etc/sudoersDatei können Sie die beiden Zeilen in /etc/sudoers.dz /etc/sudoers.d/shutdown. B. einer neuen Datei hinzufügen . Dies ist eine elegante Methode, um verschiedene Änderungen an den sudoRechten zu trennen und die Originaldatei sudoersfür einfachere Upgrades unangetastet zu lassen.

Hinweis: Auch hier sollten Sie den Befehl visudozum Bearbeiten der Datei verwenden, um sicherzustellen, dass Sie sich nicht aus dem System ausschließen:

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

Dadurch wird auch automatisch sichergestellt, dass der Eigentümer und die Berechtigungen der neuen Datei korrekt festgelegt sind.

Wenn sudoersversaut ist

Wenn Sie visudoIhre Dateien nicht bearbeitet und versehentlich versaut /etc/sudoersoder versaut haben, werden /etc/sudoers.dSie gesperrt sudo.

Die Lösung könnte darin bestehen, die Dateien zu reparieren, pkexecdie eine Alternative zu sind sudo.

Zu beheben /etc/sudoers:

pkexec visudo

Zu beheben /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Wenn der Besitz und / oder die Berechtigungen für eine sudoersDatei nicht korrekt sind , wird die Datei von ignoriert, sudosodass Sie möglicherweise auch in dieser Situation ausgeschlossen sind. Auch hier können Sie pkexecdieses Problem beheben.

Die richtigen Berechtigungen sollten folgendermaßen lauten:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Verwenden Sie pkexecdiese Option, um Eigentumsrechte und Berechtigungen festzulegen :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
mgd
quelle
2
Die beiden Zeilen beziehen sich speziell auf diese beiden Befehle. Wenn userauf andere Weise sudokeine Rechte vergeben werden, können von diesem Benutzer keine anderen Befehle ausgegeben werden. Schauen Sie sich man sudound an man sudoers.
5.
4
@StanKurdziel Ich habe versucht , mit dieser Linie auf Mac OS X Yosemite und es funktionierte gut: mgd ALL=(root) NOPASSWD: /var/root/test. Ich bin Benutzer mgdund ALLmeine "von allen Hosts" . /var/root/testist ein Shell - Skript „Hallo Welt“ einfach mit Berechtigungen: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Ich habe keine weiteren Änderungen am System vorgenommen.
Dienstag,
2
Was ist hostin der sudoers-Datei?
user106563
1
Es ist keine Antwort, sondern eine fast vollständige Anleitung zur NOPASSWD-Direktive. Danke.
Eray
1
@Michael lies bitte die Manpage. Es ist alles dort geschrieben. Um es in Anführungszeichen zu setzen: Sie können jedoch auch Befehlszeilenargumente (einschließlich Platzhalterzeichen) angeben. Alternativ können Sie "" angeben, um anzugeben, dass der Befehl möglicherweise nur ohne Befehlszeilenargumente ausgeführt wird.
31.
3

Tut mir leid, aber es gibt so viel Verwirrung und einige wirklich komplizierte Antworten, dass ich das Gefühl habe, hier abwägen zu müssen, bevor jemand etwas falsch versteht und etwas Verrücktes tut.

Visudo benutzen !!

Fügen Sie der Konfiguration die folgenden Zeilen hinzu:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Auf diese Weise können die Befehle Neustart und Herunterfahren mit beliebigen Parametern von jedem Benutzer ausgeführt werden.

Bitte stapeln Sie den Austausch, geben Sie einfach prägnante Antworten.

Eule
quelle