我试图找出arping是如何工作的,所以我用strace运行它,然后我得到:
socket(PF_PACKET, SOCK_DGRAM, 0) = -1 EPERM (Operation not permitted)
如果我在没有strace的情况下运行它,它将起作用,并且会发送arp数据包。这怎么可能?它如何设法做我的用户没有特权的事情?它也没有设置setuid位:
ls -lrtah `which arping`
-rwxr-xr-x 1 root root 19K Mai 7 2014 /usr/bin/arping
更有趣的是,如果我只是将可执行文件复制到home并运行,我会得到同样的错误:
~/tmp$ sudo cp /usr/bin/arping .
~/tmp$ ./arping -I enp2s0f0 192.168.2.1
arping: socket: Operation not permitted
在运行原创作品时:
~/tmp$ arping -I enp2s0f0 192.168.2.1
ARPING 192.168.2.1 from 1.2.3.4 enp2s0f0
答案 0 :(得分:3)
arping
需要CAP_NET_RAW
权限( aka 功能)才能发送它使用的低级别数据包。 (其他Unix版本[或较旧的Linux版本]可能将程序安装为SetUID-to-root。)观察:
$ getcap /usr/bin/arping
/usr/bin/arping = cap_net_raw+ep
允许特权可执行文件为strace
d(或通过ptrace(2)
跟踪/调试)是一个潜在的安全问题,因此在跟踪可执行文件时,内核会剥离任何功能或Set-UID在执行期间,除非跟踪过程已经具有特权。换句话说,您可以使用sudo strace arping ...
解决此问题(如果您获得授权)。