Eu tenho um script executado a partir do crontab de usuários não privilegiados que chama alguns comandos usando sudo. Exceto que não. O script funciona bem, mas os comandos sudo'ed falham silenciosamente.
O script é executado perfeitamente a partir de um shell como o usuário em questão.
Sudo não requer uma senha. O usuário em questão tem
(root) NOPASSWD: ALLacesso concedido em/etc/sudoers.Cron está executando e executando o script. Adicionar um simples
date > /tmp/logproduz saída no momento certo.Não é um problema de permissões. Novamente, o script é executado, mas não os comandos sudo'ed.
Não é um problema de caminho. A execução
envde dentro do script que está sendo executado mostra a$PATHvariável correta que inclui o caminho para o sudo. Executá-lo usando um caminho completo não ajuda. O comando que está sendo executado recebe o nome completo do caminho.Tentar capturar a saída do comando sudo, incluindo STDERR, não mostra nada de útil. Adicionar
sudo echo test 2>&1 > /tmp/logao script produz um log em branco.O próprio binário sudo executa bem e reconhece que possui permissões mesmo quando executado a partir do cron dentro do script. Adicionar
sudo -l > /tmp/logao script produz a saída:O usuário ec2-user pode executar os seguintes comandos neste host:
(root) NOPASSWD: ALL
Examinar o código de saída do comando usando $?mostra que ele está retornando um erro (código de saída :) 1, mas nenhum erro parece ser produzido. Um comando tão simples quanto /usr/bin/sudo /bin/echo testretorna o mesmo código de erro.
O que mais poderia estar acontecendo?
Esta é uma máquina virtual criada recentemente, executando a mais recente Amazon Linux AMI. O crontab pertence ao usuário ec2-usere o arquivo sudoers é o padrão de distribuição.
sudodireitos restritos / somente / para os comandos necessários no script e desativar completamente a capacidade de logon.
The user in question has (root) NOPASSWD: ALL access granted in /etc/sudoerse meu cérebro começou a gritar alto demais para continuar lendo.