【Jamf Connect】 Mac のローカルアカウントを管理者権限に昇格させる
こんにちは。突然ですが、みなさんがお仕事で使用している Mac のローカルユーザには管理者権限はついていますか?
端末管理者からすると、端末利用者のローカルユーザアカウントへ管理者権限を付与するか否かは管理上大きな検討項目だと思います。
管理者権限を付与しなければ、セキュリティリスクを高めるような設定変更やアプリの導入を避けることができますが、反面、端末利用者側での自由度が下がりユーザ体験は悪くなってしまいます。
そのため、セキュリティリスクとユーザ体験のバランスを取って、端末利用者が必要なときに必要な分だけ権限を昇格できる仕組みを検討したいというケースもあるかと思います。
今回は、 Jamf Connect のバージョン 2.33.0 にて公開された新しい機能 「Jamf Connect を使ったユーザ特権昇格」をご紹介いたします。
Macのローカルアカウントに対する管理者権限付与の新しい選択肢になると思います。
1. Jamf Connect を使ったユーザ特権昇格とは
下記のような説明がありますが
簡単に言うと、標準ユーザ権限で利用されている Mac において
端末管理者が予め決めた時間・回数だけ、端末利用者自身がJamf Connect MenuBar を使って管理者権限に昇格できるというものです。
2. 利用前提
Jamf Connectドキュメントには以下2つが要件として挙げられていましたが、
下記のほうが近い気がします。
3. 設定方法
今回は下記の構成で設定を実施します。
端末のOS:macOS 14.4.1
アイデンティティプロバイダ (IdP):Azure Entra ID
実施する内容はざっくり以下の2つです。
ユーザ特権昇格を有効化する構成プロファイルを作成する
作成した構成プロファイルを Jamf Pro から配布する
それでは、詳細に入りましょう!
3-1. ユーザ特権昇格を有効化する構成プロファイルを作成する
Jamf Connect Configuration Appを使用しつつ、設定の重複を省きながら下記のようなplistを作成することをおすすめします。
※すでにJamf Connectを利用中で、今回ご紹介する機能の利用に必要な追加の設定のみを構成するイメージで設定例を記述しています。
<Jamf Connect Login側の設定の例>
・管理者の属性(OIDCAdminAttribute)は、Microsoft Entra IDなら「roles」。
Oktaなら「groups」です。
すでにJamf Connect Loginの構成プロファイルで設定されている場合、(=すでに、ロールやグループによるローカルアカウント作成時の管理者権限付与を実施している場合) この設定は実施済なので新たに実施する必要はありません。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>OIDCAdminAttribute</key>
<string>roles</string>
</dict>
</plist>
<Jamf Connect Menubar用の設定の例>
・管理者権限の残り時間タイマーを表示する(UserPromotionTimer)
・管理者権限昇格時間は1回30分(UserPromotionDuration)まで
・権限昇格時にIdP認証を要求(VerifyUserPromotion)
・毎月10回(UserPromotionLimit)まで権限昇格を許可する
・特権昇格の理由の入力を要求(UserPromotionReason)
・ユーザ特権昇格の選択肢(UserPromotionChoices)をカンマ区切りで入力
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>TemporaryUserPermissions</key>
<dict>
<key>TemporaryUserPromotion</key>
<true/>
<key>UserPromotionChoices</key>
<array>
<string>Download software</string>
<string>Update software</string>
</array>
<key>UserPromotionDuration</key>
<integer>30</integer>
<key>UserPromotionLimit</key>
<integer>10</integer>
<key>UserPromotionReason</key>
<true/>
<key>UserPromotionTimer</key>
<true/>
<key>VerifyUserPromotion</key>
<true/>
</dict>
</dict>
</plist>
設定の重複がないように、Jamf Connect Configuration App の Form ビューである程度設定を作成した後、plist ビューに切り替えて(Jamf Connect Configuration 画面右上にある[</>]の記号をクリック)必要な部分のみ切り出してplistファイルを作成すると、設定しやすいと思います。
例)Jamf Connect Configuration 画面での設定
3-2. 作成した構成プロファイルをJamf Proから配布する
作成した plist を Jamf Pro の構成プロファイル > 「アプリケーションとカスタム設定」ペイロード にアップロードしてから対象の端末に配布します。
環境設定ドメイン : com.jamf.connect (MenuBar設定の場合)
プロパティリスト : 作成した.plistをアップロード
Loginの設定も追加する場合は、 環境設定ドメイン:com.jamf.connect.login のプロファイルも作成して配布してください。
4. 動作確認
4-1. 管理者権限昇格のリクエスト
メニューバー > [Request Admin Privileges] から管理者権限昇格のリクエストを行います。
添付のようなリクエスト理由を選択・入力する画面がポップアップされます。
※選択肢は設定により編集可能です
権限昇格時にIdP認証を要求(VerifyUserPromotion)の設定をしている場合は、
このあとIdP認証の画面(Microsoft Entra ID や Okta等)が表示されます。
管理者権限が付与されると、管理者権限昇格済のポップアップが表示され、メニューバーの横に残り時間が表示されます。
4-2. 管理者権限利用終了(降格)
管理者権限の利用を終える(降格させる)場合は「管理者権限を終了」から終了します。
4-3. 電源OFF・ログオフした場合
電源OFFの時間やログオフ中も継続して利用時間としてカウントされるようです。
4-4. スリープした場合
一方、意外なことにスリープした時は利用時間は一時停止するようです。
再開するとスリープした時間から再開されました。
4-5. 指定時間を超えた場合
指定時間が過ぎると管理者権限は自動的に剥奪されます。
4-6. 月内指定回数を超えた場合
指定回数を超えると、管理者権限昇格のリクエストができなくなります。
この例では、4月の指定回数を超えたので5月1日になるまで管理者権限昇格をリクエストできないとメッセージが出ています。
4-7. ポリシーからコマンドラインで起動
スクリーンショットは省きますが、ポリシーからコマンドラインで権限昇格・権限降格も可能です。
権限昇格ポリシーが起動されると、リクエスト理由を選択・入力する画面がポップアップされ、(設定により)IdP認証が求められます。
また、権限降格ポリシーが起動されると、自動的に権限が剥奪され、権限が剥奪された旨の通知が表示されます。
4-8. アプリロールごとの管理者権限昇格時間を設定
実際の動作のスクリーンショットは省きますが、添付のイメージのようにJamf Connect アプリケーションのアプリロールごとに管理者権限昇格時間を設定することができます。
この例の場合、アプリロール「Standard」が割り当てられているユーザは20分間管理者権限に昇格します。「Standard2」が割り当てられているユーザは30分間。いずれでもないユーザは30分間という制限になっています。
4-9. 権限昇格状況のログ確認
ログ出力については Jamf Connectドキュメント に記載がある通り、各端末のターミナルから、下記のコマンドで権限昇格ログメッセージをターミナルウィンドウに直接表示可能です。
log stream --style compact --predicate '(subsystem == "com.jamf.connect.daemon") && (category == "PrivilegeElevation")'
log stream --style compact --predicate '(subsystem == "com.jamf.connect") && (category == "PrivilegeElevation")'
ただ、残念ながら現状では Jamf Connect や Jamf Pro のみで管理者側から利用者の権限昇格状況を確認する仕組みがありません。
Jamf ProtectのUnified Logging の仕組みを使用して SIEM に情報を収集するようにするか、各端末ローカルにファイル出力するように設定しておいて定期的に収集するようなやり方を検討する必要があります。
5. おまけ - 当月の昇格回数の取得
実際に運用してみると、ログの取得は難しいとしても、昇格回数くらいは確認したいと考えると思います。
下記のコマンドで添付のイメージのように昇格回数のログをターミナルに出力させることができます。
log show --style compact --debug --info --predicate "subsystem == 'com.jamf.connect.daemon' AND message CONTAINS 'elevations this month:'"
これをうまく利用して、当月の最終レコードから値を取得する拡張属性を作ってみました。
Jamf Connect - Privilege Elevation Counter.xml
拡張属性のスクリプトは以下のとおりです。
#!/bin/bash
#当月の取得
log_month=`date +"%Y"-%m`
#当月の昇格ログから最後の昇格カウントを取得する
cnt=`log show --style compact --debug --info --predicate "subsystem == 'com.jamf.connect.daemon' AND message CONTAINS 'elevations this month:'" | grep "${log_month}" | awk 'END {print $NF}'`
echo "<result>$cnt</result>"
6. まとめ・感想
簡単に設定でき、利用できる点が特によいと思いました。
Jamf Connect を導入されている組織では利用を検討する価値があると思います!
これまでも macのローカルアカウントに対して管理者権限を付与する方法としては、MakeMeAnAdmin スクリプト や SAP社の macOS-enterprise-privileges などがありましたが、それらと比べてみても手軽さと機能のバランスがよいと感じました。
○ 良い点
[端末利用者観点で] 全体的にわかりやすい
- 権限昇格・降格操作が簡単
- 管理者権限利用の残り時間がリアルタイム表示される
(昇格回数も利用者に見えるようになっているより良いと思います)[端末管理者観点で] 構成プロファイル設定のみで利用でき、設定自体も簡単
✗ イマイチな点
(当たり前ですが・・・)Jamf Connect のライセンスを購入する必要がある
ログ管理の機能が Jamf Connect や Jamf Proのみで完結せず、きちんとログ管理するにはSplunk等のSIEMが必要となる点
興味を持っていただけましたら、ぜひお試しください!
以上、 今回はエンジニアの中峯が担当いたしました。
最後まで読んでいただき、ありがとうございました。