Setuid и setgid не работают

У меня проблема с setuid и setgid. Я написал этот код C:

int main() {
    setuid(0);
    setgid(0);
    system("/path/to/script.sh");
    return 0;
}

Скомпилировал его с помощью gcc:

gcc test.c -o test

Тогда я использовал chmod +s, В script.sh есть только id команда. Вот разрешения для test исполняемым:

-rwxr-sr-x  1 root   root   8464 mag 15 20:14 test

Когда я выполняю программу, я получаю следующий вывод:

uid=1000(user) gid=1000(user) gruppi=1000(user)

Почему я не получаю вывод id выполняется пользователем root?

2 ответа

Вы не можете использовать setuid и setgid для запуска сценария оболочки от имени другого пользователя. Это функция безопасности, и вы можете узнать больше о ней в самом полном ответе на этот пост UL.

aquote со страницы MAN для setuid()

Таким образом, программа set-user-ID-root, желающая временно отбросить привилегии root, принять личность непривилегированного пользователя и затем восстановить привилегии root, не может использовать setuid(). Вы можете сделать это с помощью seteuid(2).

В случае успеха возвращается ноль. В случае ошибки возвращается -1 и значение errno устанавливается соответствующим образом.

   Note:  there  are cases where setuid() can fail even when the caller is
   UID 0; it is a grave security error to  omit  checking  for  a  failure
   return from setuid().

среди прочего, это означает, что пользователь не может стать root с помощью этой команды.

Если опубликованный код проверил возвращаемое значение из этих команд, он увидел бы, что команды завершились неудачно.

Другие вопросы по тегам