通过接口进行 Ping 的权限

通过接口进行 Ping 的权限

我的服务器运行的是 CentOS 6。我有一个 Sprint 宽带设备作为 ppp0 连接。此连接往往需要重新启动,因此我尝试使用 Nagios 对其进行监控(这已用于对我的网络进行其他监控)。我编写了一个 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。有什么建议吗?谢谢

答案1

由于 ping 需要写入原始数据包,因此它需要 root 访问权限。通常,ping 会设置 setuid 位以实现此目的。例如,如果您使用以下命令检查 ping 的权限:stat -c %a $(which ping)。大多数系统会返回4775。前 4 是 setuid 位,表示运行此程序时,它会在拥有该文件的用户的 uid 下运行。如果返回的是755。您可以通过运行来添加 setuid 位chmod u+s $(which ping)

答案2

在 Linux 上,首选方法是赋予ping(或其他类似的东西)特殊能力。这可以避免通过 setuid 位以 root 权限执行的陷阱(请参阅下文)。

setcap cap_net_raw+ep /bin/ping

来自 Archlinux Wiki

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

相关内容