arping: E​​PERM 当 运行 通过 strace

arping: EPERM when run via strace

我试图弄清楚 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

更有趣的是,如果我只是将可执行文件复制到主目录并且 运行 我会得到同样的错误:

~/tmp$ sudo cp /usr/bin/arping .
~/tmp$ ./arping -I enp2s0f0 192.168.2.1
arping: socket: Operation not permitted

while 运行宁原创作品:

~/tmp$ arping -I enp2s0f0 192.168.2.1
ARPING 192.168.2.1 from 1.2.3.4 enp2s0f0

arping 需要 CAP_NET_RAW 特权(aka 能力)以便能够发送它使用的低级数据包。 (其他 Unix 版本 [或更早的 linux 版本] 可能会将程序安装为 SetUID-to-root。)观察:

$ getcap /usr/bin/arping
/usr/bin/arping = cap_net_raw+ep

允许特权可执行文件 straced(或通过 ptrace(2) 完全 traced/debugged)是一个潜在的安全问题,因此当可执行文件被跟踪时,内核会剥离任何功能或 Set-UID 在其执行期间,除非跟踪进程已经获得特权。换句话说,您可以使用 sudo strace arping ... 解决此问题(如果您已获得授权)。