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

Команды NRPE не работают при вызове с хоста удаленного управления

Прежде всего: я знаю, что уже были вопросы по этой проблеме, но даже используя их ответы, я все еще не могу понять, почему моя команда не работает.
Я хочу вызвать сценарий на удаленном хосте с помощью NRPE. Однако то, что собирается делать скрипт, может выполнить только конкретный пользователь (назовем его userA).

Сценарий, указанный выше, имеет те же права, что и другие сценарии, которые может выполнять пользователь. nagios. Более того, когда он выполняется локально, он довольно печатает:

nagios
Debug... 
tomcat
Debug finished

и обычно он работает так, как задумано. Однако когда он вызывается с хоста управления, он печатает только

nagios
Debug...
Debug finished

Вероятно, это вызвано NRPE: Cannot read output, который появляется каждый раз, когда я пытаюсь sudo что-нибудь от хоста управления. Я уже пробовал добавить в запись sudoers Defaults !requiretty безуспешно. Я использую Debian 6.0.7. Что я могу сделать, чтобы мой скрипт заработал при вызове с хоста управления?

РЕДАКТИРОВАТЬ.
Прежде всего, каталог /etc/sudoers.d/ содержит только файл README.
userA настоящее имя должно быть tomcat Давайте посмотрим на visudo тогда вывод:

 Defaults        env_reset
 Defaults !requiretty
 root    ALL=(ALL) ALL
 nagios ALL=(tomcat)     NOPASSWD: /usr/bin/whoami

 %www ALL=(ALL) NOPASSWD: /bin/su - www
 %tomcat ALL=(ALL) NOPASSWD: /bin/su - tomcat
 %tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat stop
 %tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat start
 %tomcat ALL=(ALL) NOPASSWD: /etc/init.d/tomcat restart

Обратите внимание, я пробовал даже nagios ALL=(tomcat) NOPASSWD: ALL и nagios ALL=(ALL) NOPASSWD: ALL. Я также удалил несколько пользовательских записей, например username ALL=(ALL) NOPASSWD: ALL.


NRPE

 $ tail -n 1 /etc/nagios/nrpe.cfg
 command[debug_now]=/usr/local/bin/debug_now


 $ ls -l /usr/local/bin/debug_now
 -rwxr-xr-x 1 root staff 573 Dec  2 09:06 /usr/local/bin/debug_now
 $ ls -lh /usr/local | grep bin
 drwxrwsr-x  2 root      staff 4.0K Dec  2 09:12 bin
 $ ls -lh /usr | grep local
 drwxrwsr-x  14 root staff 4.0K Oct 22  2010 local


От другого хозяина

$ /usr/lib/nagios/plugins/check_nrpe -H <ip address> -c debug_now
nagios
Debug...
Debug finished

О боже, мне так стыдно прямо сейчас.

Все хорошо. Тебе надо НАЧАТЬ СНАЧАЛА nagios-nrpe-server после изменения sudoers, перезагрузки недостаточно. Перезагрузка в порядке, если вы только измените nrpe.cfg или другой файл конфигурации.

@MadHatter, @Keith - спасибо вам, ребята, за вашу помощь!

Я попытался воспроизвести вашу проблему на компьютере Debian Squeeze (6.0.10), но у меня не было проблем. Если вы настроите именно так (с правильной настройкой sudo, как указывает MadHatter), включая правильные разрешения и режимы, он будет вести себя так, как вы ожидаете.

# ls -l /etc/sudoers.d/nagios-test 
-r--r----- 1 root root 44 Dec  1 11:36 /etc/sudoers.d/nagios-test
# cat /etc/sudoers.d/nagios-test 
nagios ALL=(keith)  NOPASSWD:/usr/bin/whoami

# tail -n 1 /etc/nagios/nrpe.cfg
command[debug]=/usr/local/bin/debug
# ls -l /usr/local/bin/debug
-rwxr-xr-x 1 root staff 75 Dec  1 11:37 /usr/local/bin/debug

# cat /usr/local/bin/debug
#!/bin/sh
whoami
echo "Debug..."
sudo -u keith whoami
echo "Debug finished"

От другого хозяина:

$ ./check_nrpe -H squeeze -c debug
nagios
Debug...
keith
Debug finished

Ваш sudoers запись указывает привилегии для запуска /usr/local/bin/debug_now, но ваш сценарий говорит sudo -u userA whoami. Это не будет работать; любую команду, с которой вы хотите запустить sudo привилегии, вот что должно появиться в sudoers файл.