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

853
Deci

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

1

2 ответа на вопрос

1
Mella

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

Сценарий не является setuid или setgid, он вызывается исполняемым файлом. Ignacio Vazquez-Abrams 5 лет назад 0
Ах, я думаю, что все по-прежнему так же, так как все еще вызывается сценарий оболочки, поскольку это будет простой способ обойти защиту от его непосредственного выполнения, но я точно не могу этого сказать. Mella 5 лет назад 0
0
user3629249

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

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

Похожие вопросы