Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;显示OSX权限对话框 我用Qt C++编写OSX应用程序,需要root权限。 我相信我可以通过显示一个提示用户名和密码的对话框来获得这些所需的特权,类似于XAMPP中的内容:_C++_Macos_Qt_Permissions - Fatal编程技术网

C++;显示OSX权限对话框 我用Qt C++编写OSX应用程序,需要root权限。 我相信我可以通过显示一个提示用户名和密码的对话框来获得这些所需的特权,类似于XAMPP中的内容:

C++;显示OSX权限对话框 我用Qt C++编写OSX应用程序,需要root权限。 我相信我可以通过显示一个提示用户名和密码的对话框来获得这些所需的特权,类似于XAMPP中的内容:,c++,macos,qt,permissions,C++,Macos,Qt,Permissions,如何做到这一点?我是否必须手动构建表单,然后使用setuid,或者SDK上已经有内置函数了?最初,苹果提供了一个函数“AuthorizationExecuteWithPrivileges”,允许应用程序以root权限启动另一个应用程序。出于安全原因,这一点已被弃用 这里的对话有点误导。Apple提供了在各种不同情况下启动对话框的功能,但通常来自调用函数AuthorizationCopyRights的应用程序,在授权数据库(位于/etc/authorization的文件)中具有设置规则并使用Aut


如何做到这一点?我是否必须手动构建表单,然后使用
setuid
,或者SDK上已经有内置函数了?

最初,苹果提供了一个函数“AuthorizationExecuteWithPrivileges”,允许应用程序以root权限启动另一个应用程序。出于安全原因,这一点已被弃用

这里的对话有点误导。Apple提供了在各种不同情况下启动对话框的功能,但通常来自调用函数AuthorizationCopyRights的应用程序,在授权数据库(位于/etc/authorization的文件)中具有设置规则并使用AuthorizationCreate创建了授权引用之后

OSX上的安全性分为安全守护程序、安全代理和应用程序。应用程序可以限制使用此系统的功能,或者请求授权用户输入凭据,以便启动特权应用程序,这正是您需要做的

需要注意的是,对话框不是由应用程序提供的,而是由安全代理提供的,安全代理完全负责安全GUI。守护进程实际上处理授权

苹果的提升方法是让所有应用程序都以标准用户权限运行,如果需要特权任务,则必须将其分解为一个单独的应用程序,该应用程序注册为使用launchd运行,并授予提升的权限。苹果提供的例子是

虽然示例的调用代码是用Objective-C编写的,但重要的函数只是SMJobBlessAppController.m文件中的C函数,最值得注意的是authorization create在文件底部创建授权参考和Objective-C函数中的代码blessHelper,标签:error:

从SMJobBless开始,它详细介绍了流程

最后,如果您使用的是Qt,则需要为所需的函数调用包含苹果的安全框架。为此,只需将以下内容添加到.pro文件中:-

QMAKE_LFLAGS += -F /System/Library/Frameworks/Security.framework/
LIBS += -framework Security

我不知道OSX,但在Linux/Unix上,我们通常使用
su/sudo
或等效的图形桌面命令(
gksu/gksudo/kdesu/kdesudo
等)来启动单独的可执行文件。OSX上必须有等效的命令。但是,我强烈建议不要使用
setuid
位,因为它不需要密码来获得root权限,这很容易导致严重的安全问题。这似乎是正确的答案,我尝试将方法块
blessHelperWithLabel:error:
移植到我的Qt项目中,一切看起来都很好,但是当我不评论行
result=(bool)SMJobBless(kSMDomainSystemLaunchd,label,authRef,&cfError)我一直收到错误消息
错误:未找到架构x86_64的符号
。我已经为安全性和核心基础添加了QAuMujLFLAGS,但是这个错误仍然存在。您知道发生此错误的原因吗,先生?“错误:未找到架构x86_64的符号”是“问题”窗口中无法链接到符号时出现的错误。在“编译输出”窗口中输出的找不到的符号是什么?您是否解决了@yunhasnawa?如果你有,你能分享你的qt块吗?