NRPE incapaz de ler a saída, mas por quê?

27

Eu tenho esse problema com o NRPE, todas as coisas que encontrei até agora na rede parecem me indicar coisas que já tentei.

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient

NRPE v2.12

como esperado.

A execução manual do comando (conforme definido em nrpe.cfg no "nrpeclient", fornece a resposta esperada

nrpe.cfg:

command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e   -b ctrl_driver=0 bat_charge

"Expected response"

Mas se eu tentar executar o comando no servidor Nagios, obtenho o seguinte:

# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output

Alguém pode pensar em outro lugar que eu possa ter cometido um erro com isso? Eu fiz a mesma coisa em vários outros servidores sem nenhum problema. A única diferença que consigo pensar nisso é que esta caixa é baseada no RHEL 5, enquanto as outras são baseadas no RHEL 4.

Os dois bits acima que testei são os que a maioria das pessoas parece sugerir quando enfrentam esse problema.

Devo mencionar que recebo um erro estranho nos logs quando reinicio nrpe:

nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading 
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666 
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck

Mesmo assim, ele está claramente lendo esse /usr/local/nagios/etc/nrpe.cfgarquivo para obter as coisas sobre as quais está falando mais adiante ..

ticktockhouse
fonte
possível duplicado do NRPE incapaz de ler a saída, mas por quê?
mailq
Vamos manter este aqui, já que o outro foi fechado.
Bart De Vos
Além disso, verifique se STDOUT está realmente nivelado.

Respostas:

35

Você tem um problema de direitos.

Mude o comando para:

command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge

(adicione sudo)

Em seguida, adicione o nagios-user aos sudoers:

nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage

Ou você pode simplesmente chmod o arquivo ... Isso também funciona.

Se você estiver usando o CentOS, Red Hat, Scientific ou Fedora, certifique-se de desativar Defaults requirettyo arquivo sudoers.

Bart De Vos
fonte
11
@ Bart De Vos, mas a resposta que você adicionou fará uma brecha na segurança> adicionar algo ao arquivo sudoers abrirá você para um risco potencial à segurança. ou seja, se através de um buffer overflow alguém puder soltar um arquivo com o mesmo nome no mesmo local, ele poderá executá-lo sem conhecer a senha root e obter o controle da caixa: S Não há como colocar uma assinatura de alguma forma (SHA1 ou MD5) do aplicativo no arquivo sudoers para impedir esse tipo de ataque. ou seja, o arquivo injetado não terá a mesma assinatura e, portanto, não será executado. [Leia o primeiro comentário aqui] ( crashatau.blogspot.co
Ahmad Hajjar
11
@ X-Ware: Embora isso seja verdade, a chance de um estouro de buffer ser abusada aqui é muito pequena. Para impedir que isso aconteça, você deve usar o apparmor / SELinux. É por isso que essas coisas existem.
Bart De Vos
Acho que distros diferentes têm até usuários diferentes, no meu caso o usuário a adicionar ao visudo não era nem nagios. Ainda segui a solução de Bart De Vos, no entanto, você pode ver qual usuário está tentando acessar o comando nrpe visualizando o / var / log / log de acesso seguro. 24 de julho 15:39:09 hostname sudo: nrpe: user NÃO em sudoers; TTY = desconhecido; PWD = /; USUÁRIO = raiz; COMMAND = / usr / lib64 / nagios / plugins / check_disk -w 20% -c 10% -p / dev / mapper / vg_uxp-lv_root
@AhmadHajjar Você está falando sério? Você acha que alguém irá hackear nagios (um sistema com 20 anos) e usar esse usuário para executar um arquivo com permissões de root. E você acha que eu não fiz o executável ser executado como root como somente leitura para impedir que alguém copie um arquivo sobre ele? Se você está preocupado com isso, em vez de usar o sudo, você pode configurar o próprio executável check_openmanage e deixar qualquer um executá-lo!
Evan Langlois
11

Resposta curta: se você estiver usando um plug-in Bash, verifique se possui um shebang informando qual intérprete deve ser usado:#!/bin/bash


Eu estava enfrentando o mesmo problema com um plugin do Nagios que eu escrevi. O script estava sendo executado conforme o esperado quando iniciado localmente, mesmo quando executado como usuário nagiosusando a seguinte instrução:

$ sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK

Mas a inicialização remota usando NRPE do servidor Nagios3 não teve êxito:

$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output

Finalmente resolvi esse caso adicionando um shebang no meu script, pois parecia que a execução do script pelo NRPE não usava o mesmo intérprete que o da execução sudo sudo -s -u nagios.

Mickaël Le Baillif
fonte
Teve este problema ao usar um plugin nagios de script ruby ​​com rbenv. Correção foi para criar um script de wrapper com#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX 3/13
11
resposta incrível! sudo -s -u nagios me permitiu ver por que o nagios não pôde retornar a saída de um plugin específico. muito obrigado!
ufk
6

No meu caso, o problema era simplesmente - o usuário nagios não conseguiu executar o script. Após o chmod, ele começou a funcionar. Sudo não é necessário. É até mal :)

bluszcz
fonte
11
A verdadeira resposta é essa. O Nagios não conseguiu executar o script, devido a permissões incorretas, erro de ortografia ou falta de script.
droope
5

check_nrpe estava recebendo 'NRPE: Não foi possível ler a saída' apesar da verificação funcionar localmente porque o plug-in que eu estava usando não funcionou bem com o SELinux. Desative-o e certifique-se de remover os contextos do arquivo:

$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis 
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
AX Labs
fonte
embora desabilitar o selinux geralmente não seja uma boa ideia para testar isso, ainda é válido.
Dennis Nolte
4

Verifique caminhos, permissões, selinux, iptables.

O meu era um problema de correção no cliente: nrpe.cfg, verifique novamente o caminho do comando para o nome do plugin check_ *. Estes podem ser confusos, (lib / local) (libexec / plugins) como um nome de caminho. Arranquei por engano e coloquei os caminhos do arquivo nrpe cfg pré-empacotado comentado para fazer comandos. A instalação do make install ou do yum plugin os coloca em um diretório difft.

confirmado: / usr / local / nagios / libexec / check_disk

versus

caminho real: / usr / lib / nagios / plugins / check_disk

No servidor, pude confirmar que não era um problema de firewall, podia fazer telnet para a porta 5666, executar um check_nrpe geral e obter o status como um valor de retorno. Pode executar os comandos localmente, mas o nrpe tinha o caminho errado no cliente no nrpe.cfg.

Olá Mundo
fonte
4

No meu caso, apenas um plugin falhou enquanto vários outros funcionaram bem. Acabou sendo um problema LOCALE.

O plugin foi check_mem.she executou um grep para Memna saída de free. Mas LOCALE em todo o sistema retornou Speicher(alemão) em vez de Mem, portanto, todos os valores recebidos eram cadeias vazias.

Pressa
fonte
2
Rush, bem-vindo ao SF! Esta é uma excelente primeira resposta, na minha opinião: curta, objetiva e acrescenta algo novo à coleção de respostas já aqui. +1 de mim, e espero ler mais respostas desse tipo no futuro (espero que você perdoe minha pequena edição de formatação).
MadHatter apoia Monica
2

Este é um problema de permissão, apenas dê a execução do script corretamente e tudo ficará bem:

Aqui está um exemplo: Antes / Host remoto :

[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul  7 10:55 /usr/lib/nagios/plugins/check_mem.sh

Servidor NRPE :

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output

Depois: Host Remoto :

[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;

Problema resolvido.

Youssef ASEBRIY
fonte
11
Boa resposta, mas também é bom observar que permitir que todos os usuários executem check_nrpe, como chmod o + x, pode ser um risco potencial à segurança, dependendo de como o sistema está configurado / acessado / usado.
de Austin
1

No meu caso, o arquivo de log sendo monitorado era de propriedade de root: adm, portanto, a adição do usuário nagios ao grupo adm fez com que o comando check_log fosse bem-sucedido, mas somente quando executado diretamente nos hosts monitorados. Continuou a falhar usando check_nrpe no servidor Nagios até reiniciar o serviço nagios-nrpe-server nos hosts monitorados, por exemplo

service nagios-nrpe-server restart

Então, aparentemente, foi necessário reiniciar o serviço para que as alterações nas permissões entrassem em vigor no NRPE, mas demorei um pouco para descobrir isso.

Tony
fonte
1

No caso de plugins NRPE personalizados, imprima alguma saída junto com o valor de saída. Se não houver saída do script, o NRPE reclamará dizendo "NRPE incapaz de ler a saída" . Você pode habilitar a depuração no nrpe.cfg e observe este erro.

Karthik
fonte
1

No meu caso, os problemas estavam relacionados ao selinux (executando o RHEL 6.5, o selinux está definido para impor).

Instalar nagios-plugins- * via yum criará seus arquivos de plug-in em / usr / lib64 / nagios / plugins. Se você verificar o fcontext nesses arquivos de plug-in (ls -lZ), verá que os arquivos têm o tipo de contexto definido como "nagios_system_plugin_exec_t", que é o tipo de contexto que check_nrpe espera.

No meu caso, eu criei um script personalizado "check_mem.sh" usando "vi". O arquivo resultante teve o tipo de contexto definido como "lib_t". Isso estava fazendo com que o nrpe produzisse o "NRPE: Não foi possível ler a saída".

Alterar o contexto do arquivo para "nagios_system_plugin_exec_t" resolveu o problema:

chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh

A solução de problemas usual do selinux também me indicaria esse problema (verificando /var/log/audit/audit.log), mas foi a última coisa que pensei sobre

Edit: chcon apenas altera temporariamente o contexto. Para alterá-lo persistentemente, use semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh

Alexandru Todicescu
fonte
0

Pode ser que você não tenha instalado os plugins do Nagios, o NRPE não pode encontrá-los ou acessá-los.

Eu nunca tive que adicionar meus comandos ao Sudoers. Verifique se os comandos pertencem ao usuário do Nagios e se estão legíveis.

Daniel Baker
fonte
0

Eu acho que você deve adicionar os plugins no seu diretório local /usr/lib64/nagios/plugins/*. Eu tive o mesmo problema que você e posso resolvê-lo com esta solução.

Tarik Nasser
fonte
0

Eu tive o problema que você escreve. O teste que fiz foi do perl. Coloque esta linha no arquivo /etc/nagios/nrpe.cfgpara fazê-lo funcionar.

command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 
user224319
fonte
0

Há um artigo muito bom que cobre toda a instalação e configuração do agente NRPE com muitos exemplos de check_commands. Eu uso este artigo sempre que preciso instalar o NRPE em um novo servidor. Mais do que isso, no final da página, você pode encontrar um script legal que instala e configura automaticamente o NRPE para você (com base nas variáveis ​​definidas), o artigo pode ser encontrado: Aqui

Itai Ganot
fonte
O link foi atualizado
Itai Ganot
0

Isso geralmente acontece quando o servidor NRPE é iniciado com o usuário nrpe, em vez de nagios.

Alterar o nrpe_uservalor para nagios no /etc/nagios/nrpe.cfgarquivo deve resolver seu problema.

Também nrpe_grouppode ser alterado, se necessário.

Umut Uzun
fonte
0

Outra coisa a verificar é que, se o seu comando estiver usando sudo -u <another user>para executar o comando, o libexecdiretório (e os diretórios acima dele) deverão ser legíveis pelo usuário que está sendo processado.

Por exemplo, se o seu comando for:

command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ...

O usuário do tomcat deve poder acessar esse arquivo.

Uma maneira de corrigir isso seria:

chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec

Substituindo a última parte por onde seus executáveis ​​estiverem

Mitch
fonte
0

Eu tive o mesmo problema e consigo resolvê-lo matando o processo nagios (na máquina monitorada):

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

Tudo correu bem depois disso.

user428879
fonte
0

Só tive esse problema no FreeBSD. Depois de bater minha cabeça contra uma parede por uma hora, percebi que o problema era que ele /usr/local/nagios/etc/nrpe.cfgestava apontando para o local errado do sudo.

Para encontrar o local correto para o qual apontar para o comando sudo, execute:

# whereis sudo

Alterei o command_prefix no nrpe.cfg de:

command_prefix=/usr/local/sudo

para:

command_prefix=/usr/local/bin/sudo

Em seguida, correu service nrpe restarte o problema foi resolvido.

Pode ser um problema semelhante em outros sistemas operacionais, apenas mais uma coisa para verificar se você verificou todos os outros problemas de permissões possíveis e ainda enfrenta esse problema.

Graeme
fonte
-2

Eu tive esse problema e resolvi desabilitar o selinux

setenforce 0

Paulo Azedo
fonte
2
Bem-vindo à falha do servidor. Você pode fornecer mais detalhes explicando como / por que isso funciona?
Eu digo Restabelecer Monica