Как запустить программу setuid на Solaris 10?

У меня есть система Solaris 10:

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

Я написал программу печати uid:

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

Он работает так, как ожидалось:

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

Теперь я изменил его как программу setuid:

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

Но он работает не так, как ожидалось:

 # su nobody -c /bin/getuid 60001 

Я ожидал 0. Почему он не работает?

Я обнаружил, что это Q все еще не ответило; G-Man и Bratchley указали на ошибку; getuid() возвращает «реальный идентификатор пользователя вызывающего процесса», тогда как geteuid() возвращает «эффективный идентификатор пользователя вызывающего процесса».

Вы можете увидеть разницу с этой программой:

 #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