macOS 服务访问你的文件

如果你在 macOS 上以后台服务方式运行 SyncThemAll,它可能会对明明属于你的文件夹报告「Permission denied」——文稿、桌面、下载、iCloud 云盘、外置磁盘。

这不是故障,也不是你设置错了。macOS 有意让后台服务远离你的个人文件,除非你另有表示——而这个许可必须由你手动授予,仅此一次。

首先:你真的需要服务吗?

对大多数用户而言并不需要。让 SyncThemAll 在没有窗口的情况下工作有两种不同的方式,只有其中一种才涉及下面这些内容:

你的需求推荐选项
只要我处于登录状态,同步就一直进行,不必让窗口开着开机自启 —— 设置 → 系统 → 在后台运行 和 登录时启动。不需要管理员密码,不需要安全设置,没有额外步骤。
即使无人登录,同步也必须继续——一台自己重启后照常工作的 Mac服务 —— 那么本页就是写给你的。

如果第一行说的就是你,打开开机自启,本页余下部分可以略过。服务是专为无人值守的计算机设计的,而正是这项能力需要多花一个配置步骤。

macOS 为什么要求你这么做

macOS 用一套名为 TCC 的机制保护某些文件夹——桌面、文稿、下载、iCloud 云盘、可移动卷和网络卷。普通应用首次访问这些文件夹时,系统会弹出对话框:「SyncThemAll」想要访问「文稿」文件夹中的文件。你允许一次,之后再也不必操心。

服务无法参与这场对话。它在任何人登录之前就已启动,运行在你的会话之外:没有屏幕可以显示对话框,也没有人来回答。遇到这种情况,macOS 不会去猜——它直接拒绝,而且每次都拒绝。

管理员权限在这里毫无作用。TCC 关心的不是文件权限:即便服务以完整的系统权限运行,同样会被拦下。出于同样的原因,Backblaze、Carbon Copy Cloner、Arq 这类备份工具也会要求你做同一项设置。

所以这份许可必须直接来自你,在「系统设置」里给出。本页余下的内容讲的就是这件事。

如何授予访问权限

SyncThemAll 会直接告诉你需要添加哪个文件,不必你去找。

  1. 打开 SyncThemAll,点击左侧栏的服务。
  2. 在对话框中点击打开设置。macOS 会打开「隐私与安全性 → 完全磁盘访问权限」。
  3. 回到 SyncThemAll,点击复制路径——服务程序的位置会被复制到剪贴板。
  4. 在「系统设置」中点击列表下方的 + 按钮,会出现文件选择窗口。
  5. 按 ⌘ + Shift + G,粘贴路径,按回车,然后点「打开」。
  6. 确认新添加条目旁边的开关处于打开状态。
  7. 回到 SyncThemAll,对服务先点停止,再点启动。

最后一步很重要:macOS 只在程序下次启动时才应用新权限,因此正在运行的服务在重启之前不会察觉这一变化。停止和启动按钮就在同一个对话框里。

「服务尚未看到你的文件」这条提示此时应当消失。如果仍在,请检查第 6 步的开关是否真的打开,以及你添加的是第 3 步的那个文件,而不是 SyncThemAll 应用本身——见下文。

为什么不能直接添加 SyncThemAll 应用?

因为服务是一个拥有独立身份的独立程序,而 macOS 是按程序分别记录这类权限的。授予应用的访问权不会传递给服务,反之亦然。第 3 步复制的路径指向应用包的内部,指向服务实际运行的那个程序:

SyncThemAll.app/Contents/Resources/engine/syncthemall

访达通常会隐藏应用包的内部——所以第 5 步用 ⌘ + Shift + G 直接跳到该路径。如果你更习惯用鼠标把文件拖进列表,请在 SyncThemAll 对话框中点在访达中显示而不是复制路径,它会打开文件夹并预先选中该文件。

授予访问权限后会有什么变化

服务将能够读写你的文件夹,包括你正在同步的那些。有两点后果值得事先知道:

服务创建的文件属于系统,而不属于你。 如果服务把文件下载到你的「文稿」文件夹,而你之后想在访达中删除或重命名它,macOS 会要求输入密码。这是正常的:文件由系统级程序创建。而在 SyncThemAll 内部删除同一个文件则不需要密码。

权限只绑定到那一个程序。 如果你把 SyncThemAll 移动到别的文件夹,或者以替换程序的方式重新安装,可能需要重新添加一次。常规更新则会保留权限。

如何撤销访问权限

打开「系统设置 → 隐私与安全性 → 完全磁盘访问权限」,选中条目,关掉开关或用 − 按钮删除它。服务会继续运行,只是不再看得到你的个人文件夹。如果你从 SyncThemAll 中删除了服务,也请一并删除该条目:它已经无处可指。

仍然遇到问题?

如果重启服务后提示依然存在,或者服务对一个并不在受保护列表中的文件夹报告访问错误,请联系我们——附上文件夹路径以及服务对话框显示的内容。有了这两样,我们立刻就能判断是 macOS 在拦截,还是另有原因。