Linux x86_64Usuários & permissões#105
setuid
Define o UID efetivo (e, se privilegiado, também o real e o saved-set) do processo chamador.
Descrição
Mecanismo central de abandono de privilégios: um processo root tipicamente chama `setuid` para um UID sem privilégio depois de completar tarefas que exigiam ser root, e não pode mais recuperar privilégios depois — a menos que ainda tenha o saved-set-UID disponível.
Header:
unistd.hman 2Atenção
Em programas multi-thread, `setuid` afeta todas as threads do processo (diferente de syscalls que operam por thread), mas historicamente já foi fonte de bugs sutis quando implementado incorretamente — prefira as APIs de biblioteca (glibc) em vez da syscall crua.
Assinatura
int setuid(uid_t uid);Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
| uid | uid_t | Novo UID. |
Registradores (x86_64)
| Registrador | Papel | Argumento |
|---|---|---|
| rax | número da syscall (chamada) / valor de retorno (após SYSCALL) | — |
| rdi | argumento 1 | uiduid_t |
Valor de retorno
0 em sucesso; -1 em erro, com errno definido.
Códigos de erro (errno)
- EAGAIN(11)
- Recurso temporariamente indisponível (tente novamente); também conhecido como EWOULDBLOCK.
- EINVAL(22)
- Argumento inválido.
- EPERM(1)
- Operação não permitida (falta de privilégio).