Eu tenho testado a permissão do setuid e estou tendo problemas para fazer isso funcionar.
Digamos que eu esteja fazendo os testes com dois usuários owneruser e otheruser .
Eu escrevi um programa c simples que tudo o que faz é chamar system() para exibir o usuário atual.
testid.c:
int main(void)
{
setresgid(222, 222, 222); // To simplify, this numbers represent just harcoded
setresuid(222, 222, 222); // values for the owneruser id and owneruser group id
system("whoami");
}
O usuário owneruser compila o programa para dois diretórios diferentes e define o bit setuid, um que owneruser possui e o outro para o exemplo para o diretório /tmp , os comandos são parecidos com:
gcc testid.c -o /tmp/testid
gcc testid.c -o /home/owneruser/testid
chmod 4755 /tmp/testid
chmod 4755 /home/owneruser/testid
Agora, quando otheruser executar os programas, em /home/owneruser/testid , obtenho a saída:
owneruser
e em /tmp/testid recebo a saída:
otheruser
O que está causando esse comportamento diferente?