0

我正在使用 Ubuntu 16.10。

我跟着一本书,做这样的事情:

#include <stdio.h>

int main() {
    printf("Real UID:\t%d\n", getuid());
    printf("Effective UID:\t%d\n", geteuid());
}

为了在不使用 sudo 命令的情况下将该文件作为 sudo 运行,在使用 gcc 编译后,我将所有者和组更改为 root。

$ gcc -o test test.c
$ sudo chown root:root ./test
$ chmod u+s ./test
$ ls -l
-rwsr-xr-x 1 root root 8512 Mar 9 test

现在,这就是我执行文件时得到的。我的 UID 是 1000。

$ ./test
Real UID:        1000
Effective UID:   1000

我正在阅读的书说结果应该是这样的:

$ ./test
Real UID:        1000
Effective UID:   0

root 的 UID 是 0,对吧?这是否意味着我正在使用我自己的用户权限运行 root 拥有的-rwsr-xr-x文件?我不明白。

4

1 回答 1

1

你的书是不是有点老?似乎现代 *nix 变体广泛忽略了可执行文件上的粘性位:

[...] Linux 内核会忽略文件上的粘性位。[...] 在目录上设置粘性位时,该目录中的文件只能由 root 或目录所有者或文件所有者取消链接或重命名。 [4]

https://en.wikipedia.org/wiki/Sticky_bit

于 2017-03-09T15:20:50.857 回答