2

我正在使用需要 root 权限的 Qt C++ 在 OSX 上编写应用程序。我相信我可以通过显示一个提示用户名和密码的对话框来获得这些所需的权限,在 XAMPP 中是这样的:

OSX 上的权限对话框

如何做到这一点?我必须手动构建表单然后使用setuid,还是 SDK 上已经内置了功能?

4

1 回答 1

4

最初,Apple 提供了一个功能“ AuthorizationExecuteWithPrivileges ”,允许应用程序以 root 权限启动另一个应用程序。出于安全原因,此功能已被弃用。

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

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

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

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

虽然示例的调用代码是用 Objective-C 编写的,但重要的函数只是 SMJobBlessAppController.m 文件中的 C 函数,最值得注意的是AuthorizationCreate用于创建授权引用和 Objective-C 函数blessHelperWithLabel:error:中的代码文件的底部。

从SMJobBless 上的帮助文档开始,其中详细介绍了该过程。

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

QMAKE_LFLAGS += -F /System/Library/Frameworks/Security.framework/
LIBS += -framework Security
于 2013-08-23T15:33:00.103 回答