PPPCで付与できないmacOSのプライバシー保護機能にアクセス権を付与する
COVID-19の影響により、テレワーク/リモートワーク化が加速し、Web会議サービスを使用することが増えてきました。 Web会議サービスの場合、往々にしてカメラやマイクを使用することとなります。
エンドユーザーが意図せずにこれらのアクセスを拒否してしまい、目当てのアプリケーションを使用するのに混乱したり、手間どったりすることがあります。
組織において管理下にあるデバイスであれば、プロファイルやスクリプトなどで強制的にアクセス権を付与したいと考えますが、カメラなど一部の項目に関しては、エンドユーザーのみが操作可能です。
今回は、Jamf Proを使用してこの制約の中で対応する方法を紹介します。
また、この記事はFOLIO Advent calendar 2020の3日目の記事でもあります。
- User Consentについて
- PPPC (Privacy Preferences Policy Control)について
- PPPCで許可できないUser Consentの項目を許可してみる
- まとめ
- 宣伝
User Consentについて
macOSでは、High Sierra(10.13)からUser Consentと呼ばれるプライバシー保護機能が搭載されました。 アプリケーションがカメラやマイクなどにアクセスする場合は、エンドユーザーの許可が必要です。
アプリケーションが初めてUser Consentの対象となる項目にアクセスする際には、ダイアログでエンドユーザーに対してアクセス権の確認がされます。
以降は、 [システム環境設定] > [セキュリティとプライバシー] > [プライバシー] からであれば個別にアクセス権を変更できます。
PPPC (Privacy Preferences Policy Control)について
PPPCは、デバイスのUser ConsentをMDMのポリシーで制御するためのしくみです。 これにより、指定したアプリケーションの対するUser Consentを制御できますが、以下の表に示すとおり、一部許可ができない項目が存在します。
項目 | 制御 | 役割 |
---|---|---|
Accessibility | 許可 / 拒否 | アクセシビリティ(たとえば、マウス操作)に関するシステムの制御 |
AddressBook | 許可 / 拒否 | 連絡先アプリケーションで管理されている連絡先情報へのアクセス |
Admin Files | 許可 / 拒否 | 管理者用の一部のファイルへのアクセス |
All Files | 許可 / 拒否 | すべてのユーザーのメール、メッセージ、Safari、ホーム、Time Machineバックアップ、および特定の管理設定などのデータへのアクセス |
Calendar | 許可 / 拒否 | カレンダーアプリケーションで管理されているイベント情報へのアクセス |
Camera | 拒否 | カメラへのアクセス |
Desktop Folder | 許可 / 拒否 | 「デスクトップ」フォルダ(/Users/username/Desktop )へのアクセス |
Document Folder | 許可 / 拒否 | 「書類」フォルダ(/Users/username/Documents )へのアクセス |
Download Folder | 許可 / 拒否 | 「ダウンロード」フォルダ(/Users/username/Downloads )へのアクセス |
File Provider Presence | 許可 / 拒否 | ファイルプロバイダで管理されているファイルをユーザーが使用している状況の取得 |
Listen Event | システム環境設定で許可1 / 拒否 | アプリケーションがCoreGraphicsおよびHIDAPIを使用して、すべてのプロセスからのCGEventおよびHIDイベントのリッスン(受信) |
Media Library | 許可 / 拒否 | Apple Music、ミュージックとビデオのアクティビティ、およびメディアライブラリへのアクセス |
Microphone | 拒否 | マイクへのアクセス |
Network Volumes | 許可 / 拒否 | SMBなど、ネットワークボリューム上のファイルへのアクセス |
Photos | 許可 / 拒否 | 写真アプリケーションで管理されている画像(/Users/username/Pictures/Photos Library.photoslibrary )へのアクセス |
Post Events | 許可 / 拒否 | CoreGraphics APIを使用してCGEventsをシステムイベントストリームに送信 |
Reminders | 許可 / 拒否 | リマインダーアプリケーションで管理されているリマインダー情報へのアクセス |
Removable Volumes | 許可 / 拒否 | リムーバブルボリュームへのアクセス |
Screen Capture | システム環境設定で許可1 / 拒否 | 画面キャプチャの許可 |
Speech Recognition | 許可 / 拒否 | 音声認識機能を介した音声データのAppleへの送信 |
ポリシーが矛盾する場合は、より厳しいほうが優先されるようになっています。 また、この機能は、Mojave(10.14)から追加された機能であるため、それ以前のバーションでは使用できません。
PPPCで許可できないUser Consentの項目を許可してみる
今回はZoomアプリケーションを例に、PPPCつまり、MDMの機能では許可できないUser Consentの項目を、Jamf Proを使用して許可する方法を紹介します。
ZoomアプリケーションはPPPCでは許可できない、カメラ、マイクおよび画面キャプチャへのアクセス権を要求するため、これらを強制的に許可するようにしてみます。
スクリプトの取得
今回はTCC-Permitterを使用します。 このスクリプトは、許可したいBundle IDまたはバイナリパスとTCCサービス名を指定すると、拒否されているUser Consentの項目を許可できます。
デフォルトがdev
ブランチ、つまり開発中のブランチであるため、安定版が必要な場合はリリース一覧より、任意のリリースバーションのソースコードからTCC-Permitter.sh
を取得してください。
Jamf ProにTCC-Permitterを設定
ここからはJamf Proにログインをして作業します。
スクリプトの登録
-
[設定] > [コンピュータの管理] > [スクリプト]から新規作成に進みます。
- カテゴリの設定は必須ではありませんが、このスクリプトを分類するのに使用できます。以下の画像では例としてSecurityを指定しています。
-
次に、ScriptセクションにGitHubからコピーしてきた
TCC-Permitter.sh
を貼り付けます。 -
Optionsセクションのパラメータ4にバンドルIDまたはバイナリパス、パラメータ5にTTCのサービス名を指定することがわかるような名前を入力してください。
- これは設定しなくても動作しますが、ポリシー側で使用する際にわかりやすくなるので設定しています。
- 以下の画像では例としてBundle ID or Binary Path、TTC Service Nameという名前を設定しています。
-
[保存]してスクリプトの登録は完了です。
拡張属性の登録
- [設定] > [コンピュータの管理 - 管理用フレームワーク] > [拡張属性]から新規作成に進みます。
- 各値を設定します。
- 表示名:
Zoom disabled TCC service values
- データタイプ:
String
- インベントリの表示:
Extension Attributes
- コンピュータのインベントリ情報のどのセクションで表示するかの設定であるため、任意のものを指定してかまいません。
- 入力タイプ:
Script
-
スクリプト入力欄に以下のスクリプトの
BUNDLE_ID_OR_BINARY_PATH
をus.zoom.xosに変更して貼り付けます。#!/bin/zsh export PATH=/usr/bin:/bin:/usr/sbin:/sbin CURRENT_USER=$(stat -f%Su /dev/console) BUNDLE_ID_OR_BINARY_PATH="!!SET BUNDLE ID OR BINARY PATH YOU WANT!!" if [[ ! "${CURRENT_USER}" ]] || [[ "${CURRENT_USER}" = "root" ]];then exit 0 fi CURRENT_USER_HOME_DIRECTORY=$(dscl /Local/Default read "/Users/${CURRENT_USER}" NFSHomeDirectory | awk '{print $2}') DIABLED_VALUES=$(sqlite3 "${CURRENT_USER_HOME_DIRECTORY}/Library/Application Support/com.apple.TCC/TCC.db" "SELECT service FROM access WHERE client = '${BUNDLE_ID_OR_BINARY_PATH}' AND allowed = '0'") echo "<result>${DIABLED_VALUES}</result>"
-
- 表示名:
- [保存]して拡張属性の登録は完了です。
スマートコンピュータグループの設定
- [コンピュータ] > [Smart Computer Groups]から新規作成に進みます。
- コンピュータグループセクションの表示名に認識しやすい名前を設定します。
- 以下の画像では例としてZoom Camera or Microphone or ScreenCaptureを指定しています。
- Criteriaセクションに先程作成した拡張属性「Zoom disabled TCC service values」の値の条件を指定します。
- カメラ、マイクおよび画面キャプチャのいずれかが拒否されているスマートコンピュータグループを作成するので、以下の画像のようにそれぞれをor条件でつなぎます。
- [保存]してスマートコンピュータグループの設定は完了です。
ポリシーの設定
- [コンピュータ] > [ポリシー]から新規作成に進みます。
- Generalセクションで各値を設定します。
- 表示名:
Allow Camera or Microphone or ScreenCapture to Zoom
- カテゴリ:
Security
- カテゴリの設定は任意です。
- トリガー:
Recurring Check-in
- 実行頻度:
Ongoing
- ScopeにSmart Computer Groupを使用するため、Ongoingで問題ないです。
- 表示名:
- 次に、スクリプトの項目を選択し、登録したTCC-Permitterのスクリプトを追加します。
- パラメータ4とパラメータ5に値を設定します。
- パラメータ4:
us.zoom.xos
- パラメータ5:
Camera,Microphone,ScreenCapture
- パラメータ4:
-
次に、Scopeセクションからターゲットコンピュータを先程作成したスマートコンピュータグループ「Zoom Camera or Microphone or ScreenCapture」を設定します。
- [保存]してポリシーの登録は完了です。
TCC-Permitterで使用するパラメータの取得方法
TCC-Permitterスクリプトの「パラメータ4」で使用するパラメータは、Bundle IDまたはバイナリパスを指定する必要があります。 バイナリパスはすぐわかると思いますが、アプリケーションの場合は以下のようなコマンドを実行すると簡単に取得できます。
mdls -name kMDItemCFBundleIdentifier -r <アプリケーション名>
# 例えばZoomだったら
# mdls -name kMDItemCFBundleIdentifier -r /Applications/zoom.us.app
また、もし現在のデバイスの許可の状態を見て判断したい場合は、
sqlite3 -header -csv "$HOME/Library/Application Support/com.apple.TCC/TCC.db" "SELECT service, client, allowed FROM access"
で確認できます。
注意点
一度、エンドユーザーがUser Consentのアクセス権に関するダイアログでアクションを行ってからでないと、このスクリプトは期待どおりには動作しません。 エンドユーザーがアプリケーションを起動しておらず、アクションを何もしていない場合には許可させることはできません。
ただ、間違ってエンドユーザーがアクセスを拒否してしまい、対象のアプリケーションが使えないという状況は改善できるため、ほとんど問題にはならないと思います。
まとめ
今回はTCC-Permitterを使用して、Jamf ProでmacOSのプライバシー保護機能のアクセス権を付与する方法を紹介しました。
さらに、スマートコンピュータグループを使用してより柔軟にポリシーを適用できるようにしてみました。
宣伝
現在、FOLIO ではコーポレートITの人材を募集しています。 もし興味がありましたら、@kenchan0130のTwitterまでお声がけください。