Como eu faço o comando específico “sudo -i”?

5

Eu preciso rodar important_script.sh como com sudo -i sem senha.

Se eu tiver em sudoers:

apache ALL = (root) NOPASSWD:    /blah/important_script.sh

e execute "sudo /blah/important_script.sh" Eu posso rodá-lo sem senha.

No entanto, se eu executar "sudo -i /blah/important_script.sh", eu preciso digitar a senha do apache.

Se eu mudar de linha nos sudoers para:

apache ALL = (root) NOPASSWD:ALL

Eu posso executar o comando "sudo -i /blah/important_script.sh" sem senha.

Mas eu quero ser capaz de rodar somente /blah/important_script.sh, não TODOS os comandos.

Então, como eu configurei que somente o /blah/important_script.sh poderia ser executado com o sudo -i sem senha.

    
por gilbertasm 05.06.2014 / 06:58

1 resposta

8

Quando eu tento isso, recebo uma mensagem de erro que dá uma pista do problema

 Sorry, user bob is not allowed to execute '/bin/bash -c /blah/important_script.sh' as root on host.

Observe que estamos sendo negados o acesso a um comando /bin/bash -c... , que é diferente daquele que especificamos no arquivo sudoers /blah/important_script... . Quando você diz ao sudo para permitir que um usuário execute um comando específico, ele precisa usar a linha de comando exata, conforme especificado nos sudoers, portanto, precisamos alterar os sudoers apropriadamente.

bob   ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh

Isso agora funciona para bob

$ sudo -i /bin/bash -c /blah/important_script.sh

Então por que está fazendo isso? Bem, a man page do sudo tem a resposta

‑i [command] The ‑i (simulate initial login) option runs the shell specified by the password database entry of the target user as a login shell. This means that login-specific resource files such as .profile or .login will be read by the shell. If a command is specified, it is passed to the shell for execution via the shell's ‑c option. If no command is specified, an interactive shell is executed...

    
por 05.06.2014 / 08:22

Tags