“/usr/bin/ping”在默认的 Fedora bash 配色方案中显示为黄底红字——这是什么意思?

“/usr/bin/ping”在默认的 Fedora bash 配色方案中显示为黄底红字——这是什么意思?

列出目录时/usr/bin,我们会看到它 ping 显示为红底黄字:

ping 显示黄底红字

该文件没有特殊功能:

$ file /usr/bin/ping
/usr/bin/ping: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for
GNU/Linux 2.6.32, BuildID[sha1]=2508ea2a85b70c68967b3e6345541430f5317d5f,
stripped

$ stat /usr/bin/ping
   File: '/usr/bin/ping'
   Size: 62096           Blocks: 136        IO Block: 4096   regular file
Device: 802h/2050d      Inode: 4457229     Links: 1
Access: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Context: system_u:object_r:ping_exec_t:s0
Access: 2016-11-01 10:02:57.332925719 +0100
Modify: 2016-06-22 14:01:14.000000000 +0200
Change: 2016-07-10 23:41:59.623796126 +0200
Birth: -

根据终端中不同的颜色代表什么含义?,我们可以在其中找到列出颜色解释的脚本,“yellow-on-red”表示“ca”:

Fedora 默认 bash 配色方案中看到的颜色

“ca”是什么意思?也许这意味着该文件是从其他地方硬链接的(/usr/bin/ping并且/usr/ping是同一文件)

PS 看的时候出现这个问题解释脏牛,其中pingUbuntu 上的命令显示为 setuid root,这听起来很奇怪:

setuid 根 ping

答案1

这表明它ping具有额外的功能:

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

甚至(在 Fedora 上最多 30 个):

$ getcap /usr/bin/ping
/usr/bin/ping = cap_net_admin,cap_net_raw+ep

这允许ping打开原始套接字(并发送和接收 ICMP 数据包),而无需运行为root.setcap(8)capabilities(7)提供更多详细信息。

历史上,ping安装了 setuid,以便它可以作为原始套接字运行root并能够使用原始套接字;一旦功能变得可用,许多发行版就会转而使用这些功能,因为它们对权限提供的更细粒度的控制似乎更可取。但在 Ubuntu 中,安装程序显然有问题,所以ping仍然安装了setuid root(功能代码在相关的维护者脚本,来自 Debian,其中ping配置使用能力如果可能的话)。

联机ping帮助页描述其要求因此:

ping需要CAP_NET_RAW执行能力 1) 如果程序用于非回显查询(请参阅-N选项),或 2) 如果内核不支持非原始 ICMP 套接字,或 3) 如果不允许用户创建 ICMP 回显插座。该程序可用作 set-uid root。

内核 2.6.39 及更高版本提供另一种允许程序发送和接收 ICMP 回显消息的机制:net.ipv4.ping_group_range。这在 Fedora 31 及更高版本中使用,允许在ping没有额外功能的情况下工作(特别是在无根容器内);看如果没有 setuid 和功能,Ping 在 Fedora 上如何工作?了解详情。

相关内容