ping在chroot中不起作用


2

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

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

目前,我正在使用CentO,但是理想情况下,必须有一个在所有chroot环境中都可以使用的解决方案。


尝试时会发生什么?
吉尔斯

我得到:“ ping:icmp打开套接字:不允许操作”
kamal

Answers:


4

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

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

请注意,chroot中可能还有其他需要设置为setuid(或setgid)的命令,尤其是suand sudo

请注意,此答案假设使用chroot,而不是像监狱一样具有更多限制的内容。


或作为八进制,chmod 4755 /bin/ping
geerlingguy

3

如已经指出的,ping需要绑定原始IP套接字的权限。传统上setuid已被用来允许普通用户使用它。但是,使用功能(POSIX 1003.1e,功能(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应该现在工作。


这应该是公认的答案。感谢你们对我的帮助!
umeboshi

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.