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 '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仍会查看退出状态以获取插件状态. #!/bin/bash /usr/lib/nagios3/plugins/check_dhcp | egrep -v 'run as root|^To |chmod u+s' exit "${PIPESTATUS[0]}" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |