Como executar um programa setuid no Solaris 10?

1

Eu tenho um sistema Solaris 10:

# uname -a
SunOS edddev03 5.10 Generic_150400-04 sun4v sparc SUNW,SPARC-Enterprise-T5120

Eu escrevi um programa imprimindo o uid:

# cat getuid.c
int main (void) {
  printf ("%d\n", getuid());
}

Funciona como esperado:

# gcc -o /bin/getuid getuid.c
# getuid
0
# su nobody -c /bin/getuid
60001

Agora eu mudei para um programa setuid:

# chmod 4555 /bin/getuid
# ls -la /bin/getuid
-r-sr-xr-x   1 root     root        6424 May 18 13:04 /bin/getuid

Mas não está funcionando como esperado:

# su nobody -c /bin/getuid
60001

Eu esperava um 0. Por que não está funcionando?

    
por ceving 18.05.2015 / 13:28

1 resposta

1

Eu encontrei este Q ainda sem resposta; G-Man e Bratchley apontaram o erro; getuid() retorna o "ID do usuário real do processo de chamada", enquanto geteuid() retorna o "ID do usuário efetivo do processo de chamada".

Você pode ver a diferença com este programa:

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main (void) {
  printf ("getuid=%d, geteuid=%d\n", getuid(), geteuid());
  setuid(geteuid());
  printf ("getuid=%d, geteuid=%d\n", getuid(), geteuid());
}

$ gcc -o getuid getuid.c
$ sudo chown root getuid
$ sudo chmod u+s getuid
$ su nobody -c ./getuid
getuid=60001, geteuid=0
getuid=0, geteuid=0
    
por 13.06.2016 / 18:31