L'user nrpe ne peut pas exécuter correctement le script à distance en utilisant lsof, netstat fonctionne

J'ai créé un script simple pour que nagios vérifie un port sur un server distant. À l'origine, j'ai essayé d'utiliser lsof .

 #!/bin/bash RESULT=$(lsof -i :8080 | grep LISTEN) if [ -n "$RESULT" ] then echo "$RESULT" exit 0 else echo "Check application port is down" exit 2 fi 

Sur la machine locale, l'user nagios pourrait exécuter et exécuter le script et get la sortie attendue. Mais à distance, à l'aide de check_nrpe , j'ai toujours eu l'autre echo de return

 Check application port is down 

Même si, comme je l'ai dit, le script localement fonctionnait correctement

L'user nrpe avait tous les droits nécessaires pour exécuter le script, SELinux était en mode permissif, mais je ne pourrais jamais le faire fonctionner. J'ai donc changé la ligne RESULT pour utiliser netstat .

 RESULT=$(netstat -anp | grep ":8080" | grep LISTEN) 

Et puis je pourrais récupérer la réponse attendue à l'aide de check_nrpe distance. Je suppose donc qu'il s'agit d'un problème avec check_nrpe et lsof . Mais je ne pourrais jamais find quoi que ce soit dans les journaux.

Quelqu'un a-t-il des idées ou des suggestions pour que cela fonctionne correctement avec lsof ?

Les users non root ne voient aucun résultat de lsof -i . (Confirmé sur Debian 8 et Cent 7, sans SELinux.)

Si vous vouliez utiliser cela dans une vérification nagios, vous devriez exécuter lsof via sudo.

Si sudo est configuré pour exiger un tty (peut-être le défaut sur CentOS), vous pouvez faire quelque chose comme ceci:

 Defaults:nagios !requiretty nagios ALL=NOPASSWD:/usr/bin/lsof 

Remplacez nagios par nrpe si nécessaire, et modifiez le path d'access pour lsof si nécessaire.