「/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 上如何運作?了解詳情。

相關內容