C++ 显示 OSX 权限对话框

标签 c++ macos qt permissions

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

Privilege dialog on OSX

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

最佳答案

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

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

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

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

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

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

this help document 开头SMJobBless 上详细介绍了该过程。

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

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

关于C++ 显示 OSX 权限对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404884/

相关文章:

C++、Qt - 如何摆脱 dll 依赖项?

c++ - 使用客户端顶点数组在没有 VBO 的情况下在 opengl 3.1+ 中呈现

c++ - valgrind:中断 crypto++ zlib 测试

objective-c - AppleScript:调用 Shell 脚本的处理程序结果为 "Unrecognized function fileHandleForReading"

python - 对齐 QTextEdit 底部的文本

c++ - qDebug 将 QString UTF-8 非 Ascii 符号输出为 like\uxxxx

c++ - 加速 Matlab 到 C++ 的转换

c++ - 很多 QGraphicsItem

objective-c - Mac OS X 系统中按 id 列出的 bundle 列表

c - 以编程方式设置类型/创建者代码