Пользователь 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 , я всегда возвращал else echo

Check application port is down

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

Пользователь nrpe имел все права, необходимые для выполнения сценария, SELinux был в разрешающем режиме, но я так и не смог заставить его работать. Поэтому я изменил строку RESULT, чтобы использовать netstat .

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

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

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

2
задан 22 April 2016 в 05:25
1 ответ

Пользователи без полномочий 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.

3
ответ дан 3 December 2019 в 10:38

Теги

Похожие вопросы