1. 程式人生 > 其它 >macOS:與資料庫相關的隱私設定問題

macOS:與資料庫相關的隱私設定問題

技術標籤:OSX系統部署Mac OS X實用技巧Mac OS X軟體排錯TCC隱私PrivacymacOStccutil

簡介

自從 macOS 開始引入了隱私設定之後,就有了層出不窮的各種問題,比如 App 無法開啟攝像頭,微信無法開麥克風, qq 無法錄屏等等等。

在 macOS 系統中,隱私服務設定,也被稱作 TCC,是Transparency, Consent, and Control 的縮寫,是自從 macOS Mojave 開始引入的一個系統級別的安全概念。它的理念是,在沒有使用者明確同意之前,一個 app 不准許訪問使用者資源,包括硬體資源,如攝像頭、麥克風、定位、螢幕錄製、藍芽、HomeKit等,或者軟資源,如:照片庫、日曆,資料夾、輔助功能、以及牽扯到包含個人隱私的第三方應用庫檔案等等。

這是 macOS 重視個人隱私的一個重要的進步。但是同時也為使用者使用帶來了不少的麻煩。有了這個系統級別的功能,app 需要升級以適應這個要求。當然,自從釋出(2018 年 9 月 24 日)到現在已經是有兩年多了,需要的app 都已經升級適配了,但是依然由於各種原因,使用者依然會碰到各種意想不到的問題。

本文試圖梳理一下已知的潛在問題解決和一些知識點,供分析。

TCC 資料庫:

TCC 資料庫,根據使用範圍,有兩個存放地點,一個是本地資源庫,另一個是使用者資源庫目錄

本地資源庫主要是對硬體資源的訪問;而使用者資源庫當然就是與使用者資料相關的記錄

本地資源庫

目錄在:"/Library/Application Support/com.apple.TCC"

如果這個目錄及其內部的 sqlite 3 的資料庫的檔案屬性和許可權設定錯誤,會導致無法設定。系統預設的是:

% ls -la "/Library/Application Support/com.apple.TCC"
total 128
[email protected]  5 root  wheel    160 Dec 20 21:52 .
drwxr-xr-x  11 root  admin    352 Dec 20 20:04 ..
drwxr-xr-x   2 root  wheel     64 Dec 20 19:59 AdhocSignatureCache
-rw-r--r--   1 root  wheel   7337 Dec 20 20:03 MDMOverrides.plist
-rw-r--r--   1 root  wheel  57344 Dec 20 21:52 TCC.db

使用者資源庫

目錄是:"$HOME/Library/Application Support/com.apple.TCC"

% ls -la "$HOME/Library/Application Support/com.apple.TCC" 
total 160
drwxr-xr-x   4 admin  staff    128 Dec 19 00:48 .
drwx------+ 55 admin  staff   1760 Dec 20 00:18 ..
drwxr-xr-x   2 admin  staff     64 Oct 24  2019 AdhocSignatureCache
-rwxr--r--   1 admin  staff  81920 Dec 19 00:48 TCC.db

如果是許可權等出了問題,可以依照上面的更改

資料庫錯誤

很少的情況是,tcc 資料庫本身錯誤,比如由於上面所述的許可權錯誤導致的,在系統升級時,無法同時升級 TCC庫導致的新tcc 服務無法正確訪問舊的 TCC 庫的問題。

解決的方法,一方面可以參加後面的重置隱私的操作;也可以,建立一個新的賬戶,把系賬戶中的 TCC庫複製出來的辦法。

隱私服務問題

執行下面的命令:

launchctl list | grep -i com.apple.tccd

如果沒有得到一行輸出顯示有 “com.apple.tccd”,那麼可以斷定隱私服務沒有啟動或正常執行,嘗試下面的命令列可以啟動該服務:

launchctl load -wF /System/Library/LaunchAgents/com.apple.tccd.plist

重置隱私

macOS 系統提供了一個簡單的隱私服務的重置應用 tccutil。macOS 使用者可以使用它把隱私服務全部或者部分重置。

重置全部的隱私設定:

tccutil reset ALL

重置某個 app 相關的全部隱私設定:

tccutil reset ALL "app的BundleIdentifier"

例如微信的BundleIdentifier是com.tencent.xinWeChat,那麼命令是:tccutil reset ALL com.tencent.xinWeChat

重置某個 app 相關的某個隱私設定:

tccutil reset "serviceName""app的BundleIdentifier"

比如,重置 VLC Player 對於使用者桌面的訪問許可權,就用:tccutil reset SystemPolicyDesktopFolder org.videolan.vlc

現在已知的但不全的服務名稱有:Accessibility, AddressBook, All, AppleEvents, Calendar, Camera, ContactsFull, ContactsLimited, Facebook, FileProviderDomain, FileProviderPresence, LinkedIn, Liverpool, Location, MediaLibrary, Microphone, Motion, Photos, PhotosAdd, PostEvent, Reminders, ScreenCapture, ShareKit, SinaWeibo, Siri, SpeechRecognition, SystemPolicyAllFiles, SystemPolicyDesktopFolder, SystemPolicyDeveloperFiles, SystemPolicyDocumentsFolder, SystemPolicyNetworkVolumes, SystemPolicyRemovableVolumes, SystemPolicySysAdminFiles, SysyemPolicyDownloadsFolder, TencentWeibo, Twitter, Ubiquity, Willow

隱私與配置描述檔案

對於使用 MDM 系統管理 Mac 的企業來說,使用描述檔案來管理企業 Mac 的隱私設定是一個必須的選擇,比如,部署遠端管理共享,就需要使用描述檔案。

Github 上有一個開源的工具,叫做 PPPC Utility,用它可以生成相關的配置描述檔案,配合 MDM 系統,可以輕鬆部署到位。