Я пытаюсь отслеживать мою устаревшую установку zimbra (работающую на устаревшей Ubuntu 8.x) из моей установки nagios (работающей на более поздней версии OpenBSD).
Проблема в том, что когда я бегу check_nrpe
с сервера nagios он жалуется:
nagios-server$ sudo su -m _nagios -c "/usr/local/libexec/nagios/check_nrpe -H ZIMBRA_HOST -c check_zimbra"
CHECK_NRPE: No output returned from daemon.
Обратите внимание, что конфигурация NRPE сервера zimbra работает:
command[check_zimbra]=/usr/lib/nagios/plugins/check_zimbra.pl
С другой стороны, запуск плагина локально на сервере zimbra отлично работает от root:
zimbra-server# ./check_zimbra.pl
HOST : ZIMBRA_HOST, ldap : OK, logger : STOPPED and zmlogswatchctl down, mailbox : OK, mta : STOPPED and zmmtaconfigctl down and zmsaslauthdctl down, snmp : STOPPED, spell : OK, stats : OK
Однако запуск его от имени пользователя nagios на сервере zimbra жалуется на путь:
zimbra-server# su -m nagios -c "./check_zimbra.pl"
Insecure $ENV{PATH} while running setuid at ./check_zimbra.pl line 32.
Строка 32 гласит:
7 $zimbra_status_command='/opt/zimbra/bin/zmcontrol status';
[snip]
32 open (ZMSTATUS, "$zimbra_status_command |");
У меня есть подозрение, что это может быть связано с suid perl. Фактически, после этот совет и добавив эту строку в check_zimbra.pl
файл,
delete @ENV{'PATH', 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'};
Получаю следующее:
zimbra-server# su -m nagios -c "./check_zimbra.pl"
Insecure dependency in piped open while running setuid at /opt/zimbra/bin/zmcontrol line 389.
Как бы то ни было, на сервере Zimbra я установил check_zimbra.pl плагин, который suid
zimbra, чтобы я мог запустить его из nagios
пользователь:
zimbra-server# ls -la check_zimbra.pl
-rwsr-xr-x 1 zimbra root 2885 2010-01-11 21:14 check_zimbra.pl
Я изменил /etc/sudoers
таким образом nagios
Пользователь может запустить соответствующий инструмент мониторинга Zimbra:
%nagios ALL=(zimbra) NOPASSWD:/opt/zimbra/bin/zmcontrol
Я застрял ... есть ли другой способ запустить check_zimbra.pl
плагин как пользователь nagios, имея возможность запускать zmcontrol status
команда как пользователь zimbra ..?
Спасибо,
perldoc perlsec указывает, что для @ENV {'PATH'} необходимо установить известное значение, а не сбрасывать его!
Blockquote Для сообщений «Небезопасный $ ENV {PATH}» вам необходимо установить $ ENV {'PATH'} на известное значение, и каждый каталог в пути должен быть абсолютным и недоступным для записи другим лицам, кроме его владельца и группы. Вы можете быть удивлены, получив это сообщение, даже если путь к вашему исполняемому файлу полностью определен. Он не создается, потому что вы не указали полный путь к программе; вместо этого он создается, потому что вы никогда не устанавливали переменную среды PATH или не устанавливали для нее что-то безопасное. Поскольку Perl не может гарантировать, что рассматриваемый исполняемый файл сам не развернется и не выполнит какую-то другую программу, зависящую от вашего PATH, он гарантирует, что вы установили PATH.