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清单中。
好的,已经确认 - Mojave的隐私保护甚至适用于特权工具。解决方案是让所有人都可以执行辅助二进制文件,以便可以将其添加到Full Disk Access表中。
希望这有助于未来的人最初对他们所看到的东西感到困惑。
这是为了希望Apple为用户添加标准化,更简单的方法来授予对帮助者的访问权限。