Você não pode usar setuid e setgid para executar um script de shell como um usuário diferente. É um recurso de segurança, e você pode ler mais sobre isso na resposta mais abrangente a este Pós UL.
Estou tendo um problema com setuid e setgid. Eu escrevi este código C:
int main() {
setuid(0);
setgid(0);
system("/path/to/script.sh");
return 0;
}
Compilado usando o gcc:
gcc test.c -o test
Então usei chmod +s
. Em script.sh
, há apenas o comando id
. Aqui estão as permissões para o executável test
:
-rwxr-sr-x 1 root root 8464 mag 15 20:14 test
Quando executo o programa, recebo a seguinte saída:
uid=1000(user) gid=1000(user) gruppi=1000(user)
Por que não estou recebendo a saída de id
executada pelo root?
Você não pode usar setuid e setgid para executar um script de shell como um usuário diferente. É um recurso de segurança, e você pode ler mais sobre isso na resposta mais abrangente a este Pós UL.
aquote da página MAN para setuid()
Assim, um programa de raiz set-user-ID que deseje abandonar temporariamente privilégios de root ileges, assumir a identidade de um usuário não privilegiado e, em seguida, recuperar privilégios de root depois não podem usar setuid (). Você pode conseguir isso com seteuid (2).
Em sucesso, zero é retornado. No erro, -1 é retornado e errno é definido adequadamente.
Note: there are cases where setuid() can fail even when the caller is
UID 0; it is a grave security error to omit checking for a failure
return from setuid().
entre outras coisas, isso significa que um usuário não pode se tornar root
através deste comando.
Se o código postado tivesse verificado o valor retornado desses comandos, teria visto que os comandos falharam.