概要
- macOS10.15ではアクセス権が必要となる場所が追加されています。
- そこで改めてセキュリティとプライバシー設定がどのように動作しているのか、またどのように変わったかを見ていきたいと思います。
- 最後にUI上では削除できないセキュリティとプライバシー設定の値をリセットする方法を紹介します。
参考
-
これはTCC(Transparency Consent and Control)というユーザ保護の仕組みで、図のようにセキュリティとプライバシー環境設定で設定されるものです
このデータは
~/Library/Application Support/com.apple.TCC/TCC.db
に保存されているので、sqlite3で直接編集するか?もしくは、
$ tccutil reset service [bundle id]
で初期化できます
(面倒なら $ tccutil reset Allとかでも)
実践
デスクトップにアクセスしてみる
- 試しにSwiftで
Desktop
上のファイルにアクセスを試みる
let contents = loadTextFile(path: "/Users/<ユーザ名>/Desktop/sample.txt")
if (contents.utf16.count != 0) {
print("\(contents)")
} else {
print("read error")
}
func loadTextFile(path:String) -> String {
var contents = ""
do {
contents = try String(contentsOfFile: path,
encoding: String.Encoding.utf8)
}
catch {
print("Read Error")
}
return contents
}
-
String(contentsOfFile
でアクセスする際に下記の警告画面が出る
セキュリティとプライバシー設定
-
OK
を選択するとセキュリティとプライバシー
>プライバシー
>ファイルとフォルダ
に項目が追加される。 -
許可しない
を選択した場合はチェックマークが外れた状態で追加される - どちらもしたくない場合(項目を追加したくない場合)は、上記の画面で
esc
キーを押すことで回避できる。 - 今の所このUIから項目を削除することはできないようです(
-
ボタンはdisableのままです)
ターミナルからセキュリティとプライバシー設定をリセットする
概要
- 削除するにはターミナルで
tccutil reset <service> <bundle id>
を叩く必要があります。-
<bundle id>
を省略した場合はサービス全体の設定がリセットされる
-
-
Requesting Authorization for Media Capture on macOS
- カメラのアクセス例。
-
tccutil reset Microphone
が紹介されている
具体例
-
SystemPolicyDesktopFolder
の出どころに関しては後述します
tccutil reset SystemPolicyDesktopFolder jp.co.hikeuchi.LoadFileSample
approval status for jp.co.hikeuchi.LoadFileSample
-
identifier
はapp内のplistから確認できます
tccutilの詳細
ターミナルで確認
-
help
で確認してみると以下の通り。
tccutil --help
tccutil: Usage: tccutil reset SERVICE
-
man tccutil
でマニュアルを表示してみた。
tccutil(1) BSD General Commands Manual tccutil(1)
NAME
tccutil -- manage the privacy database
SYNOPSIS
tccutil command service
DESCRIPTION
The tccutil command manages the privacy database, which stores decisions
the user has made about whether apps may access personal data.
One command is current supported:
reset Reset all decisions for the specified service, causing apps to
prompt again the next time they access the service.
EXAMPLES
To reset all decisions about whether apps may access the address book:
tccutil reset AddressBook
Darwin April 3, 2012 Darwin
- リセットするためには
SERVICE
名を知る必要があります。
SERVICE名の調べ方
参考
-
Mojaveで強化された、ユーザープライバシー保護機能 の設定をリセットする
- macOS10.14だがSERVICE名一覧が載っている
-
Bitsplitting.org Reauthorizing Automation in Mojave
You can get a sense for the variety of services tccutil apparently supports resetting by dumping the pertinent strings from the framework:
strings /System/Library/PrivateFrameworks/TCC.framework/TCC | grep kTCCService
-
会社の先輩曰く…
この書き手が,どうしてこんな strings コマンドをおもむろに叩けるのかといえば,添付 concat-in-tccutil.png の
ような実装を tccutil の中に見い出したからに思える。これを非公開のフレームワークである TCC.framework が
エクスポートしている TCCAccessRequest() の唯一の引数に投げつけてリセットしているような実装になっている。
具体例(macOS10.15.2 Betaの場合)
strings /System/Library/PrivateFrameworks/TCC.framework/TCC | grep kTCCService
kTCCServiceAll
kTCCServiceAddressBook
kTCCServiceContactsLimited
kTCCServiceContactsFull
kTCCServiceCalendar
kTCCServiceReminders
kTCCServiceTwitter
kTCCServiceFacebook
kTCCServiceSinaWeibo
kTCCServiceLiverpool
kTCCServiceUbiquity
kTCCServiceTencentWeibo
kTCCServiceShareKit
kTCCServicePhotos
kTCCServicePhotosAdd
kTCCServiceMicrophone
kTCCServiceCamera
kTCCServiceWillow
kTCCServiceMediaLibrary
kTCCServiceSiri
kTCCServiceMotion
kTCCServiceSpeechRecognition
kTCCServiceAppleEvents
kTCCServiceLinkedIn
kTCCServiceAccessibility
kTCCServicePostEvent
kTCCServiceListenEvent
kTCCServiceLocation
kTCCServiceSystemPolicyAllFiles
kTCCServiceSystemPolicySysAdminFiles
kTCCServiceSystemPolicyDeveloperFiles
kTCCServiceSystemPolicyRemovableVolumes
kTCCServiceSystemPolicyNetworkVolumes
kTCCServiceSystemPolicyDesktopFolder
kTCCServiceSystemPolicyDownloadsFolder
kTCCServiceSystemPolicyDocumentsFolder
kTCCServiceScreenCapture
kTCCServiceDeveloperTool
kTCCServiceFileProviderPresence
kTCCServiceFileProviderDomain
%s{public}: service kTCCServiceAppleEvents is not supported by this function
kTCCServiceAppleEvents indirect object identifier %s
kTCCServiceAppleEvents indirect object identifier type %d
- 不必要な行を削除、また実際のSERVICE名ではPrefixの
kTCCService
が不要。
整形した結果は以下。
All
AddressBook
ContactsLimited
ContactsFull
Calendar
Reminders
Twitter
Facebook
SinaWeibo
Liverpool
Ubiquity
TencentWeibo
ShareKit
Photos
PhotosAdd
Microphone
Camera
Willow
MediaLibrary
Siri
Motion
SpeechRecognition
AppleEvents
LinkedIn
Accessibility
PostEvent
ListenEvent
Location
SystemPolicyAllFiles
SystemPolicySysAdminFiles
SystemPolicyDeveloperFiles
SystemPolicyRemovableVolumes
SystemPolicyNetworkVolumes
SystemPolicyDesktopFolder
SystemPolicyDownloadsFolder
SystemPolicyDocumentsFolder
ScreenCapture
DeveloperTool
FileProviderPresence
FileProviderDomain
- ここから必要そうなものをピックアップすればOKですね
- (ドキュメント化されていないので使ってもいいのか気になりますが…)
- 先に紹介したBitsplitting.org Reauthorizing Automation in Mojaveが詳しいので、詳細はそちらを一読ください。