Setuid
может «работать», но позже легко обнаруживается и отменяется. Я сравнил это с аналогичной программой sue
, которую я использую локально в альтернативной учетной записи dickey
(назвав программу dickey
).
В моей системе Debian 7 я получаю следующий результат (у вас "foo"):
$ ./foo id;dickey id
uid=1001(tom) gid=100(users) euid=1006(dickey) egid=50(staff) groups=100(users),27(sudo)
uid=1006(dickey) gid=100(users) groups=100(users),27(sudo)
В моем OpenSUSE 13 я получаю что-то другое:
$ ./foo id;dickey id
uid=1000(thomas) gid=100(users) groups=100(users),10(wheel)
uid=1003(dickey) gid=100(users) groups=100(users),10(wheel)
Причина разницы в том, что ваша программа не устанавливает свой реальные значения uid / gid должны соответствовать эффективным значениям uid / gid, а полезная программа (возможно, apparmor) удаляет нежелательные разрешения.
Это все еще не идеальное решение (у меня есть задача для CentOS 7, где другая полезная программа вмешивается в программы setuid). Но это должно указать вам правильное направление.
Дополнительная литература: