使 /bin/ping 的副本可执行

使 /bin/ping 的副本可执行

我使用一个典型cp /bin/ping p命令将 /usr/bin/ping 文件复制到另一个位置(我的主目录),然后它停止工作,因为缺少权限。确切地说:

Ping:icmp 打开套接字:不允许操作。

我知道这sudo更能解决我的问题,但是我不应以超级用户身份登录
我也知道这(可能)是由于缺少某些权限或功能(事实上,getcap我复制的文件显示它缺少原始 ping 的功能),但不幸的是,如果没有 root 权限,我无法使用它setcap。。或者也许我可以?不知何故?

我该如何解决这个问题并能够使用我的 ping 文件副本./p

答案1

-rwsr-xr-x 1 root root 44168 May  7  2014 /bin/ping

sin 的rws意思是pingsetuid。当你运行它时,它会运行作为它的主人,root。

这就是它拥有 ping 权限的原因。你可以,sudo setcap cap_net_raw=ep ./ping但最终 ICMP 属于“原始套接字”,因此这不是一个小的操作。它将允许另一个应用程序欺骗网络流量。

为了保证其“安全”并能 ping 通,该文件必须由 root 拥有,以阻止其他用户编辑该应用程序。

也许有setcap一天也会让你为可执行文件指定一个哈希签名。

答案2

作为被 Oli 注意到了ping是 setuid --- 调用时以 root 身份运行。

然而,如果你复制它

cp -a /usr/bin/ping ./myping

目标将丢失 setuid 位 --- 您复制了文件,但您只能使用您自己的用户权限创建文件,而您的普通用户无法创建 setuid-root 二进制文件。否则,这将是一个巨大的安全漏洞(现在您可以修改您的副本ping)!

如果要保留 setuid 位,则必须使用 进行复制sudo cp -a。我希望没有其他办法可以解决这个问题。

相关内容