是否可以 运行 作为 root 使用 getuid() 登录用户 ID?

Is it possible to run as root which have logged in user id using getuid()?

我正在开发 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 权限,它会按预期工作..但不幸的是我现在不能这样做,对一些客户需求进行更改

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

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

HTH