Estou configurando o Nagios em alguns dos meus servidores Linux e tive um problema. O check_ide_smart
plug-in requer acesso root ao sistema para ser executado. Para executá-lo, eu uso o check_by_ssh
plug-in para ssh na conta nagios no host remoto e, em seguida, corro check_ide_smart
usando o sudo.
Inicialmente, adicionei as seguintes linhas /etc/sudoers
para permitir que o programa funcione:
nagios ALL=NOPASSWD: /usr/lib/nagios/plugins/check_ide_smart
Enquanto isso funcionava bem quando executado localmente, eu estava tendo um problema quando foi executado no Nagios: nenhum TTY estava sendo gerado, o que impedia o plug-in de funcionar.
Eu procurei na página de manual do sudo e encontrei a opção -s, que gera um shell e executa o programa lá. Quando tentei usar sudo -s
, tive problemas de permissão, pois o -s aparentemente altera o comando para /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart
, o que não é permitido pelo arquivo sudoers. Tentei alterar o arquivo sudoers para usar esse comando, mas isso não funcionou, e usar aspas é um erro de sintaxe.
Acabei conseguindo funcionar usando a seguinte linha em /etc/sudoers
:
nagios ALL=/bin/bash
Isso me parece realmente errado, pois estou permitindo que o usuário do nagios crie um shell raiz, com o qual ele possa fazer qualquer coisa.
Nesse ponto, pensei que talvez, colocando o comando em um script de shell em que o usuário do nagios tenha privilégios de somente leitura funcionasse, então criei um script de shell:
#!/bin/sh
/bin/bash -c /usr/lib/nagios/plugins/check_ide_plugin $@
Infelizmente, nunca consegui que os parâmetros passados ( Edit: Eu precisava citar o $@
) funcionassem corretamente com o plug-in, então não sei se isso funcionaria. $@
para que ele funcione. Obrigado @derobert e @pjz. Ainda não sei se funcionaria desde que o fiz funcionar usando a solução do @ Arthur Arthur.
Existe uma maneira de começar sudo -s
a trabalhar sem permitir a desova de um shell raiz?
Responda:
Adicionada a seguinte linha em /etc/sudoers
:
nagios ALL=NOPASSWD: /bin/bash -c /usr/lib/nagios/plugins/check_ide_smart *
Observe o asterisco à direita; sem ele, isso não funciona. Obrigado @ Mike Arthur pela resposta.
Para sua informação, você precisa citar $ @ no seu shell script para que funcione corretamente:
$@
é mágico. Na página de manual do bash,Além disso, iniciar o bash não gera um pty; embora eu esteja perplexo com o motivo pelo qual o plugin nagios precisa de um terminal para rodar. Não deveria. Talvez o problema real seja a higienização do ambiente do sudo?
fonte
Em vez de usar
sudo -s
e iniciar um shell raiz, permita que o usuário do nagios use o sudo sem usar o tty!requiretty
. Você/etc/sudoers
deve ter o seguinte:... que permitirá acesso direto ao sudo, sem uma senha e sem um tty. Você pode deixar o "check_ide_plugin" desativado se quiser acessar o sudo para todos os plugins.
Também usamos o NRPE, que parece um pouco mais seguro que check_by_ssh, mas requer um pouco mais de configuração. A mesma idéia no / etc / sudoers tho, apenas troque nagios com nrpe. :)
~ tommy
fonte
Tente o script novamente, mas coloque aspas duplas em torno de seu $ @:
fonte
Eu não acho que é possível usar -s sem gerar um shell raiz (assumindo que você precise de privilégios de root). A opção -s existe especificamente para gerar um shell. Isso é o que -s significa. Do sudo (8):
fonte
/bin/bash
, o que também permite a geração de um shell interativo sem limitações e sem restrições sobre quais comandos podem ser chamados.