Wie kann ich die Ausführung mit sudo zulassen, ohne nach dem Passwort zu fragen?

15

Ich schreibe eine Java-Anwendung, in der ich eine Befehlszeilenausführung ausführen und ein Ergebnis zurückerhalten muss, aber wenn ich den Befehl ausführe, frage ich nach dem Sudo-Passwort. Bisher habe ich versucht:

$ sudo -s
$ vim /etc/sudoers
# User privilege specification
root         ALL=(ALL:ALL) NOPASSWD: ALL
javauser     ALL=(ALL:ALL) NOPASSWD: ALL

:wq
$ 4 -r--r-----   1 root root     615 2011-10-26 09:23 sudoers

Sobald ich den Befehl ausführe, fragt es wieder "[Javauser] Passwort für Javauser:". Aber noPASSWD habe ich schon erwähnt.

whoamikehrt zurück alexund ich füge es als dies in der sudoersDatei

# User privilege specification
root    ALL=(ALL:ALL) ALL
alex ALL=NOPASSWD: ALL


# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Running fragt mich immer wieder nach meinem Passwort.

muru
quelle
Anscheinend gibt es bereits eine sehr ähnliche Frage: askubuntu.com/questions/39281/… - haben Sie die Antwort von dort aus versucht?
Sergey
Stellen Sie sicher, dass Sie in Ihrem Java-Code "sudo / absolute / path / to / command" in Ihrem Systemaufruf verwenden. Btw. Aus Sicherheitsgründen sollten Sie verwenden , sudo visudoanstatt vimdie sudoers - Datei zu bearbeiten. Auf diese Weise warnt Sie das Programm, wenn Sie einen Fehler machen.
con-f-use
Kann hier gefunden werden, was genau ich versucht habe: gist.github.com/1315951

Antworten:

28

Sie müssen Folgendes auf dem Terminaltyp sudo visudoausführen und am Ende der Datei eine Zeile wie diese einfügen, in der die Befehle angegeben sind, die Sie ausführen möchten, ohne das sudo-Kennwort einzugeben (ich schlage vor, Sie verwenden jeden Befehl, den Sie im Programm und verwenden möchten) nicht nur alle Programme damit ausführen lassen)

<yourusername> ALL=NOPASSWD: <command1>, <command2>

Jetzt können Sie die angegebenen Befehle ohne Kennwort ausführen, solange Sie diesen Befehl mit eingeben sudo.

shutdown -r nowZB: Nehmen wir an, Sie möchten ausgeführt werden, ohne jedes Mal sudo password eingeben zu müssen und Ihr Benutzername lautet "joedoe".

  1. Tippen Sie sudo visudoauf einem Terminal

  2. Fügen Sie joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r nowals neue Zeile am Ende der Datei absolute Pfade zu dem Programm hinzu, das Sie verwenden möchten.

  3. Auf Ihr Programm können Sie dann zugreifen, sudo shutdown -r nowohne das sudo-Passwort eingeben zu müssen.

Sie können den absoluten Pfad zu einem Programm which <program name>über ein Terminal ermitteln.

Es ist ein sehr schmutziger Trickwunsch, der Ihr System für andere Gefahren offen lässt, aber ich vermute, Sie wissen, was Sie tun und wollen dies.

Bearbeiten

Sie müssen wirklich sicherstellen, dass sich die von Ihnen festgelegten Berechtigungen am Ende der Datei befinden, damit von den Gruppenberechtigungen nichts überschrieben wird.

Bruno Pereira
quelle
Scheint, als hätte er das schon getan.
con-f-use
Wenn er das schon getan hat, warum erklärst du ihm dann, dass er die sudoers-Datei verwenden sudo visudound nicht vimbearbeiten soll? Wenn er das tat, würde es funktionieren.
Bruno Pereira
1
@goOgle geben Sie sudovor dem Befehl in Ihrem Code ein? Sie müssen dies auch dann tun, wenn Sie "nopasswd" in der sudoers-Datei erzwungen haben. dh: sudo <command>nicht nur verwenden <command>.
Bruno Pereira
1
Für mich cmd = "whoami" kehrt zurück brunound cmd = "sudo whoami"kehrt zurückroot
Bruno Pereira
3
Fand es! Kann dies reproduzieren, wenn sich meine Zeile nicht am Ende sudoersder Datei befindet. Nach der Gruppenzuordnung usw. Wirklich die letzte Zeile! Verschieben Sie die Zeile, um die letzte in der Datei zu sein! (hoffe das war es).
Bruno Pereira