Security

具有 setuid 位的 root 擁有的程序

  • October 15, 2012

Ping 是一個由 root 擁有的程序,並設置了使用者 ID 位。

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

據我了解,如果使用者執行 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

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);
}

引用自:https://unix.stackexchange.com/questions/51874