Phi*_*ost 4 linux permissions nagios suid
Nagios 有一个插件,check_dhcp它完全符合您的想法。它的广泛建议进行安装setuid root的,因为它使用了SO_BINDTODEVICE,通常只有root可以做到。当然也可以完成类似的事情sudo,但它仍然check_dhcp会在不需要 root 权限时以整个 root 权限执行。
不幸的是,check_dhcp似乎为这种用法编写的相当愚蠢,并且在完成需要执行的操作后并没有尝试删除 root 权限。这至少会导致一个已知的安全问题,但通常是不好的做法,我不想这样做。
所以我想知道,有没有什么方法可以使我能够check_dhcp执行其必要的网络接口 frobbing,而无需完全授予它所有 root 权限?也许是一些具有功能的东西,SELinux、AppArmor 或类似的东西?正在寻找 Linux 解决方案——尤其是 Ubuntu 14.04。
Phi*_*ost 10
SO_BINDTODEVICE需要CAP_NET_RAW. check_dhcp还想绑定到端口 68,这需要CAP_NET_BIND_SERVICE. 有关可用功能的详细说明,请参阅功能 (7)。
这两个功能可以通过 授予可执行文件setcap,如下所示:
setcap 'cap_net_raw,cap_net_bind_service=+ep' /usr/lib/nagios/plugins/check_dhcp
Run Code Online (Sandbox Code Playgroud)
这应该允许任何用户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.
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,你可以:
np_warn_if_not_root并重新编译。#!/bin/bash
/usr/lib/nagios3/plugins/check_dhcp | egrep -v 'run as root|^To |chmod u\+s'
exit "${PIPESTATUS[0]}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6111 次 |
| 最近记录: |