chương trình sở hữu gốc với bit setuid trên


13

Ping là một chương trình được sở hữu bởi root với tập bit id người dùng.

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

Theo tôi hiểu, nếu người dùng chạy quy trình ping, thì id người dùng hiệu quả sẽ thay đổi từ id người dùng thực (tức là id người dùng của người đã khởi chạy quy trình) sang gốc id người dùng. Tuy nhiên, khi tôi thử điều này và nhìn vào đầu ra của ps để xem liệu quá trình ping có chạy như người dùng root hay không, tôi vẫn nhận được id người dùng thực sự hiển thị.

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

Một câu hỏi liên quan là unix.stackexchange.com/questions/152595 .
JdeBP

Câu trả lời:


20

pingcần root để nó có thể mở một socket trong chế độ thô. Đó thực sự là điều đầu tiên nó làm khi nó khởi động:

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

Đó là điều duy nhất nó cần root, vì vậy, giống như nhiều chương trình, nó ngay lập tức giảm mức đặc quyền trở lại tài khoản người dùng thông thường của bạn:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.