gpt4 book ai didi

objective-c - 使用 SMJobBless() 编写特权帮助工具

转载 作者:太空狗 更新时间:2023-10-30 03:11:08 24 4
gpt4 key购买 nike

尽管自 Mac OS X Leopard 以来 API 已经开放,但令人惊讶且不幸的是,关于如何正确使用 SMJobBless() 创建特权帮助工具的文档非常少。有很多问题,即使直接从 Apple 的示例项目复制代码也是如此。幸运的是,我找到了解决这个问题的方法,并且已经为我的辅助工具的工作打下了基础。

但是,SMJobBless() 似乎只祝福该工具并将其复制过来,但不运行它。我在辅助工具的 main() 函数中包含了代码,应该 运行但没有运行(因为 NSLog() 莫名其妙地没有运行)不起作用——根据我已经发现的一点点信息——我已经尝试 syslog()ing 一些“Hello world”类型的字符串,但系统上什么也没有出现安慰)。完全没有启动帮助工具的迹象。
文档大多没用。它只是说在 SMJobBless() 被调用后,辅助工具“就绪”了,甚至没有说明“就绪”的含义。

此外,Apple 的样本不包含任何进程间通信代码,也没有解释应该如何与帮助工具进行交互。你使用分布式对象吗?马赫港口?谁知道?没有关于如何做到这一点的官方消息。

那么,有人知道如何完成这项工作吗?我已经确认安装了帮助工具,并且身份验证有效,但我只是想不出如何启动帮助工具并与之通信——文档中存在如此大的差距,目前这还是个谜。这非常令人沮丧;我不是唯一遇到这个问题的人(但任何地方都很少提到它),而且SMJobBless()显然有效不知何故,因为这是 Apple 使用的。

(请不要提及 AuthorizationExecuteWithPrivileges()。我没有使用它:它已被弃用,肯定会消失,并且是一个主要的安全漏洞。不,谢谢。)

最佳答案

如果您尝试提升权限(来自 https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingXPCServices.html ),XPC 不是一个选项:

By default, XPC services are run in the most restricted environment possible—sandboxed with minimal filesystem access, network access, and so on. Elevating a service’s privileges to root is not supported.

SMJobBless 将安装一个辅助工具并将其注册到 Launchd,如 Apple 提供的 SMJobBless 示例。让您的帮助工具实际启动的技巧是简单地尝试连接到您的帮助工具的广告服务。

有一个名为 ssd 的 WWDC2010 示例演示了一个简单的通过套接字启动的客户端/服务器模型。 Apple 不再提供它,但我在这里找到了一个链接:https://lists.apple.com/archives/macnetworkprog/2011/Jul/msg00005.html

我已经将来自 ssd 示例的服务器代码中的调度队列处理合并到 SMJobBless 示例中的帮助工具中,并且可以确认当我的主应用程序尝试连接到适当的端口。请参阅 Launchd 上的 WWDC2010 视频,了解您可以用来与帮助工具(套接字除外)进行通信的其他机制。

我不确定我是否可以合法地重新分发我拥有的修改后的源代码,但合并这两个项目并让您的帮助工具运行应该相当简单。

编辑:这是我编写的示例项目,它使用分布式对象在应用程序和助手之间进行通信:https://www.dropbox.com/s/5kjl8koyqzvszrl/Elevator.zip

关于objective-c - 使用 SMJobBless() 编写特权帮助工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9134841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com