为什么 ping 需要 setuid 权限?

为什么 ping 需要 setuid 权限?

我正在查看系统上的一些具有 setuid 权限的文件,方法是运行:

sudo find / -perm -4000

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

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

答案1

为了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

在 Debian 9.1(延伸)上:

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

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

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

相关内容