macOS Privileged Helper无法访问文件系统路径?

问题描述 投票:1回答:1

HALP!我正在为我们的IT人员编写一个内部macOS应用程序来执行一些特定于组织的任务,并且还为他们执行的简单但常见的任务添加了一些快捷方式。其中一项任务是在域之间迁移时重命名用户。这个应用程序有一个Privileged Helper(通过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的保护,我找不到应用程序商店外的守护进程沙箱的任何文档(父应用程序没有启用App Sandbox功能)。谁能指出我正确的方向?

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

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

swift macos cocoa launchd
1个回答
0
投票

好的,已经确认 - Mojave的隐私保护甚至适用于特权工具。解决方案是让所有人都可以执行辅助二进制文件,以便可以将其添加到Full Disk Access表中。

希望这有助于未来的人最初对他们所看到的东西感到困惑。

这是为了希望Apple为用户添加标准化,更简单的方法来授予对帮助者的访问权限。

© www.soinside.com 2019 - 2024. All rights reserved.