У Nagios есть плагин, check_dhcp
, это именно то, что вы думаете. Это широко предложенный установить его setuid root, потому что он использует SO_BINDTODEVICE
, что обычно может делать только root. Конечно, то же самое можно сделать с sudo
также, но остается, что check_dhcp
будет выполняться со всеми привилегиями root, когда они ему не нужны.
К сожалению, check_dhcp
кажется, довольно глупо написано для этого использования и не делает никаких попыток отбросить привилегии root после выполнения того, что ему нужно сделать. Это приводит как минимум к одному известному проблема безопасности, но просто вообще плохая практика и я бы не хотел этого делать.
Мне интересно, могу ли я как-нибудь включить check_dhcp
сделать необходимый фроббинг сетевого интерфейса, не предоставляя ему сразу все привилегии root? Возможно, что-то с возможностями, SELinux, AppArmor или подобное? Ищу решение для Linux - в частности, Ubuntu 14.04.
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
) давая им полные привилегии root.
Плагин все равно будет (довольно глупо) выдавать предупреждение:
$ ./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.
Чтобы решить эту проблему, вы можете:
np_warn_if_not_root
и перекомпилируйте.#!/bin/bash
/usr/lib/nagios3/plugins/check_dhcp | egrep -v 'run as root|^To |chmod u\+s'
exit "${PIPESTATUS[0]}"
Для большинства стандартных (написанных на C) подключаемых модулей существуют альтернативные (не C) реализации на Nagios Exchange.
Например, есть perl check_dhcp это действительно просто обертка вокруг dhcping
. Конечно, двоичный файл dhcping также требует запуска через root / sudo / setuid-root, но, возможно, этот двоичный файл представляет для вас меньшую угрозу безопасности, чем стандартный плагин check_dhcp.