set-user-ID-on-execution选项的可执行文件没有设置有效的uid

时间:2014-03-30 12:20:51

标签: c linux

这是一个显示euid的程序:

$ cat main.c
#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv) {
  printf("euid: %d\n", geteuid());
  return 0;
}
$ gcc main.c -o main
$ ls -l main
-rwxr-xr-x 1 scdmb scdmb 6425 Mar 30 14:07 main

设置set-user-ID-on-execution选项:

$ chmod u+s main
$ ls -l main
-rwsr-xr-x 1 scdmb scdmb 6425 Mar 30 14:07 main

用户scdmb执行的程序显示正确的euid:

$ ./main
euid: 1000
$ id -u scdmb
1000

让我们以其他用户身份执行程序:

$ id -u jakisuser
1001
$ su jakisuser
Password:

现在euid与用户jakisuser的uid相同:

$ ./main
euid: 1001

为什么这个set-user-ID-on-execution选项不会导致第二次有效用户ID不是1000(作为文件所有者)而是1001(作为执行程序的那个)?它不应该与文件main的所有者相同吗?

1 个答案:

答案 0 :(得分:1)

我刚试过这个,你的程序运行得很好。

我怀疑发生的事情是你有apparmor或selinux或其他阻止你的SUID位生效的方式。我建议您禁用它们并重试。