O setuid
pode "funcionar", mas é facilmente detectado e desfeito posteriormente. Eu comparei isso com um programa similarmente intencionado sue
, que uso localmente em uma conta alternativa dickey
(nomeando o programa dickey
).
No meu sistema Debian 7, eu recebo esta saída (a sua é "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)
No meu OpenSUSE 13, recebo algo diferente:
$ ./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)
A razão para a diferença é que o seu programa não define os valores de uid / gid real para corresponder aos valores de uid / gid effective e um programa útil (talvez apparmor) está retirando as permissões indesejadas.
Isso ainda não é uma solução perfeita (eu tenho um item de tarefa para o CentOS 7, onde outro programa útil interfere nos programas setuid). Mas deve apontar na direção certa.
Leitura adicional: