NRPE не може прочитати вихід, але чому?


27

У мене ця проблема з NRPE, всі речі, які я знайшов поки що в мережі, начебто вказують на речі, які я вже намагався

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient

дає

NRPE v2.12

як і очікувалося.

Запуск команди вручну (як визначено в nrpe.cfg на "nrpeclient", дає очікуваний відгук

nrpe.cfg:

command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e   -b ctrl_driver=0 bat_charge

"Expected response"

Але якщо я спробую запустити команду з сервера Nagios, я отримаю наступне:

# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output

Хто-небудь може подумати де-небудь ще, я, можливо, помилився з цим? Я робив те ж саме на багатьох інших серверах без проблем. Єдина відмінність, яку я можу придумати, полягає в тому, що це поле засноване на RHEL 5, тоді як інші - на основі RHEL 4.

Ці два біти вище, які я перевірив, - це те, що, здається, пропонує більшість людей, коли люди мали цю проблему.

Я мушу зазначити, що я отримую дивну помилку в журналах при перезапуску nrpe:

nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading 
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666 
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck

Незважаючи на те, що цей /usr/local/nagios/etc/nrpe.cfgфайл , безумовно, читає цей файл, щоб отримати речі, про які він говорить далі.



Давайте збережемо цю, оскільки інша була закрита.
Барт Де Вос

Крім того, переконайтеся, що STDOUT справді змитий.

Відповіді:


35

У вас проблема з правами.

Змініть команду на:

command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge

(додати судо)

Потім додайте nagios-користувача до sudoers:

nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage

Або ви могли просто chmod файл ... Це також працює.

Якщо ви використовуєте CentOS, Red Hat, Scientific або Fedora, переконайтесь, що вимкнено Defaults requirettyфайл судорів.


1
@Bart De Vos, але відповідь, яку ви додали, зробить дірку в захисті> додавши щось до файлу sudoers, відкриє вас для потенційного ризику для безпеки. тобто, якщо через переповнення буфера хтось зможе випустити файл з тим самим іменем в одне і те ж місце, він може виконати його, не знаючи пароля root і отримати контроль над полем: S Чи немає способу якось поставити підпис (SHA1 або MD5) програми у файлі sudoers, щоб запобігти нападу цього типу. тобто введений файл не буде мати однаковий підпис і, таким чином, не виконується. [Читайте перший коментар тут] ( crashatau.blogspot.co
Ахмад Хаджар

1
@ X-Ware: Хоча це правда, ймовірність зловживання буфера тут може бути зловживана дуже мало. Щоб не допустити цього, слід використовувати apparmor / SELinux. Саме тому ці речі існують.
Барт Де Вос

Я думаю, що в різних дистрибутивах є навіть різні користувачі, в моєму випадку користувач, який потрібно додати до visudo, був npre not nagios. Я все ще дотримувався рішення Bart De Vos, проте ви можете побачити, який користувач намагається отримати доступ до команди nrpe, переглянувши / var / log / secure журнал доступу. 24 липня 15:39:09 ім'я хоста sudo: nrpe: користувач НЕ в sudoers; TTY = невідомо; PWD = /; USER = корінь; COMMAND = / usr / lib64 / nagios / plugins / check_disk -w 20% -c 10% -p / dev / mapper / vg_uxp-lv_root

@AhmadHajjar Ви серйозно? Ви думаєте, що хтось зламатиме nagios (систему, якій 20 років) і використовуватиме цього користувача для виконання файлу з кореневими дозволами. І ти думаєш, що я не зробив виконувану програму виконуватись як root, а лише для читання, щоб не допустити, щоб хтось скопіював файл над нею? Якщо ви переживаєте з цього приводу, замість того, щоб використовувати sudo, ви можете налаштувати сам виконуваний файл check_openmanage і дозволити комусь запустити його!
Еван Ланглуа

11

Коротка відповідь: якщо ви використовуєте плагін Bash, переконайтеся, що у вас є шебанг із зазначенням, який інтерпретатор слід використовувати:#!/bin/bash


Я зіткнувся з тим же питанням із плагіном Nagios, який я написав сам. Сценарій працював так, як очікувалося при локальному запуску, навіть при запуску як користувач із nagiosвикористанням наступного оператора:

$ sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK

Але віддалений запуск за допомогою NRPE з сервера Nagios3 виявився невдалим:

$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output

Нарешті я вирішив цю справу, додавши шебанг у свій сценарій, оскільки виявилося, що для запуску сценарію через NRPE не використовується той же інтерпретатор, як при запуску sudo sudo -s -u nagios.


Була ця проблема під час використання плагіну ruby ​​script nagios з rbenv. Виправлено створення сценарію обгортки з#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX

1
дивовижна відповідь! sudo -s -u nagios дозволив мені зрозуміти, чому nagios не може повернути вихід з певного плагіна. Дуже дякую!
ufk

6

У моєму випадку проблема була просто - користувацькі nagios не змогли виконати сценарій. Після chmod він почав працювати. Судо не потрібно. Це навіть зло :)


1
Справжня відповідь така. Нагіос не зміг виконати скрипт, або через погані дозволи, сценарій був помилковим, або сценарій не був там.
droope

5

check_nrpe отримував "NRPE: Не вдається прочитати вихід", незважаючи на те, що перевірка працює локально, оскільки плагін, який я використовував, не працював добре з SELinux. Вимкніть його та переконайтесь, що вилучите контексти файлу:

$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis 
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis

хоча вимкнення selinux, як правило, не є хорошою ідеєю для тестування, це все ще справедливо.
Денніс Нолте

4

Перевірте шлях, дозволи, selinux, iptables.

У клієнта була проблема з маршрутизацією: nrpe.cfg, двічі перевірити шлях команди до імені плагіна check_ *. Вони можуть бути заплутаними, (lib / local) (libexec / plugins) як ім'я шляху. Я помилково потягнув і поклав шляхи від коментованого попередньо упакованого файлу nrpe cfg, щоб зробити команди. Make install або yum плагін встановлює їх у каталог difft.

командовано: / usr / local / nagios / libexec / check_disk

проти

realpath: / usr / lib / nagios / plugins / check_disk

З сервера я зміг підтвердити, що це не проблема з брандмауером, міг передати телнет на порт 5666, міг запустити ковдру check_nrpe і отримати статус поверненого значення. Не міг запускати команди локально, але nrpe мав неправильний шлях на клієнті в nrpe.cfg.


4

У моєму випадку лише один плагін вийшов з ладу, а кілька інших працювали нормально. Це виявилося проблемою LOCALE.

Плагін був, check_mem.shі він виконував греп для Memна виході free. Але система LOCALE повернула Speicher(німецька) замість Mem, тому всі отримані значення були порожніми рядками.


2
Поспішайте, ласкаво просимо в СФ! Це відмінна перша відповідь, на мою думку: коротко, до суті, і це додає щось нове до колекції відповідей, які вже є тут. +1 від мене, і я сподіваюся прочитати більше таких відповідей від вас у майбутньому (сподіваюся, ви пробачите мою невелику редагування формату).
MadHatter підтримує Моніку

2

Це проблема з дозволом, просто дайте право виконання сценарію, і це буде добре:

ось приклад: До / Віддалений хост :

[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul  7 10:55 /usr/lib/nagios/plugins/check_mem.sh

Сервер NRPE :

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output

Після: Віддалений хост :

[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;

Проблема вирішена.


1
Хороша відповідь, але також добре відзначити, що дозволити всім користувачам запускати check_nrpe, як це робить chmod o + x, може бути потенційним ризиком для безпеки, залежно від того, як налаштована / доступна / використана система.
австрійський

1

У моєму випадку моніторинговий файл журналу належав root: adm, тому додавання користувача nagios до групи adm зробило команду check_log успішною, але лише тоді, коли виконується безпосередньо на хостах, що контролюються. Він продовжував виходити з ладу за допомогою check_nrpe на сервері Nagios, поки я не перезапустив сервіс nagios-nrpe-сервер на хостах, що контролюються, наприклад

service nagios-nrpe-server restart

Тому, очевидно, перезапуск послуги був необхідний, щоб зміни дозволів набули чинності для NRPE, але мені знадобилося деякий час, щоб це зрозуміти.


1

У разі користувацьких плагінів NRPE обов'язково надрукуйте деякий вихід разом із значенням виходу. Якщо немає виводу зі сценарію, NRPE скаржиться на те, що "NRPE не може прочитати вихід" . Ви можете увімкнути налагодження в nrpe.cfg і спостерігати за цією помилкою.


1

У моєму випадку проблеми були пов'язані з selinux (працює RHEL 6.5, selinux встановлений для виконання).

Встановлення nagios-plugins- * через yum створить ваші плагінні файли в / usr / lib64 / nagios / plugins. Якщо ви перевірте fcontext для цих файлів плагінів (ls -lZ), ви побачите, що для файлів тип контексту встановлено на "nagios_system_plugin_exec_t", що є типом контексту, якого очікує check_nrpe.

У моєму випадку я створив користувацький сценарій "check_mem.sh", використовуючи "vi". У отриманому файлі тип контексту був встановлений на "lib_t". Це викликало nrpe для виведення "NRPE: Не вдається прочитати вихід".

Зміна контексту файлу на "nagios_system_plugin_exec_t" вирішила проблему:

chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh

Звичайне усунення несправностей із selinux вказувало б і на цю проблему (перевірка /var/log/audit/audit.log), але, звичайно, це було останнє, про що я думав

Редагувати: chcon просто тимчасово змінює контекст. Щоб постійно його змінювати, використовуйте semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh


0

Можливо, ви не встановили свої плагіни Nagios, NRPE не може їх знайти або отримати доступ до них.

Мені ніколи не доводилося додавати команди до Судорів. Переконайтеся, що командами належить користувач Nagios, і вони читаються.


0

Я думаю, ви повинні додати плагіни у своєму місцевому реєстрі /usr/lib64/nagios/plugins/*. У мене була така ж проблема, як у вас, і я можу вирішити це рішення.


0

У мене була проблема, що ти пишеш. Тест, який я проводив, був від perl. Поставте цей рядок у файл, /etc/nagios/nrpe.cfgщоб він працював.

command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 

0

Є дуже приємна стаття, яка охоплює всю установку та конфігурацію агента NRPE з багатьма прикладами check_commands, я використовую цю статтю, коли мені потрібно встановити NRPE на новому сервері. Більше того, в кінці сторінки ви можете знайти класний сценарій, який автоматично встановлює і налаштовує NRPE для вас (на основі встановлених вами змінних), тут можна знайти статтю: Тут


Посилання оновлено
Itai Ganot

0

Зазвичай це відбувається, коли сервер NRPE запускається з користувачем nrpe замість nagios.

Зміна nrpe_userзначення на нагіоси у /etc/nagios/nrpe.cfgфайлі має вирішити вашу проблему.

При необхідності nrpe_groupможна також змінити балончик.


0

Ще одна річ, яку потрібно перевірити, - це те, що якщо ваша команда використовується sudo -u <another user>для запуску команди, libexecкаталог (та каталоги над нею) повинні бути читатими користувачем, на який судили.

Наприклад, якщо ваша команда:

command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ...

Користувач tomcat повинен мати доступ до цього файлу.

Одним із способів виправити це було б:

chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec

Заміна останньої частини там, де живуть ваші виконавчі файли


0

У мене була така ж проблема, і мені вдається вирішити її, вбиваючи процес нагіосу (на моніторованій машині):

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

Після цього все пішло нормально.


0

Якраз виникла ця проблема на FreeBSD. Після удару головою об стіну протягом години я зрозумів, що проблема /usr/local/nagios/etc/nrpe.cfgвказує на неправильне місце для судо.

Щоб знайти правильне місце для вказівки для запуску команди sudo:

# whereis sudo

Потім я змінив command_prefix у nrpe.cfg з:

command_prefix=/usr/local/sudo

до:

command_prefix=/usr/local/bin/sudo

Потім побіг service nrpe restartі проблема була вирішена.

Можливо, подібні проблеми можуть бути і в інших операційних системах, лише інша справа, щоб перевірити, чи ви перевірили всі інші можливі проблеми з дозволами, і все-таки вирішили цю проблему.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.