arping:通过strace运行时的EPERM

时间:2017-11-06 13:12:45

标签: linux sockets root privileges

我试图找出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

1 个答案:

答案 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 ...解决此问题(如果您获得授权)。