ping 在 chroot 中不起作用

ping 在 chroot 中不起作用

如何在 chroot 环境中使用 ping 命令?

$ ping 8.8.8.8
ping: icmp open socket: Operation not permitted

目前我正在使用 CentOs,但理想情况下必须有一个适用于所有 chrooted 环境的解决方案。

答案1

在 Linux 下,ping需要以 root 身份运行(因为它需要绑定原始 IP 套接字;普通用户只能使用 UDP 和 TCP)。它被设计为 setuid root。看起来您在 chroot 中的副本不是 setuid root。修复权限:

chown root:root /bin/ping; chmod u+srwx,go=rx /bin/ping

注意,chroot 中可能有其他命令需要 setuid (或 setgid),特别是susudo

请注意,这个答案假设了一个 chroot,而不是像 jail 那样具有更多限制的东西。

答案2

正如所指出的,ping需要绑定原始 IP 套接字的权限。传统上setuid用于允许普通用户使用它。但是,使用功能(POSIX 1003.1e,capabilities(7)),可以有选择地启用一组最小功能,从而限制潜在漏洞的安全后果。

ping需要功能CAP_NET_RAW。假设二进制文件的路径为/usr/bin/ping,则可以使用以下工具设置功能setcap

setcap cap_net_raw+ep /usr/bin/ping

用于getcap检查结果:

getcap /usr/bin/ping

输出应该是这样的

/usr/bin/ping = cap_net_raw+ep

现在就ping可以工作了。

答案3

只要这些二进制文件存在于您的路径中,在 chroot 中使用 ping 或 gnu 工具链的任何其他部分都不会有问题。如果无法访问这些命令,也许您应该检查您的环境变量。

相关内容