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
с помощью этой команды.
Если опубликованный код проверил возвращаемое значение из этих команд, он увидел бы, что команды завершились неудачно.