Pare su de pedir uma senha

3

Estou tentando executar o seguinte comando como deploy do Java (a JVM está sendo executada como o usuário tomcat ):

sudo -u deploy /path/to/my/bash/script.sh PARAM1 PARAM2

Meu arquivo sudoers tem o seguinte:

tomcat ALL=(deploy) NOPASSWD: /path/to/my/bash/script.sh *

Mas recebo sorry, you must have a tty to run sudo no meu aplicativo Java. Por isso, mudei minha invocação para:

su --session-command="/path/to/my/bash/script.sh PARAM1 PARAM2" deploy

Mas agora recebo standard in must be a tty em Java.

Eu verifiquei e, ao fazer o seguinte, posso ver que sudo não solicita uma senha, mas su faz.

[root@mybox bin]# sudo su tomcat
[tomcat@mybox bin]$ sudo -u deploy /path/to/my/bash/script.sh PARAM1 PARAM2
output of script with PARAM1 PARAM2
[tomcat@mybox bin]$ su --session-command="/path/to/my/bash/script.sh PARAM1 PARAM2" deploy
Password:
su: incorrect password

Obviamente, sudoers é apenas para sudo (daí o nome). Existe outra maneira de executar o comando como deploy sem um prompt de senha?

Estou desenvolvendo isso no centos 6.3, mas eventualmente ele estará rodando no RHEL5.

    
por Rich 28.05.2013 / 12:11

1 resposta

3

Você pode relaxar a configuração requiretty no /etc/sudoer .

excerto da página de manual do sudoers

requiretty      If set, sudo will only run when the user is logged in to a real 
                tty. When this flag is set, sudo can only be run from a login
                session and not via other means such as cron(8) or cgi-bin 
                scripts.  This flag is off by default.

Por padrão, esta linha diz que todos devem ter acesso tty ao usar sudo :

Defaults requiretty

Você pode relaxar por usuário e / ou grupo assim:

$ sudo visudo
# group
Defaults:%group !requiretty
# user
Defaults:user   !requiretty

nota: O ! significa not .

Veja o sudo & sudoers man pages para mais detalhes.

    
por 28.05.2013 / 12:39

Tags