ID do usuário, programa C

0

então eu tenho este programa C simples:

#include<stdio.h>

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

Eu compilo:

user@user:~/Desktop$ gcc -o uid_demo uid_demo.c

Eu vejo as permissões:

user@user:~/Desktop$ ls -l uid_demo
-rwxr-xr-x 1 user user 8512 set 17 11:30 uid_demo

e execute-o:

user@user:~/Desktop$ ./uid_demo

real uid: 1000

effective uid: 1000

Tudo bem, continuo:

user@user:~/Desktop$ sudo chown root:root uid_demo
user@user:~/Desktop$ ls -l uid_demo
-rwxr-xr-x 1 root root 8512 set 17 11:30 uid_demo

e

user@user:~/Desktop$ sudo chmod u+s uid_demo
user@user:~/Desktop$ ls -l uid_demo
-rwsr-xr-x 1 root root 8512 set 17 11:30 uid_demo

Aí vem o problema:

user@user:~/Desktop$ ./uid_demo

real uid: 1000

effective uid: 1000

Eu esperava ver real uid: 1000 e eficaz uid: 0

O que estou perdendo?

Ah e claro:

user@user:~/Desktop$ id user
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),131(sambashare)
    
por IDK 17.09.2017 / 13:17

2 respostas

0

Este pode ser o resultado de ter definido a opção nosuid mount no sistema de arquivos onde o executável está localizado. Para ilustrar, dado

$ cat uid_demo.c 
#include<stdio.h>
#include <unistd.h>
#include <sys/types.h>

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

então

$ gcc -o uid_demo uid_demo.c 
$ sudo chown root:root uid_demo
$ sudo chmod u+s uid_demo
$ ls -l uid_demo
-rwsrwxr-x 1 root root 8512 Sep 17 07:53 uid_demo
$ 
$ ./uid_demo 

real uid: 1000

effective uid: 0

funciona como esperado; no entanto, quando remontado como nosuid , o suid bit ainda está presente, mas é ignorado:

$ sudo mount -o remount,nosuid /home
$ ls -l uid_demo
-rwsrwxr-x 1 root root 8512 Sep 17 07:53 uid_demo
$ 
$ ./uid_demo 

real uid: 1000

effective uid: 1000

Desde que você saiba o ponto de montagem onde o arquivo está localizado, você poderá ver as opções de montagem do sistema de arquivos, mostrando a saída do comando mount , por exemplo,

$ mount | grep /home
/dev/sda6 on /home type ext4 (rw,nosuid,relatime,data=ordered)
    
por steeldriver 17.09.2017 / 13:58
0

Como você pode ver neste Unix.SE Q & amp; A setuid-bit-parece-não-ter-efeito -on-bash

% bl0ck_qu0te%

Mais detalhes em a resposta vinculada

    
por Yaron 17.09.2017 / 13:42