我知道在脚本上启用 setuid 存在安全问题,因此默认情况下处于非活动状态,但希望它适用于可执行文件。我创建了一个可执行文件,它按照这篇文章中描述的说明显示 uid 作为输出:Allow setuid on shell scripts
但它在运行之前和之后返回相同的 uid (1000) sudo chmod +s ./setuid-test
。我认为这意味着 setuid 对我的可执行文件没有任何影响,为什么以及如何解决?
源代码:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char** argv) {
printf("%d", geteuid());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
构建和运行
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
Run Code Online (Sandbox Code Playgroud)
运行时ls -la
,这就是我得到的:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
Run Code Online (Sandbox Code Playgroud)