Security
具有 setuid 位的 root 擁有的程序
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); }