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

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]}"

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...