id de usuário efetivo não está mudando ao configurar uid para root

0

Atualmente estou lendo um livro sobre programação com C, eu cheguei a uma parte onde eu comecei a escrever um programa que irá exibir o uid real e eficaz uid que o arquivo está sendo executado em. Depois de compilar o código com o gcc, eu coloco o comando para ver o uOwner atual e o gOwner ls- l id_demo a saída é esta

-rwxrwxr-x 1 user user 8629 Sep 21 13:04 id_demo

eu, então, executo o programa, é isso que eu recebo:

real uid: 1000 effective uid: 1000 ... até aí tudo bem.

Em seguida, insiro um comando para alterar o proprietário do arquivo sudo chown root:root ./id_demo o ls -l confirma que o proprietário foi alterado para root;

-rwxrwxr-x 1 root root 8629 Sep 21 13:04 id_demo

novamente, a execução do programa mostra real uid e uid como 1000. A última etapa após a qual o uid deve ser 0 é este: sudo chmod u+s ./uid_demo , mas para mim eles permanecem como 1000, onde no livro saída é claramente mostrar ser isso:

real uid: 1000 effective uid: 0

alguma idéia de por que isso está acontecendo?

UPDATE

código-fonte id_demo:

#include <stdio.h>

int main ()
{
    printf("real uid: %d\n", getuid());
    printf("effective uid: %d\n", geteuid());
}

UPDATE 2 Capturas de tela

    
por Evgeny Danilenko 21.09.2013 / 13:29

2 respostas

1

Você alterou o suid apenas para root ( u+s , quando o proprietário é root). Do chmod a+s ./uid_demo .

EDIT depois que o OP postou o código: funciona para mim.

xxxxx@xxxxx:~$ cat > test.c
#include <stdio.h>

int main ()
{
    printf("real uid: %d\n", getuid());
    printf("effective uid: %d\n", geteuid());
}
xxxxx@xxxxx:~$ gcc -o testuid test.c
xxxxx@xxxxx:~$ ./testuid 
real uid: 1000
effective uid: 1000
xxxxx@xxxxx:~$ sudo chown root:root testuid
xxxxx@xxxxx:~$ sudo chmod a+s testuid
xxxxx@xxxxx:~$ ./testuid 
real uid: 1000
effective uid: 0
xxxxx@xxxxx:~$ ls -l testuid
-rwsrwsr-x 1 root root 8625 Sep 21 14:45 testuid

Aqui está o que você pode fazer: (i) fazer tudo do zero, como mostrado acima. Se isso não funcionar, você pode tentar usar strace para ver o que está acontecendo.

    
por January 21.09.2013 / 14:15
1

Nós descobrimos isso. A causa é um diretório inicial ecryptfs -mounted. A saída mount contém a seguinte linha:

/home/evgeny/.Private on /home/evgeny type ecryptfs 

Isso significa que o diretório inicial não é parte do sistema de arquivos raiz (que possui o suid flag necessário), mas seu próprio sistema de arquivos virtual que aparentemente não suporta binários setuid por padrão. Eu reproduzi o problema com sucesso com um usuário de teste que possui um diretório pessoal criptografado.

É possível adicionar o suid flag ao ecryptfs com o seguinte comando:

sudo mount -i -o remount,suid /home/evgeny

Não sei ao certo como isso é seguro nem como alterá-lo permanentemente para que ele sobreviva às reinicializações.

    
por Martin von Wittich 24.09.2013 / 18:02