Назад | Перейти на главную страницу

Пользователь nrpe не может правильно выполнить скрипт удаленно с помощью lsof, netstat работает

Я создал простой скрипт для nagios, чтобы проверить порт на удаленном сервере. Изначально я пробовал использовать 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

На локальном компьютере пользователь nagios может запустить и выполнить сценарий и получить ожидаемый результат. Но удаленно, используя check_nrpe, Я всегда получал еще эхо

Check application port is down

Хотя, как я уже сказал, запуск сценария локально, он работал правильно

Пользователь nrpe имел все права, необходимые для выполнения сценария, SELinux находился в разрешающем режиме, но я так и не смог заставить его работать. Поэтому я изменил строку РЕЗУЛЬТАТ на использование netstat.

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

И тогда я мог бы получить ожидаемый ответ, используя check_nrpe удаленно. Я предполагаю, что это какая-то проблема с check_nrpe и lsof. Но я так и не нашел ничего в журналах.

У кого-нибудь есть идеи или предложения, чтобы заставить это работать правильно lsof?

Пользователи без полномочий root не видят вывода из lsof -i. (Подтверждено в Debian 8 и Cent 7, без SELinux.)

Если вы хотите использовать это в проверке nagios, вам придется запустить lsof через sudo.

Если sudo настроен на требование tty (может быть по умолчанию в CentOS), вы можете сделать что-то вроде этого:

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

Заменить nagios с участием nrpe при необходимости и при необходимости измените путь к lsof.