问题标签 [smjobbless]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
525 浏览

macos - 带有 Helper 应用程序的沙盒应用程序

我正在尝试从沙盒应用程序执行帮助应用程序,但它抛出错误 errAuthorizationDenied (-60005),我使用 Apple SMJobBless作为示例。目前我有这个

我做错了什么,还是在沙盒中不可能?

0 投票
1 回答
973 浏览

macos - OS X - 真正的“按需”特权帮助工具

我的应用程序需要将文件写入文件系统上的受限位置。
为此,我使用了一个以 root 身份运行的帮助工具。

一切正常,按照这个示例,我的帮助工具已正确安装并运行。我使用此解决方案能够“唤醒”辅助工具,否则在初始加载后它不会启动超过一次。

辅助工具正在等待来自主应用程序的消息,并正确执行它们。我还有一条消息要求该工具关闭,它也可以正常工作。

问题是launchd每次退出时都会重新启动该工具,无论我在launchd.plist文件中指定什么键。
我不希望帮助工具永远运行,等待消息,而是仅按需启动。

问题:辅助工具每次结束都重启正常吗?如果没有,如何让它死掉并按需重启?

这是launchd.plist内容:

当然,我尝试了各种键和值的组合,以及帮助工具的各种退出状态代码。它没有以任何方式改变launchd管理过程。

0 投票
1 回答
324 浏览

xcode - SMJobKit (SMJobBless) BadBundleCodeSigning

我正在尝试在 SMJobKit 框架的帮助下通过 SMJobBless 执行特权助手,但是当我尝试安装该服务时,会抛出此错误Error Domain=SMJobKit.SMJError Code=4 "(null)"

当我运行函数 checkForProblems 它抛出[SMJobKit.SMJError.BadBundleCodeSigningDictionary]源代码时,这一行有一条评论:"kSecCodeInfoPList was not a dictionary"

App 的结构类似于 Main App (sandboxed) -> XPC Service -> Privileged Helper

代码签名设置为 Mac 开发人员:...</p>

在 plist 中我有……</p>

允许客户端添加和删除工具

安装后拥有的工具

这是由 SMJobBless python 脚本生成的

作为一个例子,我正在使用更好的授权示例,但还没有任何运气

0 投票
3 回答
4281 浏览

xcode - 使用 swift 获得 Mac 应用程序的管理权限

我正在编写一个需要经常以 root 权限运行命令的软件。

现在,我通过向用户询问他们的密码一次,保存它,然后将该密码NSAppleScript作为参数提供给with administrator privileges.

这对用户来说显然是不安全的,因为有人可以访问他们的密码。

我一直在寻找一周的大部分时间,但找不到解决方案。

SMJobBless似乎允许您以更高的权限安装应用程序。

我遵循了应用程序的示例,并且从他们的 SMJobBlessUtil 脚本中收到错误消息。

这是错误:

显然,有些不对劲。这是各自的plist

服务信息列表

应用信息列表

我看过这个 stackoverflow 帖子和许多其他人喜欢它。据我了解,我的 plist 设置正确。我究竟做错了什么?

0 投票
2 回答
223 浏览

macos - SMJobBless Apple 示例代码不断询问密码

我已经下载了苹果的SMJobBless来执行特权操作。它工作正常。我面临的唯一问题是,每次启动时都会要求输入密码。有没有办法避免这件事?

谢谢

0 投票
0 回答
87 浏览

objective-c - 无法从帮助程序可执行文件中使启动的 kextcache 无效

我已经构建了一个卸载程序,它调用具有提升权限的帮助程序可执行文件来删除我的驱动程序的launchd-plist,这样它就不会在下一个引导周期再次出现。

为了反映新阶段,我使用此问题/Library/LaunchDaemons中显示的以下命令使 kextcache 无效 。touch /Library/Extensions/

但是,当我在删除 plist 文件后立即从帮助程序可执行文件中执行此操作时,它不会成功,并且我的驱动程序在重新启动后仍然会运行。当我touch /Library/Extensions在卸载程序助手完成后立即通过键入命令手动执行此操作时,它就可以了。

这是我的代码在第一个选项中的样子(从助手 exec 无效)。

也许你可以告诉我为什么我在每个选项中都有不同的行为。

更新:

似乎缓存失效需要多次重复此命令。这段代码对我有用,但我不知道为什么......

0 投票
4 回答
525 浏览

