我正在查看系统上的一些具有 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,才能创建原始网络套接字。