linux – 允许nagios插件check_dhcp在没有setuid root的情况下工作

前端之家收集整理的这篇文章主要介绍了linux – 允许nagios插件check_dhcp在没有setuid root的情况下工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Nagios有一个插件,check_dhcp,完全符合你的想法.这是 widely suggested安装它setuid root,因为它 uses SO_BINDTODEVICE,通常只有root才能做到.当然,使用sudo也可以完成类似的事情,但是当它不需要时,check_dhcp仍将以整个root权限执行.

不幸的是,check_dhcp似乎是相当愚蠢地为此用法编写的,并且在执行它需要做的事情之后不会尝试删除root权限.这导致至少一个已知的@L_301_3@,但只是generally is bad practice,我不想这样做.

所以我想知道,有没有什么方法可以让check_dhcp做必要的网络接口擦除,而不是直接授予它所有的root权限?也许有能力,SELinux,AppArmor或类似的东西?寻找Linux解决方案 – 尤其是Ubuntu 14.04.

解决方法

SO_BINDTODEVICE需要CAP_NET_RAW. check_dhcp也想绑定到端口68,这需要CAP_NET_BIND_SERVICE.有关可用功能的详细说明,请参见 capabilities(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.

解决这个问题,您可以:

>忽略它. Nagios仍会查看退出状态以获取插件状态.
>删除call to np_warn_if_not_root并重新编译.
>使用Nagios插件monitoring-plugins.org分支,其中包含fixed this issue. 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]}"
原文链接:https://www.f2er.com/linux/396006.html

猜你在找的Linux相关文章