Разрешение nagios плагин check_dhcp для работы без корня setuid

Nagios имеет плагин, check_dhcp, это делает точно, что Вы думали бы. Широко предлагается установить его корень setuid, потому что это использует SO_BINDTODEVICE, то, которые обычно только базируются, может сделать. Конечно, подобная вещь может быть выполнена с sudo также, но это остается этим check_dhcp выполнился бы со всеми полномочиями пользователя root, когда этому не нужны они.

К сожалению, check_dhcp кажется, скорее глупо записан для этого использования и не предпринимает попытки отбросить полномочия пользователя root после выполнения, что это должно сделать. Это приводит по крайней мере к одной известной проблеме безопасности, но просто обычно является плохой практикой, и я хотел бы не сделать это.

Таким образом, я задаюсь вопросом, там некоторый способ, которым я могу включить check_dhcp сделать его необходимый сетевой интерфейс frobbing, не предоставляя ему напрямую все полномочия пользователя root? Возможно, что-то с возможностями, SELinux, AppArmor, или подобный? Поиск решения Linux - Ubuntu 14.04 в частности.

3
задан 23 July 2014 в 18:58
2 ответа

SO_BINDTODEVICE требует CAP_NET_RAW. check_dhcp также хочет привязать к порту 68, для чего требуется CAP_NET_BIND_SERVICE. Смотрите возможности(7) для получения подробного описания доступных возможностей.

Эти две возможности могут быть предоставлены исполняемому файлу с помощью setcap, как например:

setcap 'cap_net_raw,cap_net_bind_service=+ep' /usr/lib/nagios/plugins/check_dhcp

Это должно позволить любому пользователю успешно запустить check_dhcp, без возможности (если он может использовать check_dhcp) дать ему полные привилегии корневой системы.

Плагин все равно (довольно глупо) выдаст предупреждение:

$ ./check_dhcp 
Warning: This plugin must be either run as root or setuid root.
To run as root, you can use a tool like sudo.
To set the setuid permissions, use the command:
    chmod u+s yourpluginfile
OK: Received 2 DHCPOFFER(s), max lease time = 259200 sec.

Для решения этой проблемы можно:

  • Проигнорировать. Nagios всё ещё будет смотреть на статус выхода, чтобы получить состояние плагина.
  • Удалите вызов на np_warn_if_not_root и перекомпилируйте.
  • Используйте развилку monitoring-plugins.org плагинов Nagios, которая исправила эту проблему . В debmon.org имеются пакеты Debian.
  • Измените определение команды Nagios, чтобы запустить плагин через grep, удалив предупреждение. Конечно, теперь вы должны позаботиться о том, чтобы не изменять код выхода плагина, так что, возможно, вы захотите обернуть это в сценарий:
#!/bin/bash
/usr/lib/nagios3/plugins/check_dhcp | egrep -v 'run as root|^To |chmod u\+s'
exit "${PIPESTATUS[0]}"
9
ответ дан 3 December 2019 в 04:52

В большинстве стандартных (написанных на С) плагинов есть альтернативные (не на С) реализации на Nagios Exchange.

Например, есть perl check_dhcp, который на самом деле является просто обёрткой вокруг dhcping. Конечно, двоичный файл dhcping требует, чтобы он тоже выполнялся через root/sudo/setuid-root, но, возможно, этот двоичный файл менее опасен для вашей безопасности, чем плагин stock check_dhcp

.
1
ответ дан 3 December 2019 в 04:52

Теги

Похожие вопросы