我编写了以下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。
任何人都可以解释为什么不是吗?
由于
答案 0 :(得分:1)
令人惊讶,不是吗?
值得检查文件系统上的挂载选项 - 它可能已使用nosuid
选项挂载。要检查选项,请尝试运行mount
命令或cat /proc/mounts
。
(我确定你知道你所在的文件系统,但为了完整性,如果你在那里进行cd,根据你的例子,你可以使用df .
)