我正在开发一个需要运行第二个应用程序的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权限,它会按预期工作。但不幸的是我现在不能这样做,对某些客户端要求这样做变化
答案 0 :(得分:1)
sudo
运行一个程序,好像它是由root启动的,因此getuid
返回0.我认为您正在寻找的是设置用户ID 程序 - 这个是一个文件模式设置,它将程序的有效UID 设置为可执行文件所有者的有效UID ,因此root用户拥有的可执行文件的有效ID为root,但真实ID <启动程序的用户/ em>。
有关详细信息,请参阅chmod(2)
,geteuid(2)
,getuid(2)
等的手册条目。
HTH