저는 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을 기대했다. 왜 작동하지 않나요?
답변1
나는 이 질문에 대한 답이 아직 남아 있지 않다고 생각합니다.G-맨그리고블래츨리오류가 발생했습니다. getuid()
"호출 프로세스의 실제 사용자 ID"가 반환되고 geteuid()
"호출 프로세스의 유효 사용자 ID"가 반환됩니다.
이 프로그램에서 차이점을 확인할 수 있습니다.
#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