root-програма з встановленим бітом


13

Ping - це програма, що належить root, з встановленим бітом ідентифікатора користувача.

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

Як я розумію, якщо користувач запускає процес ping, то ефективний ідентифікатор користувача зміниться від реального ідентифікатора користувача (тобто ідентифікатора користувача особи, яка запустила процес), до кореня користувача. Однак, коли я спробую це і поглянув на вихід PS, щоб побачити, чи працює процес ping як користувач root, я все одно показую реальний ідентифікатор користувача.

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потребує root, щоб він міг відкрити розетку в сирому режимі. Це буквально перше, що робиться при запуску:

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

Це єдине, для чого він потребує root, тому, як і для багатьох програм, він негайно повертає рівень привілеїв назад до вашого звичайного облікового запису користувача:

uid = getuid();
if (setuid(uid)) {
    perror("ping: setuid");
    exit(-1);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.