โปรแกรมที่เป็นเจ้าของรูทพร้อม setuid bit on


13

Ping เป็นโปรแกรมที่ root เป็นเจ้าของพร้อมชุด id ผู้ใช้

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

ตามที่ฉันเข้าใจแล้วหากผู้ใช้รันกระบวนการ ping ดังนั้น id ผู้ใช้ที่มีประสิทธิภาพจะเปลี่ยนจาก id ผู้ใช้จริง (เช่น id ผู้ใช้ของบุคคลที่เปิดตัวกระบวนการ) เป็นรูท id ของผู้ใช้ อย่างไรก็ตามเมื่อฉันลองและดูผลลัพธ์ของ ps เพื่อดูว่ากระบวนการ ping ทำงานในฐานะผู้ใช้รูทฉันยังคงได้รับ 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

คำตอบ:


20

pingต้องการรูทเพื่อให้สามารถเปิดซ็อกเก็ตในโหมด raw นั่นเป็นสิ่งแรกที่ทำเมื่อเริ่ม:

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

นั่นเป็นสิ่งเดียวที่จำเป็นสำหรับรูทเช่นหลาย ๆ โปรแกรมมันลดระดับสิทธิ์ของมันกลับไปที่บัญชีผู้ใช้ปกติของคุณทันที:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.