Solaris 10에서 setuid 프로그램을 실행하는 방법은 무엇입니까?

Solaris 10에서 setuid 프로그램을 실행하는 방법은 무엇입니까?

저는 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

관련 정보