setegid () в двоичном файле suid-root в C

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

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

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

setegid failed: Operation not permitted

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


person DaKnOb    schedule 26.09.2014    source источник
comment
сначала смени группу, затем пользователя   -  person Ingo Leonhardt    schedule 26.09.2014
comment
Не могли бы вы предоставить дополнительную информацию о том, почему это происходит?   -  person zakkak    schedule 26.09.2014
comment
Насколько я понимаю, если вы сначала измените пользователя, этот пользователь может не иметь разрешения на изменение идентификатора группы, а если вы root, вы, безусловно, можете это сделать.   -  person DaKnOb    schedule 26.09.2014


Ответы (1)


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

person DaKnOb    schedule 26.09.2014