Ping 是一个由 root 拥有的程序,用户 id 位被设置。
$ ls -l `which ping`
-rwsr-xr-x 1 root root 35752 Nov 4 2011 /bin/ping
Run Code Online (Sandbox Code Playgroud)
据我了解,如果用户运行 ping 进程,那么有效用户 ID 将从真实用户 ID(即启动该进程的人的用户 ID)更改为用户 ID root。但是,当我尝试这样做并查看 ps 的输出以查看 ping 进程是否以 root 用户身份运行时,我仍然显示真实的用户 ID。
ps -e -o user,ruser,euser,cmd,args | grep ping
sashan sashan sashan ping -i 10 -c 1000 www.goog ping -i 10 -c 1000 www.google.com
Run Code Online (Sandbox Code Playgroud) 据我所知,ping需要创建一个原始套接字(需要 root 访问权限或cap_net_raw功能)。
根据我的理解,最近几年的趋势是删除setuid二进制文件并用功能替换它们。
但是,当我查看pingFedora 32上的二进制文件时,它看起来没有任何内容:
$ ls -la $(which ping)
-rwxr-xr-x. 1 root root 82960 May 18 10:26 /usr/bin/ping
$ sudo getcap -v $(which ping)
/usr/bin/ping
$
Run Code Online (Sandbox Code Playgroud)
ping 是否需要在 Fedora 上打开原始套接字?还是有另一种方法可以授予它打开原始套接字的权限?