root拥有setuid位的程序


13

Ping是根用户拥有的,设置了用户ID位的程序。

$ ls -l `which ping`
-rwsr-xr-x 1 root root 35752 Nov  4  2011 /bin/ping

据我了解,如果用户运行ping进程,则有效用户ID将从实际用户ID(即启动进程的人的用户ID)更改为用户ID根。但是,当我尝试此操作并查看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

一个相关的问题是unix.stackexchange.com/questions/152595
JdeBP

Answers:


20

ping需要root用户,因此可以在原始模式下打开套接字。从字面上看,这是启动时要做的第一件事:

icmp_sock = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
socket_errno = errno;

那是它唯一需要root用户的东西,因此像许多程序一样,它立即将特权级别回落到您的普通用户帐户:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.