10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

セキュリティとプライバシーの設定値をリセットする(macOS 10.15 Catalina)

概要

参考

  • TCCのリセット(mojave 10.14.4)

    これは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でアクセスする際に下記の警告画面が出る

-w420

セキュリティとプライバシー設定

  • OKを選択するとセキュリティとプライバシー>プライバシー>ファイルとフォルダに項目が追加される。
  • 許可しないを選択した場合はチェックマークが外れた状態で追加される
  • どちらもしたくない場合(項目を追加したくない場合)は、上記の画面でescキーを押すことで回避できる。
  • 今の所このUIから項目を削除することはできないようです(-ボタンはdisableのままです)

-w668

ターミナルからセキュリティとプライバシー設定をリセットする

概要

  • 削除するにはターミナルで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から確認できます

image

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が詳しいので、詳細はそちらを一読ください。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
10
Help us understand the problem. What are the problem?