繁体   English   中英

seteuid / geteuid:程序始终具有root id

[英]seteuid/geteuid: Program always has root id

我目前正试图弄清楚SUID位和相应的函数seteuid和geteuid是如何工作的。 所以我写了这个小程序:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>

int main(int argc, char **argv) {

    printf("oldid %d\n", geteuid());
    if(seteuid(0) == -1)
        perror("seteuid faied");
    printf("newid %d\n", geteuid());

    return 0;

}

编译它,将其所有者更改为root,并将文件所有者的s位更改为:

[chris@myhost Test]$ ls -l test
-rwsr-xr-x 1 root root 4830 Apr  5 07:56 test

但是产生的输出看起来像这样:

[chris@myhost Test]$ ./test
oldid 0
newid 0

这是我不明白的事情。 根据我发现的geteuid的第一次调用应该实际返回该程序的调用者的用户ID(即chris - 我的ID将是1000),但程序将root显示为有效用户id。 任何人都可以解释为什么会这样吗?

从我Mac上的geteuid()的手册页(OS X 10.6.7):

真实用户ID是调用该程序的用户的ID。 由于有效用户ID在执行“set-user-ID”模式进程期间为进程提供了额外的权限,因此getuid()用于确定调用进程的真实用户ID。

由于您已设置suid位,因此程序的有效用户ID是从执行开始的文件所有者(root)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM