有效的UID不会按预期运行

时间:2016-09-08 17:12:56

标签: c linux ubuntu

代码

我编写了以下c程序来打印真实有效的uid:

#include <stdio.h> 
#include <unistd.h>
#include <sys/types.h>

void main() {
    printf("real uid: %d\n", (int) getuid());
    printf("effective uid: %d\n", (int) geteuid());
}

我用gcc编译了它:

jazz@kryptonite beyond_basics $ gcc -o uid_demo.out uid_demo.c

之后我更改了所有者和权限,如下所示:

jazz@kryptonite beyond_basics $ sudo chown root:root uid_demo.out
jazz@kryptonite beyond_basics $ sudo chmod u+s uid_demo.out

结果

现在我得到了:

jazz@kryptonite beyond_basics $ ll uid_demo.out
-rwsr-xr-x 1 root root 8712 Sep  8 18:12 uid_demo.out*

运行程序时,我得到以下结果:

jazz@kryptonite beyond_basics $ ./uid_demo.out
real uid: 1000
effective uid: 1000

问题

我希望有效的uid为0。

任何人都可以解释为什么不是吗?

由于

1 个答案:

答案 0 :(得分:1)

令人惊讶,不是吗?

值得检查文件系统上的挂载选项 - 它可能已使用nosuid选项挂载。要检查选项,请尝试运行mount命令或cat /proc/mounts

(我确定你知道你所在的文件系统,但为了完整性,如果你在那里进行cd,根据你的例子,你可以使用df .