Comment autoriser l'exécution sans demander de mot de passe à l'aide de sudo?

15

J'écris une application Java où j'ai besoin d'exécuter une ligne de commande et d'obtenir un résultat, mais quand j'exécute la commande, il demande le mot de passe sudo. Jusqu'à présent, j'ai essayé:

$ 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

Une fois que j'ai exécuté la commande, il demande à nouveau "[javauser] mot de passe pour javauser:". Mais j'ai déjà mentionné noPASSWD.

whoamiretourne alexet je l'ajoute comme ceci dans le sudoersfichier

# 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

La course continue de me demander mon mot de passe, des idées?

muru
la source
On dirait qu'il y a déjà une question très similaire: askubuntu.com/questions/39281/… - avez-vous essayé la réponse à partir de là?
Sergey
Assurez-vous que dans votre code java vous utilisez "sudo / absolu / chemin / vers / commande" dans votre appel système. Btw. pour des raisons de sécurité, vous devez utiliser sudo visudoau lieu de vimmodifier le fichier sudoers. De cette façon, si vous faites une erreur, le programme vous en avertit.
con-f-use
Peut être trouvé ici ce que j'ai essayé exactement: gist.github.com/1315951

Réponses:

28

Vous devez faire ce qui suit, sur le type de terminal sudo visudoet ajouter une ligne comme celle-ci à la fin du fichier spécifiant les commandes que vous souhaitez exécuter sans taper le mot de passe sudo (je vous suggère d'utiliser chaque commande que vous souhaitez utiliser dans le programme et non seulement permettre à tous les programmes d'être exécutés par cela)

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

Vous pouvez maintenant exécuter les commandes spécifiées sans mot de passe tant que vous tapez cette commande avec sudo.

c'est-à-dire: disons que vous voulez exécuter shutdown -r nowsans avoir à taper le mot de passe sudo à chaque fois et que votre nom d'utilisateur est 'joedoe'

  1. taper sudo visudosur un terminal

  2. Ajoutez joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r nowune nouvelle ligne à la fin du fichier , utilisez des chemins absolus vers le programme que vous essayez d'utiliser.

  3. sur votre programme, vous pouvez ensuite utiliser sudo shutdown -r nowsans avoir à taper le mot de passe sudo.

Vous pouvez trouver le chemin absolu vers un programme en utilisant which <program name>sur un terminal.

C'est un souhait très sale qui laisse votre système ouvert à d'autres dangers, mais je suppose que vous savez ce que vous faites et que vous voulez cela.

Éditer

Vous devez vraiment vous assurer que les autorisations que vous définissez se trouvent à la fin du fichier afin que rien ne soit remplacé par les autorisations des groupes.

Bruno Pereira
la source
On dirait qu'il l'a déjà fait.
con-f-use
S'il l'a déjà fait, pourquoi lui expliquez-vous qu'il devrait utiliser sudo visudoet non vimpas modifier le fichier sudoers? S'il le faisait, cela fonctionnerait.
Bruno Pereira
1
@goOgle saisissez-vous sudodevant la commande dans votre code? vous devez le faire même si vous avez forcé nopasswd dans le fichier sudoers. c'est à dire: utiliser sudo <command>non seulement <command>.
Bruno Pereira
1
Pour moi cmd = "whoami" revient brunoet cmd = "sudo whoami"revientroot
Bruno Pereira
3
Je l'ai trouvé! Peut reproduire cela si ma ligne n'est pas à la fin du sudoersfichier. Après l'affectation des groupes, etc. Vraiment la dernière ligne! Déplacez la ligne pour être la dernière du fichier! (j'espère que c'était ça).
Bruno Pereira