macOS 特权助手无法访问文件系统路径?



Halp!我正在为我们的 IT 人员编写一个内部 macOS 应用程序来执行一些特定于组织的任务,并且还为他们执行的简单但常见的任务添加了一些快捷方式。其中一项任务是在域之间迁移时重命名用户。此应用程序具有可用的特权助手(通过SMjobBless)来执行大多数任务。但是,尽管此帮助程序工具具有特权执行上下文,但似乎无法重命名用户的主目录。

我在帮助程序中实现此特定任务的第一次尝试是通过Process()运行一个简短的 shell 脚本(该技术在此帮助程序中成功用于数十个其他任务)。

let script = """
set -e
mv '(homeDirPath)' /Users/(toUsername)
dscl . -change /Users/(fromUsername) NFSHomeDirectory '(homeDirPath)' '/Users/(toUsername)'
dscl . -change /Users/(fromUsername) RecordName (fromUsername) (toUsername)
"""

我在 stderr 上得到以下输出(/Users/newname验证不存在):

mv: rename /Users/oldname to /Users/newname: Operation not permitted

以非 root 用户身份尝试此操作会给出不同的错误:mv: rename /Users/oldname to /Users/newname: Permission denied

好吧,奇怪。将whoami添加到脚本顶部以仔细检查用户上下文:root。井。。。有趣。Wth,我可以通过用户会话中的sudo很好地做到这一点。

然后我尝试使用 FileManager,认为启动守护程序的子进程可能存在一些 SIP 干扰或沙盒(尽管没有找到任何说明这一点的文档),但我仍然收到一个错误 - 但这次更详细:

Error: “oldname” couldn’t be moved because you don’t have permission to access “Users”.

我尝试搜索文档以查找我遇到的任何限制,但我不知所措。该目录似乎不受 SIP 的保护,我在应用商店之外找不到任何用于守护程序沙盒的文档(父应用程序启用应用程序沙盒功能)。谁能指出我正确的方向?

更新:它似乎不受 10.14 隐私保护的影响。将帮助程序添加到"完全磁盘访问权限"无法解决。也许我错误地添加了帮助程序:不得不将构建目标更改为 10.14(这将是一个问题),然后将帮助程序二进制文件从 App bundle 中拖到列表中。我无法从/Library/PrivilegedHelperTools/中添加它 - 它作为添加选项显示为灰色。

更新2:更正,它似乎确实与FDA有关。 iTerm在FDA名单中。删除它会导致它抛出Operation not permitted,然后重新添加它解决。所以我现在正在追查如何将助手正确地添加到 FDA 列表中。

好的,已经确认 - Mojave 的隐私保护甚至适用于特权工具。解决方案是使帮助程序二进制文件可由所有人执行,以便允许将其添加到"完全磁盘访问"表中。

希望这能帮助那些最初对他们所看到的感到困惑的人。

这里希望Apple为用户添加一种标准化的,更简单的方法,以将此访问权限授予帮助程序。

最新更新