SO_BINDTODEVICE
requer CAP_NET_RAW
. check_dhcp
também deseja ligar à porta 68, que requer CAP_NET_BIND_SERVICE
. Veja as capacidades (7) para descrições detalhadas das capacidades disponíveis.
Esses dois recursos podem ser concedidos ao executável com setcap
, como isso:
setcap 'cap_net_raw,cap_net_bind_service=+ep' /usr/lib/nagios/plugins/check_dhcp
Isso deve permitir que qualquer usuário execute check_dhcp
com êxito, sem possivelmente (se puder explorar check_dhcp
), fornecendo privilégios completos de root.
O plug-in ainda emitirá um aviso (um pouco estupidamente):
$ ./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.
Para resolver isso, você poderia:
- Ignore-o. O Nagios ainda vai olhar para o status de saída para obter o estado do plugin.
- Remova a chamada para
np_warn_if_not_root
e recompilar. - Use o fork monitoring-plugins.org dos plug-ins do Nagios, que tem fixed this issue . debmon.org tem pacotes Debian disponíveis.
- Modifique a definição do comando Nagios para executar o plug-in através do grep, removendo o aviso. É claro que agora você deve tomar cuidado para não alterar o código de saída do plug-in, então talvez você queira incluir isso em um script:
#!/bin/bash
/usr/lib/nagios3/plugins/check_dhcp | egrep -v 'run as root|^To |chmod u\+s'
exit "${PIPESTATUS[0]}"