Вопрос или проблема
Я стараюсь выразиться как можно яснее: мой мозг сейчас взорвётся, как те взрывающиеся котята.
Обе машины Centos 7:
[[email protected]]# cat /proc/version
Linux version 3.10.0-693.11.6.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 4 01:06:37 UTC 2018
И последний NRPE из EPEL:
[[email protected]]# ./check_nrpe -H 192.168.10.2
NRPE v3.2.0
Я пытаюсь перезапустить службу с сервера Nagios, чтобы я мог установить обработчик событий. Всё началось с множества скриптов, но теперь я сузил проблему до этого:
[[email protected]]# ./check_nrpe -H 192.168.10.2 -c restart
NRPE: Unable to read output
[[email protected]]# ./check_nrpe -H 192.168.10.2 -c status
(... корректный вывод статуса службы ...)
Loaded: loaded (/usr/lib/systemd/system/cachefilesd.service
(... корректный вывод статуса службы ...)
Итак, я могу проверять статус служб, но не могу их запускать или перезапускать.
[[email protected]]# cat /etc/nagios/nrpe.conf:
[...]
nrpe_user=nrpe
nrpe_group=nrpe
allowed_hosts=127.0.0.1,192.168.10.1
command[status]=/lib64/nagios/plugins/status.sh
command[restart]=/lib64/nagios/plugins/restart.sh
[...]
[[email protected]]# cat /lib64/nagios/plugins/status.sh
#!/bin/bash
sudo systemctl status cachefilesd
exit 0
и
[[email protected]]# cat /lib64/nagios/plugins/restart.sh
#!/bin/bash
sudo systemctl restart cachefilesd
exit 0
sudoers:
[[email protected]]# cat /etc/sudoers
# Defaults specification
Defaults: nrpe !requiretty
Defaults: nagios !requiretty
nagios ALL = NOPASSWD: /sbin/service,/usr/bin/systemctl,/usr/sbin/service
nrpe ALL = NOPASSWD: /sbin/service,/usr/bin/systemctl,/usr/sbin/service
Если я ввожу:
[[email protected]]# sudo -u nrpe -H ./restart-cachefilesd.sh
Всё в порядке.
Я включил отладку в NRPE и получил:
nrpe[5431]: Host address is in allowed_hosts
nrpe[5431]: Host 192.168.10.1 is asking for command 'restart' to be run...
nrpe[5431]: Running command: /lib64/nagios/plugins/restart.sh
nrpe[5432]: WARNING: my_system() seteuid(0): Operation not permitted
nrpe[5431]: Command completed with return code 0 and output:
nrpe[5431]: Return Code: 3, Output: NRPE: Unable to read output
nrpe[5431]: Connection from 192.168.10.1 closed.
Я пытался использовать strace
для вывода, но это слишком сложно для меня…
Вместо того чтобы включать sudo в скрипт, следует включить sudo в файл nrpe.cfg:
command[status]=sudo /lib64/nagios/plugins/status.sh
вместо
command[status]=/lib64/nagios/plugins/status.sh
.
Ответ или решение
Когда сталкиваетесь с проблемой "NRPE: Unable to read output – Permissions issues" в среде CentOS 7, важно тщательно рассмотреть конфигурацию NRPE и ваши скрипты, чтобы определить возможные проблемы с правами доступа и выполнения. Ваша ситуация демонстрирует затруднения при попытке выполнить команды на удаленной машине через NRPE, особенно при использовании команд типа "start" или "restart".
Определение проблемы
-
Конфигурация NRPE:
У вас настроен NRPE для выполнения команд доступа через сервер Nagios. Конфигурация файлаnrpe.conf
предоставляет соответствующие параметры:nrpe_user=nrpe nrpe_group=nrpe allowed_hosts=127.0.0.1,192.168.10.1 command[status]=/lib64/nagios/plugins/status.sh command[restart]=/lib64/nagios/plugins/restart.sh
Команды должны выполняться от имени пользователя
nrpe
, который находится в группеnrpe
. -
Сценарии исполнения команд:
- Скрипты
status.sh
иrestart.sh
оба используютsudo
для выполнения командыsystemctl
, что требует соответствующих прав.
- Скрипты
-
Содержимое
sudoers
:
Похоже, что у вас уже указаны необходимые параметры в/etc/sudoers
для пользователейnagios
иnrpe
:Defaults:nrpe !requiretty nrpe ALL = NOPASSWD: /sbin/service,/usr/bin/systemctl,/usr/sbin/service
Решение
Проблема, скорее всего, связана с тем, что сценарии возможного не выполняются с увеличенными привилегиями из-за исполняемого пользователя. Наиболее распространенной причиной проблемы является неправильное использование sudo
в контексте NRPE. Давайте применим несколько менее очевидных, но необходимых шагов:
-
Перенос
sudo
в конфигурацию NRPE:
Добавьтеsudo
напрямую в конфигурацию команды вnrpe.conf
. Например:command[status]=sudo /lib64/nagios/plugins/status.sh command[restart]=sudo /lib64/nagios/plugins/restart.sh
Такой подход устраняет необходимость вызывать
sudo
внутри скрипта и позволит команде непосредственно использовать права доступа. -
Проверка конфигурации
sudoers
:
Убедитесь, что запись вsudoers
корректна и действительно разрешает выполнение необходимых команд без запроса пароля для пользователяnrpe
. Сделайте это с помощью:visudo
-
Правила
requiretty
:
Опция!requiretty
отключает необходимость наличия tty для запуска команд сsudo
. Убедитесь, что эта опция правильно установлена, чтобы скрипты могли выполняться через NRPE. -
Диагностика и логи:
Используйте системные логи для диагностики, проверяя записи NRPE в/var/log/messages
или/var/log/secure
, которые могут дать представление о попытках выполнения команд и связанных с ними проблемах.
Заключение
Решение проблем с правами доступа требует аккуратной настройки NRPE и sudoers
, чтобы убедиться, что сценарии могут выполняться с нужными правами. Перемещение вызова sudo
из скрипта в конфигурационный файл NRPE устраняет потенциальные конфликты и упрощает управление правами. Таким образом, вы можете эффективно использовать NRPE для управления службами удаленно.