2014-09-26 3 views
1

Добрый вечер, Я пытаюсь написать двоичный код suid-root в C, и я наткнулся на следующую проблему: Я выполняю его как непривилегированный пользователь user1 и я могу использовать setuid/seteuid для изменения любого идентификатора пользователя, который я хочу. Проблема в том, что я не могу этого сделать с эффективными идентификаторами групп. Часть кода:setegid() в двоичном коде suid-root в C

if (setegid(VariableID) == -1) { 
    perror("setegid failed"); 
    exit(1); 
} 

и это возвращает:

setegid failed: Operation not permitted 

Пожалуйста, обратите внимание, что я могу успешно изменить идентификатор группы между корнем (0), и пользователь, который выполняет двоичный, но я не могу изменить другим группам. Не должно ли это быть возможным, поскольку двоичный файл является suid-root, как UID/EUID?

+4

сначала сменить группу, затем пользователь –

+0

Не могли бы вы предоставить дополнительную информацию о том, почему это происходит? – zakkak

+0

Насколько я понимаю, если вы сначала меняете пользователя, у этого пользователя может не быть разрешения на изменение идентификатора группы, а если вы root, вы можете это сделать. – DaKnOb

ответ

0

Ответ (спасибо Ingo Leonhardt) заключается в том, что вам необходимо изменить идентификатор группы до идентификатора пользователя. Теперь это имеет смысл. :)