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)