見出し画像

数分でできる!削除したアプリの再インストール

悪意の有無に関わらず、重要なソフトウェアが削除されるリスクはどこでも発生しえます。対象のソフトウエアが業務上重要なアプリであれば生産性の低下、セキュリティ上重要なものであった場合はセキュリテイ上の脅威にもさらされてしまいます。
今回ブログでは、Jamf ProとJamf Protectの強力な組み合わせを利用して、特定のアプリケーションが削除された場合に、自動的に再インストールするための方法をご案内したいと思います。

前提・概要

アプリの削除には以下の2通りあり、  
 ・ゴミ箱に捨てる  
 ・コマンドで削除
それぞれについてJamf Protectで振る舞いを検知し、Jamf Proからアプリのインストールを行うワークフローについてご説明いたします。

また、上記に加えてアプリのインストール失敗をリカバリするために1時間毎にアプリのインストール確認とインストールの再試行を行うポリシーの作成についてもご説明いたします。

全体的に操作の流れはこんな感じとなります:

※ スクリプトはこちらのリンクになります:Magic Hat の GitHubリポジトリ
※※ 今回はテストとして 「Adobe Acrobat Reader.app」を使用しました。
要に応じて値を変えてください。
※※※ 再インストールしたいアプリ用のポリシーを事前に準備してください。


1. Jamf Protectの設定

1-1. Jamf Protectについて

Jamf Protectとは? というかたはこちらをご覧ください。

1-2. カスタムAnalyticsの作成

今回は Jamf Protect を使用して2つのシステム動作を検出します:
 ・特定アプリをゴミ箱へ移動したとき
 ・特定アプリを削除したとき

上記の挙動を検出するために、カスタムAnalyticsを使用します。
カスタムAnalyticsの作成方法 (参照)

以下のスクリーンショット、情報にそって、2つのカスタムAnalyticsを作成しておきましょう。

1-2-1. 特定アプリをゴミ箱へ移動したときの検知

特定アプリをゴミ箱へ移動したときの検知をするAnalytics

Predicateはこちらです:

$event.type == 3 AND $event.path CONTAINS[cd] ".Trash/Adobe\ Acrobat\ Reader." AND $event.prevFile CONTAINS[cd] "/Applications/Adobe\ Acrobat\ Reader.app"

Jamf Proに Analytics の検出を送信するには、Analytic Actionsにて「Add to Jamf Pro Smart Group を選択し、Jamf Protect 拡張属性に入力する値を設定する必要があります。
ここの例では Identifier を「movedAdobeAcrobatReaderToTrash」としていますが、任意の値で結構です。

1-2-2. 特定アプリを削除したときの検知

特定アプリを削除したときの検知をするAnalytics

Predicateはこちらです:

$event.type  == 1 AND $event.path CONTAINS "Adobe\ Acrobat\ Reader.app/Contents/Info.plist"

Analytic Actions:
ここの例では Identifiervを「deleteAdobeAcrobatReader」としていますが、任意の値で結構です。

最後に、作成したカスタムAnalyticsをAnalytic Setに追加し、そのAnalytic SetをPlanに追加してください。

2. Jamf Proの設定

Jamf Proのコンソールでは、最初はJamf Protectに関する構成、つまり拡張属性とスマートコンピュータグループの作成を行います。
Jamf Pro での Analytic 修復の設定 (参照)

2-1. Jamf Protectの拡張属性作成

Analytics により自動入力されるコンピュータの拡張属性を Jamf Pro に追加する必要があります。

設定 > コンピュータ管理 > 拡張属性にて「テンプレートから新規作成 をクリックして、Jamf Applications 以下でJamf Protect - Smart Groups を選択して保存します。

2-2. Jamf Protectのスマートコンピュータグループ作成

Jamf Proで、Jamf Protectスマートグループを使用して、検出されたAnalyticに応答してグループメンバーシップを制御するスマートコンピュータグループを作成します。

  1. Jamf Pro で、コンピュータをクリックします。

  2. スマートコンピュータグループ をクリックします。

  3. 新規 をクリックします。

  4. コンピュータグループ タブで、グループ名等を設定します。

  5. クライテリア タブで、追加 > アドバンスクライテリアを表示 をクリックします。

  6. 先ほど作成した Jamf Protect 拡張属性を選択します。

  7. 以下の写真に類似している クライテリアオペレータ フィールドを構成します。
     フィールドには 1-2-1. 1-2-2. のAnalytic Action の Identifierに設定した値を入れてください。

  8. 保存 をクリックします。

注:値 フィールドは、Jamf Protect Analytic Action の Identifier フィールドと一致する必要があります。

2-3. スクリプト作成

特定のアプリケーションを再インストールし、デバイスをJamf Protect Smart Groupから削除するスクリプトとなります。

設定 > コンピュータ管理 > スクリプト にて作成してください。

