哈普!我正在为我们的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的保护,并且我在应用商店外部找不到用于后台驻留程序沙箱的任何文档(父应用程序 not 并未启用应用程序沙箱功能)。谁能指出我正确的方向?
更新:它似乎不受10.14的隐私保护的影响。无法将帮助程序添加到“全盘访问”。可能是我错误地添加了辅助程序:必须将构建目标更改为10.14(这将是一个问题),然后将辅助程序二进制文件从App捆绑包内拖到列表中。我无法从/Library/PrivilegedHelperTools/
添加它-它是灰色的,可以添加。
更新2:更正,它确实与FDA有关。 iTerm在FDA名单中。删除它会使它抛出Operation not permitted
,然后再添加回解析。因此,我现在正在探讨如何将帮助程序正确添加到FDA列表中。
答案 0 :(得分:0)
好的,可以肯定的是-莫哈维的隐私保护甚至适用于特权工具。解决方案是使帮助程序二进制文件所有人都可执行,因此可以将其添加到“全盘访问”表中。
希望这对将来对最初看到的内容感到困惑的人有所帮助。
在此希望Apple为用户添加一种标准化,更简单的方法来将这种访问权限授予助手。