我正在使用需要root权限的Qt C ++在OSX上编写应用程序。 我相信我可以通过显示一个提示用户名和密码的对话框来获得这些所需的权限,如XAMPP中所示:
如何做到这一点?我是否必须手动构建表单然后使用setuid
,或者SDK上是否已内置函数?
答案 0 :(得分:2)
最初,Apple提供了一个函数“ AuthorizationExecuteWithPrivileges ”,允许应用程序以root权限启动另一个应用程序。出于安全原因,此后已被弃用。
这里的对话有点误导。 Apple提供authorization services在各种不同情况下启动对话框,但通常来自调用AuthorizationCopyRights函数的应用程序,在授权数据库(/ etc / authorization中的文件)中创建规则并创建了Authorization参考使用AuthorizationCreate。
OSX上的安全性在安全守护程序,安全代理和应用程序之间分开。应用程序可以使用此系统限制功能,或者请求授权用户输入凭据,以便它可以启动特权应用程序,这是您需要执行的操作。
重要的是要注意,该对话框尚未由应用程序呈现,而是由安全代理程序提供,安全代理程序单独负责安全GUI。守护进程实际上处理授权。
Apple的提升方法是让所有应用程序都使用标准用户权限运行,并且如果需要特权任务,则必须将其分解到一个单独的应用程序中,该应用程序已注册为使用launchd运行并具有提升的权限。 Apple提供的示例是SMJobBless。
虽然示例的调用代码是用Objective-C编写的,但重要的函数只是SMJobBlessAppController.m文件中的C函数,最值得注意的是 AuthorizationCreate 来创建授权引用和代码。文件底部的Objective-C函数 blessHelperWithLabel:error:。
从SMJobBless上的this help document开始,详细介绍了该过程。
最后,如果您使用Qt,则需要包含Apple的安全框架以进行所需的函数调用。为此,只需将以下内容添加到.pro文件中: -
QMAKE_LFLAGS += -F /System/Library/Frameworks/Security.framework/
LIBS += -framework Security