スクリプト:https://github.com/Magichat-Inc/Jamf-Pro-Protect_reinstall-deleted-application/blob/main/reinstallAppAndRemoveFromProtectGroup.sh

オプション > Parameter Labels に次を指定します。
パラメータ 4:ポリシー ID (アプリケーションインストール用)

2-4. ポリシー作成

上記のスクリプトを使用して、ポリシーを作成します。

トリガー:カスタム
カスタムトリガー名:protect
 ※予約語なので必ず小文字で「protect」と設定してください。
実行頻度:Ongoing
Scope:2-2. で作成したスマートコンピュータグループを利用
上記のスクリプト (reinstallAppAndRemoveFromProtectGroup.sh) をスクリプトのペイロードで追加されます。$4 にパラメータを渡します。
$4 は 特定アプリをインストールするポリシーの ID です。

ここまでの設定で、Jamf Protectを使用してアプリの削除を監視し、削除されたタイミングでインシデントレスポンスとしてアプリのインストールポリシーを実行する「検出と修復のワークフロー」が実現できます。

2-5. 再インストール失敗の場合に備えた定期実行

2-4. まででご説明した検出と修復のワークフローでも
インストールの失敗まではケアできないので、これからご説明する1時間毎の定期インストールチェック&インストール処理(Launch Daemon)と組み合わせることで保護されていない状態を短くすることができます。

2-5-1. スクリプト作成
・Launch Daemonをスケジュールするタスク (reinstallTask.sh)
・アプリの存在確認スクリプト (reinstallSpecificApplication.sh)

設定 > コンピュータ管理 > スクリプト にて以下のように作成してください。

Launch Daemonをスケジュールするタスク (reinstallTask.sh)
バックグラウンドでプロセスとして走り、1 時間ごとに実行されます。
実行時に、他スクリプトを呼び出して (reinstallSpecificApplication.sh) 特定アプリが存在するかをチェックします。

スクリプト: https://github.com/Magichat-Inc/Jamf-Pro-Protect_reinstall-deleted-application/blob/main/reinstallTask.sh

アプリの存在確認スクリプト (reinstallSpecificApplication.sh)
スクリプトは特定アプリがインストールされてるかどうかをチェックします。特定のアプリがインストールされていない場合、再インストールを行います。

sudo jamf policy -id "${policyID}"

再インストールが終わったら、インベントリー更新を行います。

sudo jamf recon

スクリプトの上にある $4 & $5 はパラメータとなります。ポリシーから値をもらうことになります。

スクリプト: https://github.com/Magichat-Inc/Jamf-Pro-Protect_reinstall-deleted-application/blob/main/reinstallSpecificApplication.sh

オプション > Parameter Labels に次を指定します。

  • パラメータ 4:アプリ名 (例: Adobe Acrobat Reader.app)

  • パラメータ 5:ポリシー ID (アプリケーションをインストール用)

2-5-2. ポリシー作成
それぞれのスクリプト用にポリシーを作成します。
・Launch Daemonをスケジュールするポリシー
・アプリの存在確認をするポリシー

Launch Daemonをスケジュールするポリシー

トリガー:Recurring Check-In
実行頻度:Once per computer
Scope:対象端末を設定する
Launch Daemon (reinstallTask.sh) をスクリプトのペイロードで追加します。

アプリの存在確認をするポリシー

トリガー:なし
実行頻度:Ongoing
Scope:対象端末を設定する
スクリプト (reinstallSpecificApplication.sh) をスクリプトのペイロードで追加します。$4 と $5 にパラメータを指定してください。
$4 は特定アプリの名前です。
$5 は 特定アプリをインストールするポリシーの ID です。

最後にreinstallTask.shスクリプトを以下のように修正します:
・com.magichat.で始まる名を会社名に変更します。
・コード内の28行目にポリシーIDを編集します。
(2-5-2.で作った「アプリの存在確認スクリプト用のポリシー」の ID を入れます。)

<!-- 特定のアプリケーションの再インストールスクリプトのポリシーID --> 
<string>859</string

3. まとめ

このワークフローの設定は最初は少し難しく見えるかもしれませんが、設定する必要があるのは1回のみです。最終的には、必要なアプリケーションがユーザーのコンピュータから削除された場合でも、管理者が介入する必要がなく自動的に修復されます。

このアプローチにより、Jamf ProとJamf Protectの機能を組み合わせることで、ダウンタイムを最小限に抑えつつ生産性を向上するだけでなく、同時にエンドポイントのセキュリティも強化できます。

以上、 エンジニアのメリンダが担当いたしました。
最後まで読んでいただき、ありがとうございました。

ご参考

関するGitHubリポジトリ
Jamf Proドキュメンテーション
Jamf Protectドキュメンテーション
Jamf Pro での Analytic 修復の設定

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!

新しい記事の情報をツイッターで報告しておりますので是非@magichat2011もフォローして下さい!