Como permitir a execução sem solicitar a senha usando o sudo?

15

Estou escrevendo um aplicativo Java em que preciso executar uma linha de comando e obter um resultado de volta, mas quando executo o comando, ele solicita a senha do sudo. Até agora eu tentei:

$ 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

Depois de executar o comando, ele novamente pede "[javauser] senha para javauser:". Mas eu já mencionei noPASSWD.

whoamiretorna alexe estou adicionando-o como este no sudoersarquivo

# 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

Correr continua me pedindo minha senha, alguma idéia?

muru
fonte
Parece que já existe uma pergunta muito semelhante: askubuntu.com/questions/39281/… - você já tentou a resposta a partir daí?
Sergey
Certifique-se de que no seu código java você use "sudo / absolute / path / to / command" em sua chamada de sistema. Btw. por motivos de segurança, você deve usar em sudo visudovez de vimeditar o arquivo sudoers. Dessa forma, se você cometer um erro, o programa avisa sobre isso.
con-f-use
Pode ser encontrado aqui o que exatamente eu tentei: gist.github.com/1315951

Respostas:

28

Você precisa fazer o seguinte, no tipo de terminal sudo visudoe adicionar uma linha como esta no final do arquivo, especificando os comandos que deseja executar sem digitar a senha sudo (sugiro que você use cada comando que deseja usar no programa e não apenas permita que todos os programas sejam executados por isso)

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

Agora você pode executar os comandos especificados sem senha, desde que você digite esse comando sudo.

ou seja: digamos que você deseja executar shutdown -r nowsem precisar digitar a senha sudo toda vez e seu nome de usuário é 'joedoe'

  1. digite sudo visudoem um terminal

  2. Adicione joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r nowcomo uma nova linha no final do arquivo , use caminhos absolutos para o programa que você está tentando usar.

  3. no seu programa, você pode usá-lo sudo shutdown -r nowsem precisar digitar a senha do sudo.

Você pode encontrar o caminho absoluto para um programa usando which <program name>um terminal.

É um truque muito sujo deixa seu sistema aberto para outros perigos, mas acho que você sabe o que está fazendo e deseja isso.

Editar

Você realmente precisa garantir que as permissões que você está definindo estejam no final do arquivo, para que nada seja sobrescrito pelas permissões dos grupos.

Bruno Pereira
fonte
Parece que ele já fez isso.
con-f-use
Se ele já fez isso, por que você está explicando a ele que ele deve usar sudo visudoe não vimeditar o arquivo sudoers? Se ele fizesse isso, funcionaria.
Bruno Pereira
1
@goOgle, você está digitando sudona frente do comando dentro do seu código? você precisa fazer isso mesmo se forçar o nopasswd no arquivo sudoers. ou seja: use sudo <command>não apenas <command>.
Bruno Pereira
1
Para mim cmd = "whoami" retorna brunoe cmd = "sudo whoami"retornaroot
Bruno Pereira
3
Encontrei! Pode reproduzir isso se minha linha não estiver no final sudoersdo arquivo. Após a atribuição dos grupos, etc. Realmente a última linha! Mova a linha para ser a última no arquivo! (espero que seja isso).
Bruno Pereira