权限Ping一个接口

我的服务器正在运行CentOS 6.我有一个Sprint宽带设备连接为ppp0。 这个连接有一个需要重新启动的倾向,所以我试图用Nagios来监视它(这已经被用于我的networking的其他监视)。 我写了一个nagios脚本,试图通过这个命令来ping通这个接口:

enter ping -c 1 -I ppp0 google.com | grep ttl 

以root用户身份正常运行,并给我一个ping回复的响应,或者如果连接已经死机,就不会有任何回应。 但是,如果我运行与用户“nagios”相同的命令,我得到以下错误:

 Warning: cannot bind to specified iface, falling back: Operation not permitted 

ping回落到我的eth0接口进行ping。

看来,界面的权限不会允许nagios用户使用它。 我不确定要更改什么来允许此用户通过此界面ping通。 有什么build议么? 谢谢

由于ping需要写入原始数据包,因此需要root访问权限。 通常情况下,ping将会设置setuid位来完成此操作。 如果你检查ping的权限,例如: stat -c %a $(which ping) 。 大多数系统将返回4775 。 领先的4是setuid位,它说当运行这个程序时,它运行在拥有文件的用户的uid下。 如果这是返回755 。 您可以通过运行chmod u+s $(which ping)来添加setuid位,

在Linux上,首选的方法是给ping (或其他类似的东西)特殊的function。 这避免了通过setuid位执行root权限的缺陷(请参阅下文)。

 setcap cap_net_raw+ep /bin/ping 

来自Archlinux Wiki :

function(POSIX 1003.1e,function(7))提供对超级用户权限的细粒度控制,允许避免使用root用户。 鼓励软件开发人员用系统二进制文件中更强大的setuid属性来replacefunction。 许多软件包使用function,例如iputils提供的ping二进制文件使用CAP_NET_RAW。 这使得ping可以由普通用户运行(与setuid方法一样),同时限制ping中潜在安全漏洞的安全后果。