Linux进程功能显示错误(?)在Kali Linux上与例如Debian/Ubuntu

bgibtngc  于 2023-06-21  发布在  Linux
关注(0)|答案(1)|浏览(151)

在我的Kali Linux虚拟机(2023.2,64位,amd64)上,与Ubuntu或Debian虚拟机相比,我体验到了为进程显示的功能的差异-而不是行为。以我目前的理解,我看不出是什么原因。

示例

我尝试检查一个进程的功能,这里是ping命令的进程。为此,我首先在Debian 11 VM上执行一组命令,然后在Kali VM上执行相同的命令。

在Debian 11虚拟机上

$ ll $(which ping)
-rwxr-xr-x 1 root root 77432 Feb  2  2021 /usr/bin/ping

$ getcap $(which ping)
/usr/bin/ping cap_net_raw=ep

$ ping -c 100 8.8.8.8 > /dev/null &
[1] 358812

$ PINGPID=$!

$ getpcaps $PINGPID
358812: cap_net_raw=p

$ grep Cap /proc/$PINGPID/status
CapInh: 0000000000000000
CapPrm: 0000000000002000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

$ capsh --decode=0000000000002000
0x0000000000002000=cap_net_raw

正如我们所看到的,在我们的Debian VM上,

  • getpcaps显示流程的已分配/可用功能
  • CapPrm/proc/$PINGPID/status输出也显示了预期输出

Kali虚拟机上

$ ll $(which ping)
-rwxr-xr-x 1 root root 90568 Nov 27  2022 /usr/bin/ping

$ getcap $(which ping)
/usr/bin/ping cap_net_raw=ep

$ ping -c 100 8.8.8.8 > /dev/null &
[1] 1479508

$ PINGPID=$!

$ getpcaps $PINGPID
1479508: =

┌──(kali㉿kali-max-20)-[~]
└─$ grep Cap /proc/$PINGPID/status
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 000001ffffffffff
CapAmb: 0000000000000000

正如我们所见

  • getpcaps未显示进程的已分配/可用功能
  • CapPrm不包含预期的输出

提问

造成这种产量差异的原因是什么?据我所知,在行为上没有区别…
谢谢你的任何提示。

fhg3lkii

fhg3lkii1#

source code of iputils/ping/ping.c中,就在调用main_loop之前,我们可以看到对dropcapabilities()的调用。

drop_capabilities();

    hold = main_loop(rts, &ping4_func_set, sock, packet, packlen);

这个调用已经在iputils源代码的最新版本中引入。由于这一变化,旧版本的ping(例如在我的Debian和Ubuntu虚拟机上)显示了不同的行为wrt。与我的Kali虚拟机上的ping相比,它的性能更好。
由于@yvs2014的评论,我终于能够理解这不是不同发行版的问题,而是ping版本的问题。再次感谢!

相关问题