
內容摘要
Full Disk Access 不是普通權限——它一次移除某個 App 的所有隱私提示。授予前先驗證簽章,並把任何握有它的 AI agent 當成擁有你整顆磁碟。
macOS 上的每一種權限都有範圍。相機權限讓 App 看見相機;聯絡人權限讓它讀取你的聯絡人。Full Disk Access 不同:它一次移除某個應用程式的逐項保護,讓它能讀取 macOS 存在的目的就是要保護、不讓它讀取的資料。
這使它成為惡意、或只是過度積極的 AI agent 最想要的單一權限,也正是 Apple 要收緊相關規則的原因。本文說明這個權限真正的意義,以及如何在幾分鐘內完成稽核。
01Full Disk Access 實際上給了什麼
macOS 透過 TCC 系統(Transparency, Consent and Control)保護位置。沒有相關授權的 App 無法存取你的行事曆、聯絡人、照片、麥克風,以及其他 App 的容器。Full Disk Access 授予最強的一般豁免:App 可以讀取那些保護所涵蓋的檔案,包括郵件、訊息、Safari 瀏覽紀錄與 Time Machine 資料。
你可以從一般終端機看到這層保護:除非呼叫的行程本身就已有 Full Disk Access,否則連 TCC 儲存庫都無法讀取。
ls -la "$HOME/Library/Application Support/com.apple.TCC/"
# ls: Operation not permitted
那個錯誤就是重點。若某個 App 能讀取該目錄,它早已被交出了鑰匙。
FDA 不是「多一些文件夾」
它是全系統豁免,不是文件夾授權。有 FDA 的 App 通常能讀取其他應用程式的資料與你的通訊紀錄,遠遠超過它聲稱要執行的任務。
02Apple 為什麼現在要收緊
2026 年 10 月 2 日,Apple 開發者新聞發布〈Updates to Full Disk Access in macOS〉。Apple 表示,部分開發者使用 Full Disk Access 的方式會暴露系統上的一切——檔案、郵件、訊息與瀏覽紀錄——而用戶並未完全了解;對通訊類 App 而言,這也會侵害用戶交談對象的隱私。公告承諾推出額外控制,讓授予這項存取權必須經過非常明確的用戶動作,並明確以自主 AI agent 作為理由。
實際的結論是:在規則改變、App 開始要求重新批准之前,現在的授權清單值得先稽核一輪。
03稽核目前誰有存取權
- 打開權威清單。 系統設定 → 隱私權與安全性 → Full Disk Access。請逐項閱讀,不只是你記得加過的那些。
- 問每個 App 是否真的需要它。 備份、同步與磁碟工具確實需要;筆記、啟動器或聊天用戶端通常不需要。
- 檢查背景項目。 系統設定 → 一般 → 登入項目與擴充功能會列出自動啟動的東西,包括可能代表母 App 握有存取權的廠商 helper。
- 從終端機列出第三方 launch agent。
launchctl list | grep -v '^\s*-\?\s*[0-9-]*\s*com\.apple\.' | head -30
ls -la "$HOME/Library/LaunchAgents/" 2>/dev/null
- 每次大型 App 更新後重新檢查。 授權會在已簽章更新後保留,所以 App 可能在你當初批准較窄版本之後,取得新的能力。
記錄清單,之後比對
一張截圖或一段貼上的清單就夠。一個月後比對,會浮出你當初匆忙批准、後來忘掉的授權——廣大存取權正是這樣累積的。
04授予前先驗證 App
在打開開關前,先確認這個 App 究竟是什麼。兩個指令就能涵蓋大部分情況。
# 誰簽的?識別碼是什麼?
codesign -dv --verbose=2 /Applications/Example.app
# Identifier=com.example.app
# TeamIdentifier=ABCDE12345
# Authority=Developer ID Application: Example Inc (ABCDE12345)
# 是否已公證並通過 Gatekeeper?
spctl -a -vv /Applications/Example.app
# /Applications/Example.app: accepted
由已知開發者以穩定 Team ID 簽章的 App,與從論壇下載的未簽章 bundle,是完全不同的兩回事。若識別碼或團隊與你預期的廠商不符,就停在這裡。
05在不弄壞工具的前提下降低暴露
多數工作流一旦看清楚實際觸及的範圍,就不需要 Full Disk Access。更好的選項,大致依偏好排序:
| 目標 | 優先採用 | 原因 |
|---|---|---|
| 讀取單一項目文件夾 | 檔案與文件夾權限,或從該目錄執行 | 存取維持在範圍內 |
| 備份單一磁碟區 | 專用備份工具加該磁碟區 | 避免整顆磁碟的觸及範圍 |
| 執行 AI agent | 容器或獨立用戶帳號 | agent 無法升級到你整個家目錄 |
| 自動化指令碼 | 逐文件夾授權,而非全系統豁免 | 指令碼被攻陷時影響較小 |
對 agent 而言,隔離勝過權限管理。只能讀取正在處理之倉庫的沙箱 agent,不需要 Full Disk Access;即使它因提示注入被攻陷,影響半徑也只是一個項目,而不是你的訊息紀錄。
要撤銷存取,可在系統設定把 App 關掉,或從終端機清除它的所有隱私批准:
# 清除單一 bundle identifier 的所有隱私批准。
tccutil reset All com.example.app
06留意背景項目與 agent
當 Full Disk Access 藏在你看不見的東西後面時最危險。有兩種模式值得注意:繼承母 App 存取權的 helper 行程,以及你已解除安裝的 App 留下的 launch agent。兩者在可見的 App 關閉後都會繼續執行。
請每月檢視一次登入項目與擴充功能、檢查 ~/Library/LaunchAgents 是否有不認識的指令碼,並刪除不再使用之軟件的 agent。若你使用受管理的 Mac,IT 團隊可以用 root 權限集中稽核系統 TCC 儲存庫;但請勿在不是自己的機器上執行那些查詢——儲存庫含有敏感紀錄。
07常見錯誤與修正
| 錯誤 | 為何失效 | 修正 |
|---|---|---|
| 為了讓 App「不再詢問」而授予 FDA | 它會消音未來所有提示 | 改用逐文件夾授權 |
| 批准了 helper,而非 App | 存取會綁到錯的 bundle | 檢查登入項目與確切 bundle id |
| 以為更新會重置授權 | 已簽章更新通常會保留 | 大型更新後重新檢查 |
| 讓 agent 帶著 FDA 執行 | 一次提示注入就能觸及一切 | 沙箱化並限制掛載範圍 |
| 從不撤銷任何東西 | 存取會無聲累積 | 每季稽核並關掉舊 App |
請記住這個心智模型:Full Disk Access 是對「用來限制 App 的系統」的豁免。只把它給那些工作本質上就是全系統的軟件,並讓你為其他一切打造的工具,跑在一個小到不必開口要它的邊界裡。
比對變更前後的權限與背景項目清單。
Diff 比對工具常見問題
Full Disk Access 實際上允許什麼?
它移除單一 App 的逐項隱私保護,讓它能讀取 macOS 平常守護的資料,包括郵件、訊息、Safari 瀏覽紀錄與其他 App 的資料。Apple 形容它大致繞過了標準控制。
Apple 為什麼要改 Full Disk Access?
Apple 表示,開發者正以讓用戶無法完全理解的方式使用它,暴露系統上的一切;而愈來愈有能力且自主的 AI agent 更提高了風險。要求非常明確用戶動作的額外控制即將推出。
我要怎麼看哪些 App 有 Full Disk Access?
打開系統設定 → 隱私權與安全性 → Full Disk Access。該清單是官方、面向用戶的權威紀錄;底層 TCC 資料庫受保護,一般行程無法讀取。
App 更新後還會保有 Full Disk Access 嗎?
授權綁定 App 的程式碼簽章,所以同一開發者以正確簽章發布的更新通常會保留授權。簽章身分改變的 App 會失去授權,這是提醒你重新檢查當初批准了什麼的好訊號。
我可以用命令列撤銷 Full Disk Access 嗎?
可以。`tccutil reset All <bundle-id>` 會清除該 App 的隱私批准。對單一 App 而言,在系統設定裡把開關關掉、再確認 App 停止運作通常更快。
相關文章
- 如何挑選並自架編碼 agent harness
把 agent 沙箱化,它就不需要全系統存取權。
- 提示注入是新的 SQL 注入
擁有磁碟存取權的 agent,影響半徑大得多。
相關工具
- Diff 比對工具
隨時間比對權限清單。
- Regex 測試工具
過濾 launch agent 與行程清單。
- JSON 格式化工具
閱讀用 plutil 轉出的 plist。