Answers:
在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)的命令,尤其是su
and sudo
。
请注意,此答案假设使用chroot,而不是像监狱一样具有更多限制的内容。
chmod 4755 /bin/ping
。
如已经指出的,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
应该现在工作。