加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-12-14 02:38:35 所属栏目:Linux 来源:网络整理
导读:Nagios有一个插件, check_dhcp ,完全符合你的想法.这是 widely suggested安装它setuid root,因为它 uses SO_BINDTODEVICE ,通常只有root才能做到.当然,使用sudo也可以完成类似的事情,但是当它不需要时,check_dhcp仍将以整个root权限执行. 不幸的是,check_dhc
Nagios有一个插件,check_dhcp,完全符合你的想法.这是 widely suggested安装它setuid root,因为它 uses SO_BINDTODEVICE,通常只有root才能做到.当然,使用sudo也可以完成类似的事情,但是当它不需要时,check_dhcp仍将以整个root权限执行.

不幸的是,check_dhcp似乎是相当愚蠢地为此用法编写的,并且在执行它需要做的事情之后不会尝试删除root权限.这导致至少一个已知的security problem,但只是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]}"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读