是否可以使用getuid()以root用户身份登录用户ID?

时间:2016-03-19 05:44:23

标签: macos cocoa terminal root

我正在开发一个需要运行第二个应用程序的mac Cocoa应用程序。 以下是我需要运行的第二个应用程序的相关表单

int main(int argc, const char * argv[]) {
    uid_t           gRealUserID =  getuid();
    printf("User id:%d\n",gRealUserID);
    return 0;
}

问题是第二个终端应用程序应该运行root并且'getuid()'当前登录user.My第一个应用程序正在以root权限运行。

所以简而言之,如果我将上面的代码构建为可执行文件名为“test” 并在终端

中运行
$ ./test
User id:501

如果我们运行

$ sudo ./test
User id:0

我想知道是否有任何可能的方法,如果我按照

执行命令
$ sudo ./test

打印

User id:501

有趣的观察:如果我使用SFAuthorization从非root应用程序授权root权限,它会按预期工作。但不幸的是我现在不能这样做,对某些客户端要求这样做变化

1 个答案:

答案 0 :(得分:1)

sudo运行一个程序,好像它是由root启动的,因此getuid返回0.我认为您正在寻找的是设置用户ID 程序 - 这个是一个文件模式设置,它将程序的有效UID 设置为可执行文件所有者的有效UID ,因此root用户拥有的可执行文件的有效ID为root,但真实ID <启动程序的用户/ em>。

有关详细信息,请参阅chmod(2)geteuid(2)getuid(2)等的手册条目。

HTH