代码之家  ›  专栏  ›  技术社区  ›  MingMing

C++在MaCOS 11上显示权限对话框

  •  0
  • MingMing  · 技术社区  · 3 年前

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

    Privilege dialog on OSX

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

    0 回复  |  直到 11 年前
        1
  •  4
  •   TheDarkKnight    11 年前

    最初,苹果公司提供了一个功能: 授权ExecuteWithPrivileges '允许应用程序以root权限启动另一个应用程序。出于安全原因,这一点已被弃用。

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

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

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

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

    虽然示例的调用代码是用Objective-C编写的,但重要的函数只是SMJobblesApp控制器中的C函数。m文件,最值得注意的是 授权创建 在Objective-C功能中创建授权参考和代码 blessHelperWithLabel:错误: 在文件的底部。

    以…开始 this help document 在SMJobBless上,详细介绍了流程。

    最后,如果您使用的是Qt,则需要为所需的函数调用包含Apple的安全框架。要做到这一点,只需将以下内容添加到。专业文件:-

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