No Amazon Linux 2018.03, eu tenho um processo rodando como um usuário sem privilégios e chama o sudo para executar um comando. Estou recebendo a mensagem:
sudo: sorry, you must have a tty to run sudo
O usuário sem privilégios (xymon) tem permissão para executar o comando em questão sem senha
Cmnd_Alias YUM = /usr/bin/yum
xymon ALL=(ALL) NOPASSWD: YUM
O comando está sendo chamado de um script perl executado pelo processo do cliente xymon local através das seguintes linhas:
my $YumCmd = 'sudo yum check-update 2>&1' ;
@Lines = '$YumCmd' ;
Em / etc / sudoers, eu supostamente desativei o requisito tty com:
Defaults !requiretty
Sem sorte. Nenhum dos conjuntos inclui requiretty.
sudo - como o usuário xymon está abaixo:
Matching Defaults entries for xymon on this host:
!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS
_XKB_CHARSET XAUTHORITY", !requiretty, secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin, requiretty, !visiblepw, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR
LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME
LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", !authenticate
User xymon may run the following commands on this host:
Sudoers entry:
RunAsUsers: ALL
Commands:
NOPASSWD: /usr/bin/yum
Noto que requiretty
aparece na saída, mas não parece ser substituído pela minha diretiva Defaults !requiretty
. Colocar a diretiva Defaults !requiretty
no final do arquivo sudoers coloca-a antes do requiretty
listado em sudo -ll
. Não faço ideia de onde isso está vindo.
Usar uma pseudo-tty com o ssh funciona usando o seguinte comando:
my $YumCmd = 'ssh -tt -i ~/.ssh/id_rsa localhost sudo yum check-update 2>&1' ;
Esta não é uma boa opção, dada a grande quantidade de configuração necessária para muitos servidores executarem esse script (script Xymon). Alguma sugestão para fazer isso funcionar com o sudo ou isso é um bug?