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.