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?