macos - 当用户删除它时卸载 .app 安装的项目,包括 SMJobBless 助手

SMJobBless()简短版本:删除应用程序时是否可以删除应用程序(等)设置的帮助工具?如果是这样,怎么做?

长版:

不幸的是,我们正在开发的 Mac 应用程序需要管理员权限才能执行偶尔的操作,并且即使应用程序本身没有运行,它也需要后台任务才能连接到其他应用程序的插件(这个可以是非特权的) . 该应用程序将使用 Developer ID 证书进行签名,并且仅在 App Store 之外分发。

我们希望该应用程序尽可能成为“好公民”,即使在卸载时也是如此。

对于后台任务,我们使用了一个登录项,使用SMLoginItemSetEnabled(). 这并不令人惊讶,因为 XPC 消息传递似乎不起作用(我们正在使用CFMessagePort- 欢迎替代建议),但如果用户删除应用程序,登录项至少在下次登录时不再加载。我怀疑系统中的某个地方仍然存在它的痕迹,但是使用了 .app 包中的可执行文件,当它消失时,登录项不再运行。

对于偶尔需要管理员权限的操作,我们有一个特权帮助工具,我们的应用程序使用它安装SMJobBless(),它实现了一个命名的 XPC 服务,因此当它收到来自主应用程序的消息时,任务会按需启动。这是 Apple 在其Even Better Authorization Sample中推荐和描述的内容。

助手可执行文件被复制到/Library/PrivilegedHelperTools/by SMJobBless(),嵌入的 launchd.plist 最终在/Library/LaunchDaemons/. 即使操作系统有关于哪个应用程序“拥有”助手的信息,但当用户删除应用程序时,它似乎并没有卸载它。Apple 的示例对卸载保持沉默,除了uninstall.sh显然仅打算在开发期间使用的脚本。当应用程序没有运行时,我们不需要这个帮助程序,所以将它安装为一个成熟的启动守护进程有点过分,但我们也想避免重复地用密码提示来烦扰用户。此外,Apple 建议不要使用其他形式的具有管理员权限的运行代码,SMJobBless()例如SMJobSubmit()标记为已弃用。

那么我们如何清理自己呢?

我找到SMJobRemove()了,但是(a)在我们的情况下,我们什么时候会调用它 - 你不能在 .app 包删除时运行代码,或者你可以吗?(b)它实际上似乎并没有清理干净

我能想到的唯一两件事并不是非常令人满意:

  1. 某种卸载程序或脚本。但这似乎也很丑陋。
  2. 不用担心,当用户删除我们的应用程序时留下一团糟。
0 投票
2 回答
944 浏览

macos - 了解 OSX 中的特权帮助工具

我需要在我的应用程序中的某个时间点进行提升操作。为此我找到了苹果的 SMJobBless 机制。我编写了一个简单的帮助工具并通过SMJobBless. 到目前为止,这有效。但是我现在不明白的是:安装后如何启动该 Helper 工具?

0 投票
2 回答
502 浏览

macos - 如何将 info.plist 嵌入到 SMJobBless 的特权助手中?

我尝试使用 SMJobBless 为我的应用程序制作辅助工具;当我通过通道遵循设置时:

http://www.tanhao.me/pieces/1623.html/

当我运行时,xcode 给了我:

SMJobBless 失败,错误:错误域 = CFErrorDomainLaunchd 代码 = 8“(空)”

8 表示 kSMErrorJobPlistNotFound;但我检查了其他链接标志:

在此处输入图像描述

并且捆绑包存储plist:

在此处输入图像描述

这是同一个问题: SMJobBless 错误

但我不在答案之下,我无权添加评论


SMJobBless 演示设置 info.plist 键SMPrivilegedExecutables是这样的;但我不知道如何将其应用于我的程序:

anchor apple generic and identifier "com.apple.bsd.SMJobBlessHelper" and (certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = xxxxxxxxxx)

0 投票
2 回答
70 浏览

swift - 使用 Swift 删除需要管理员权限的文件

我目前正在开发一个 Mac 应用程序,我需要从 /Library/LaunchDaemons 目录和其他需要管理员权限的类似目录中删除文件(可能是恶意的)。使用FileManager.default.removeItem没有成果。我遇到了一些指向我的文章EvenBetterAuthorizationSampleSMJobBless并且我发现文档相当混乱。我是否在正确的轨道上,如果是,我应该如何进行?