1

У меня проблема с 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 ответа2

1

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

0

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 помощью этой команды.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .