为什么 ping 需要 setuid 权限?

Phi*_*ide 12 setuid ping

我正在通过运行以下命令查看系统上具有 setuid 权限的少数文件:

sudo find / -perm -4000
Run Code Online (Sandbox Code Playgroud)

我注意到它/bin/ping出现在列表中。

谁能解释为什么 ping 需要 setuid 权限?

Ste*_*ris 20

为了ping工作,它需要能够创建一个原始网络套接字。这通常是特权操作。

在现代 Linux 系统上,这可以被授予“能力”

例如在 CentOS 7 上:

$ ls -l /bin/ping
-rwxr-xr-x 1 root root 62088 Nov  7  2016 /bin/ping*

$ getcap /bin/ping
/bin/ping = cap_net_admin,cap_net_raw+p
Run Code Online (Sandbox Code Playgroud)

在 Debian 9.1 (Stretch) 上:

$ getcap /bin/ping
/bin/ping = cap_net_raw+ep
Run Code Online (Sandbox Code Playgroud)

功能是一种较新的方式,可以执行更细粒度的特权升级,而无需授予 setuid 程序授予的整个“root”权限。

如果没有功能,则ping需要 setuid root,以便创建原始网络套接字。