我知道在脚本上启用setuid会带来安全问题,因此默认情况下处于禁用状态,但是希望它对可执行文件有效。我创建了一个可执行文件,该文件按照本文中所述的说明将uid显示为输出:在shell脚本上允许setuid
但是它在运行之前和之后都返回相同的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;
}
构建并运行
$ gcc -o setuid-test setuid-test.c
$ ./setuid-test
1000
$ sudo chown nobody ./setuid-test; sudo chmod +s ./setuid-test
$ ./setuid-test
1000
运行时ls -la
,这是我得到的:
me@me:~$ ls -la setuid-test
-rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
me@me:~$ ls -la setuid-test
---- returns -----rwsrwsr-x 1 nobody me 8572 Aug 19 16:39 setuid-test
df .
在目录中找到挂载点,然后mount | grep nameofmountpoint
。那里有一个nosuid
标志吗?