我正在使用 Ubuntu 16.10。我刚刚在 Stack Overflow 上问了这个问题,但我被建议在这个论坛上提问。
我按照一本书的说明做了如下事情:
#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,对吗?这是否意味着我正在运行禁用 RWSR-XR-X该文件由 root 用户所有,我可以用自己的用户权限访问它吗?我不明白。
答案1
您可能将文件放在使用 挂载的分区上nosuid
。您可以键入mount
以查看是否是这种情况。如果是,请将文件移动到其他分区或使用 重新挂载该分区-o suid
(请注意,执行后者可能会有安全隐患)。