SNMP, похоже, не регистрирует директиву конфигурации проходного режима.

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

SNMP, похоже, не регистрирует директиву конфигурации pass-through, вот мой файл конфигурации:

snmpd.conf

###########################################################################
#
# snmpd.conf Пример файла конфигурации для настройки агента Net-SNMP ('snmpd') Смотрите man-страницу snmpd.conf(5) для получения дополнительных сведений
#
###########################################################################
# РАЗДЕЛ: Настройка системной информации
#

# syslocation: [обычно физическое] местоположение системы.
#   Обратите внимание, что установка этого значения здесь означает, что при попытке
#   выполнить операцию snmp SET для переменной sysLocation.0 агент
#   вернет код ошибки "notWritable". То есть, включение
#   этого токена в файл snmpd.conf отключит запись в
#   переменную.
#   аргументы:  location_string
sysLocation    Sitting on the Dock of the Bay
sysContact     Me <[email protected]>

# sysservices: Подходящее значение для объекта sysServices.
#   аргументы:  sysservices_number
sysServices    72

###########################################################################
# РАЗДЕЛ: Режим работы агента
#
#   Этот раздел определяет, как агент будет работать, когда он
#   запущен.

# master: Должен ли агент работать как главный агент или нет.
#   В настоящее время единственный поддерживаемый тип главного агента для этого токена
#   - "agentx".
#
#   аргументы: (on|yes|agentx|all|off|no)

master  agentx

# agentaddress: IP-адрес и номер порта, на которых агент будет прослушивать.
#   По умолчанию агент прослушивает любой и весь трафик с любого
#   интерфейса на стандартном SNMP порту (161). Это позволяет вам
#   указать, на каком адресе, интерфейсе, типе трансорта и портах вы
#   хотите, чтобы агент прослушивал. Множественные определения этого токена
#   объединяются (с помощью ':'s).
#   аргументы: [transport:]port[@interface/address],...

agentaddress  161

###########################################################################
# РАЗДЕЛ: Настройка контроля доступа
#
#   Этот раздел определяет, кто имеет право общаться с вашим
#   запущенным агентом snmp.

# Views
#   аргументы viewname included [oid]

#  только группы system + hrSystem
view   systemonly  included   .1.3.6.1.2.1.1
view   systemonly  included   .1.3.6.1.2.1.25.1

# rocommunity: имя сообщества SNMPv1/SNMPv2c только для чтения
#   аргументы:  community [default|hostname|network/bits] [oid | -V view]

# Доступ только для чтения для всех к представлению systemonly
rocommunity public
#rocommunity  public default -V systemonly
#rocommunity6 public default -V systemonly

#rocommunity public localhost
#view all included .1.3.6.1.4.1

#extend .1.3.6.1.4.1.9999.1 checkcommand /bin/sh /home/pi/snmp/snmp-cpu-temp

# SNMPv3 не использует сообщества, а пользователей с (опционально) строкой
# аутентификации и шифрования. Этот пользователь должен быть создан
# с тем, что они могут видеть с помощью строк rouser/rwuser в этом файле.
#
# createUser username (MD5|SHA|SHA-512|SHA-384|SHA-256|SHA-224) authpassphrase [DES|AES] [privpassphrase]
# например.
# createuser authPrivUser SHA-512 myauthphrase AES myprivphrase
#
# Это должно быть помещено в /var/lib/snmp/snmpd.conf
#
# rouser: имя пользователя SNMPv3 только для чтения
#    аргументы: username [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]
#rouser authPrivUser authpriv -V systemonly
#rouser authOnlyUser

#
# Мониторинг процессов
#
# По крайней мере один процесс 'mountd'
proc mountd
# Не более 4 процессов 'ntalkd' - 0 допустимо
proc ntalkd 4
# По крайней мере один процесс 'sendmail', но не более 10
proc sendmail 10 1

# Пройдите по UCD-SNMP-MIB::prTable, чтобы увидеть полученный вывод
# Обратите внимание, что эта таблица будет пустой, если в файле snmpd.conf нет записей "proc"

#
# Мониторинг диска
#
# Требуется 10 МБ на корневом диске, 5% свободного места на /var, 10% свободного места на всех других дисках
disk / 10000
disk /var 5%
includeAllDisks 10%

# Пройдите по UCD-SNMP-MIB::dskTable, чтобы увидеть полученный вывод
# Обратите внимание, что эта таблица будет пустой, если в файле snmpd.conf нет записей "disk"

#
# Нагрузка системы
#
# Неприемлемый средний уровень нагрузки за 1, 5 и 15 минут
load 12 10 5

# Пройдите по UCD-SNMP-MIB::laTable, чтобы увидеть полученный вывод
# Обратите внимание, что эта таблица *будет* заполнена, даже без записи "load" в файле snmpd.conf

###############################################################################
#
# АКТИВНЫЙ МОНИТОРИНГ
#

# отправка SNMPv1 ловушек
trapsink localhost public
# отправка SNMPv2c ловушек
#trap2sink localhost public
# отправка SNMPv2c INFORM'ов
#informsink localhost public

# Обратите внимание, что вы обычно хотите только *одну* из этих трех строк
# Раскомментирование двух (или всех трех) приведет к множественным копиям каждого уведомления.

