NRPE: Не удается прочитать вывод – проблемы с правами доступа

Вопрос или проблема

Я стараюсь выразиться как можно яснее: мой мозг сейчас взорвётся, как те взрывающиеся котята.

Обе машины 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".

Определение проблемы

  1. Конфигурация 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.

  2. Сценарии исполнения команд:

    • Скрипты status.sh и restart.sh оба используют sudo для выполнения команды systemctl, что требует соответствующих прав.
  3. Содержимое sudoers:
    Похоже, что у вас уже указаны необходимые параметры в /etc/sudoers для пользователей nagios и nrpe:

    Defaults:nrpe !requiretty
    nrpe ALL = NOPASSWD: /sbin/service,/usr/bin/systemctl,/usr/sbin/service

Решение

Проблема, скорее всего, связана с тем, что сценарии возможного не выполняются с увеличенными привилегиями из-за исполняемого пользователя. Наиболее распространенной причиной проблемы является неправильное использование sudo в контексте NRPE. Давайте применим несколько менее очевидных, но необходимых шагов:

  1. Перенос sudo в конфигурацию NRPE:
    Добавьте sudo напрямую в конфигурацию команды в nrpe.conf. Например:

    command[status]=sudo /lib64/nagios/plugins/status.sh
    command[restart]=sudo /lib64/nagios/plugins/restart.sh

    Такой подход устраняет необходимость вызывать sudo внутри скрипта и позволит команде непосредственно использовать права доступа.

  2. Проверка конфигурации sudoers:
    Убедитесь, что запись в sudoers корректна и действительно разрешает выполнение необходимых команд без запроса пароля для пользователя nrpe. Сделайте это с помощью:

    visudo
  3. Правила requiretty:
    Опция !requiretty отключает необходимость наличия tty для запуска команд с sudo. Убедитесь, что эта опция правильно установлена, чтобы скрипты могли выполняться через NRPE.

  4. Диагностика и логи:
    Используйте системные логи для диагностики, проверяя записи NRPE в /var/log/messages или /var/log/secure, которые могут дать представление о попытках выполнения команд и связанных с ними проблемах.

Заключение

Решение проблем с правами доступа требует аккуратной настройки NRPE и sudoers, чтобы убедиться, что сценарии могут выполняться с нужными правами. Перемещение вызова sudo из скрипта в конфигурационный файл NRPE устраняет потенциальные конфликты и упрощает управление правами. Таким образом, вы можете эффективно использовать NRPE для управления службами удаленно.

Оцените материал
Добавить комментарий

Капча загружается...