program yang dimiliki root dengan setuid bit on

13

Ping adalah program yang dimiliki oleh root dengan set bit id pengguna.

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

Seperti yang saya pahami, jika pengguna menjalankan proses ping, maka id pengguna yang efektif akan berubah dari id pengguna sebenarnya (yaitu id pengguna dari orang yang meluncurkan proses) ke root id pengguna. Namun ketika saya mencoba ini dan melihat output ps untuk melihat apakah proses ping berjalan sebagai pengguna root, saya masih mendapatkan id pengguna nyata yang ditampilkan.

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
sashang
sumber
Pertanyaan terkait adalah unix.stackexchange.com/questions/152595 .
JdeBP

Jawaban:

20

pingmembutuhkan root sehingga dapat membuka soket dalam mode mentah. Itu benar-benar hal pertama yang dilakukan ketika dijalankan:

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

Itu satu-satunya hal yang perlu di-root, jadi seperti banyak program, segera turunkan tingkat hak istimewanya kembali ke akun pengguna normal Anda:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
Michael Mrozek
sumber