#
# Событийный MIB - автоматическая генерация предупреждений
#
# Не забудьте активировать строки 'createUser' выше
iquerySecName internalUser
rouser internalUser
# генерировать ловушки при условиях ошибки UCD
#defaultMonitors yes
# генерировать ловушки при linkUp/Down
linkUpDownNotifications yes

###############################################################################
#
# РАСШИРЕНИЕ АГЕНТА
#

#
# Произвольные команды расширения
#
extend test1 /bin/echo Hello, world!
extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35

pass .1.3.6.1.2.1.25.1.8 /bin/sh /home/pi/snmp/snmp-cpu-temp

# включить все файлы *.conf в директории
includeDir /etc/snmp/snmpd.conf.d

/etc/snmp/snmpd.conf.d пуст, я перезапустил сервис snmpd.

$ snmpget -v 2c localhost -c public .1.3.6.1.2.1.25.1.8
iso.3.6.1.2.1.25.1.8 = Нет такого экземпляра, который в настоящее время существует по этому OID

$ sh /home/pi/snmp/snmp-cpu-temp -g .1.3.6.1.2.1.25.1.8
.1.3.6.1.2.1.25.1.8
gauge
62322

Есть ли у этой системы SELinux или AppArmor? Если да, то могут быть правила, препятствующие выполнению демонов, таких как snmpd, скриптов в домашних директориях пользователей.

Попробуйте переместить ваш скрипт в /usr/local/bin/snmp-cpu-temp и пометить его как исполняемый:

chmod a+x /usr/local/bin/snmp-cpu-temp

Затем измените вашу строку pass в snmpd.conf на:

pass .1.3.6.1.2.1.25.1.8 /usr/local/bin/snmp-cpu-temp

Ответ или решение

Разбор проблемы с SNMP: Настройки и проблемы с директивой pass-through в snmpd.conf

Введение

В процессе настройки SNMP (Simple Network Management Protocol) на вашем сервере возникла проблема с регистрацией директивы pass-through в конфигурационном файле snmpd.conf. Это может привести к отсутствию данных при запросах к определенным OID (Object Identifier). В этом ответе мы рассмотрим возможные причины этой проблемы и предложим шаги для её решения.


Контекст проблемы

На основании вашего описания, вы используете следующую директиву в вашем файле snmpd.conf:

pass .1.3.6.1.2.1.25.1.8 /bin/sh /home/pi/snmp/snmp-cpu-temp

Вы также указали, что скрипт в /home/pi/snmp/snmp-cpu-temp возвращает данные при его запуске из командной строки, но SNMP-запрос с использованием snmpget возвращает ошибку:

No Such Instance currently exists at this OID

Возможные причины проблемы

  1. Права доступа и местоположение скрипта:

    • Если скрипт находится в директории пользователя, вполне вероятно, что snmpd не имеет необходимых прав для его выполнения. На системах с SELinux или AppArmor могут быть установлены правила, ограничивающие выполнение скриптов из пользовательских директорий.
  2. Неправильный OID:

    • Убедитесь, что указанный OID .1.3.6.1.2.1.25.1.8 корректен и соответствует OID, к которому вы хотите получить доступ. Возможно, стоит проверить в MIB-файлах, что данный OID действительно зарегистрирован и ожидает вызов.
  3. Обновление конфигурации:

    • Проверьте, правильно ли перезапущен snmpd. Если конфигурация изменилась, необходимо перезапустить службу, чтобы изменения вступили в силу.

Рекомендации по решению проблемы

  1. Перемещение скрипта:

    • Переместите ваш скрипт в директорию с более широкими правами доступа, например, в /usr/local/bin. Убедитесь, что вы присвоили ему права на выполнение:
    mv /home/pi/snmp/snmp-cpu-temp /usr/local/bin/
    chmod a+x /usr/local/bin/snmp-cpu-temp

    Измените вашу директиву pass следующим образом:

    pass .1.3.6.1.2.1.25.1.8 /usr/local/bin/snmp-cpu-temp
  2. Проверка конфигурации SELinux/AppArmor:

    • Убедитесь, что SELinux или AppArmor не блокируют выполнение вашего скрипта. Возможно, потребуется на время отключить SELinux для тестирования:
    setenforce 0  # Временно отключить SELinux

    После чего попробуйте повторить запрос:

    snmpget -v 2c localhost -c public .1.3.6.1.2.1.25.1.8
  3. Логи и отладка:

    • Проверьте логи snmpd, обычно они находятся в /var/log/snmpd.log или /var/log/syslog, чтобы выяснить, почему не обрабатывается директива pass.
  4. Тестирование:

    • После внесения всех изменений, протестируйте настройки с помощью:
    snmpget -v 2c localhost -c public .1.3.6.1.2.1.25.1.8

    Убедитесь, что теперь вы получаете ожидаемый результат.


Заключение

Проблема с регистрацией директивы pass-through в snmpd.conf может быть вызвана различными факторами, такими как права доступа, местоположение скрипта или конфигурационные ошибки. Следуя приведенным рекомендациям, вы сможете устранить возникшую проблему и настроить SNMP для корректной работы с вашими пользовательскими скриптами. Если проблема сохраняется, возможно, стоит обратиться к документации по snmpd или сообществу для дальнейшей диагностики.

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

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