Setuid e setgid não funcionam

1

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?

    
por Deci 15.05.2018 / 20:26

2 respostas

1

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.

    
por 15.05.2018 / 21:04
0

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.

    
por 02.06.2018 / 03:50