如何在 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

相关内容