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