PCを企業で管理するとき、管理者用のアカウントを作ったりしませんか?
ヘルプデスク対応などで、なにかあったときに、こちらでログインできるようにといった形で。
でもこの場合ってパスワード管理が手間なので、多くの場合、共通のパスワードを設定してしまいがち。
もし、自動で管理者アカウントのパスワードを端末ごとに違うものを生成、設定し、MDMで自動管理できる仕組みがあったら、めちゃめちゃ便利だし、セキュリティも向上すると思いませんか?
はい、今回はそんな仕組みづくりを作ってみました。
LAPSを導入しよう!
さて、今回作るような仕組み、ツールをLAPSといいます。
Local Administrator Password Solutionの略
今回はこのコードを使って実現していきます。
これを使用するには3つの物が必要です
- 自分のmacbook
- テスト用途のmacbook
- Jamf (Apple製品のMDM)
手順1. コンピュータの拡張属性を設定する
Jamfの[コンピュータ管理] – [拡張属性]から端末ごとのパスワードを設定する属性を作成します。
設定は下記のとおりです。
Display Name: {extAttName} // 拡張属性の名前
Description: This attribute will display the current Local Admin Password of the device. // なんでも良い
Data Type: String
Inventory Display: General
Input Type: Text Field
Recon Display: Location (Not Used) // 何でも良い

手順2. APIユーザを作成する
Jamfの[システム設定] – [Jamf Proユーザアカウントとグループ]からJamfにアクセスするためのユーザを作成します。
設定は下記のとおりです。
Username: {APIusername} // 好きなユーザ名を入れてください Access Level: Full Access Privilege Set: Custom Access Status: Enabled Full Name: {APIusername} // 氏名 Email Address: (Not Used) // 空白 Password: {APIpassword} // パスワードを入れてください Privileges: Computer Extension Attributes: RU (R=Read, U=Update) Computers: RU (R=Read, U=Update) Users: U (U=Update)
以下、実際の設定画面です。




手順3. スクリプトを登録する
ここのスクリプトをJamfに登録します。
手順4. ポリシーを作成する
LAPS for Mac用のポリシーを作成します。普通に作成すれば問題ありません。

手順5. リポジトリをクローンする
自分のmacbookにこのレポジトリをクローンしてください
git clone https://github.com/samuraidays/LAPSforMac
手順6. ポリシーパラメータを設定する
[ポリシー] – [スクリプト]でパラメータを設定します。
Parameter 4: 手順2で作成したAPIユーザ名 Parameter 5: 手順2で作成したAPIユーザのパスワードを暗号化したも Parameter 6: ローカル管理者ユーザ名 Parameter 7: ローカル管理者ユーザのパスワードを暗号化したもの Parameter 8: 手順1で作成した拡張属性名 Parameter 9: APIユーザのパスワードを復号化するためのSaltとPassphrase (形式: salt:passphrase) Parameter 10: ローカル管理者のパスワードを復号化するためのSaltとPassphrase (形式: salt:passphrase) Parameter 11: 空白
暗号化はmacOSなどのターミナルで下記のように行います。
# ./EncryptString.sh [暗号化したい文字] salt='XXXXXXXXXXXXXX' passphrase='XXXXXXXXXXXXXX' saltphrase='XXXXXXXXXXXXXX:YYYYYYYYYYYYYYYYY' encryptedString='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
手順7. 実行する
さて、あとはテスト用のmacOSで実際にテストしてみます。
ローカル管理者アカウントはすでに作成してある、ものとします。
% sudo jamf policy -trigger laps
Password:
Checking for policies triggered by "laps" for user "XXXX"...
Executing Policy Test - LAPS for Mac
Running script LAPSforMac...
Script exit code: 0
Script result: 2020-07-10 14:23:30 LAPSforMac [info] Retrieved previous password.
2020-07-10 14:23:31 LAPSforMac [info] Current password has match with retrieved password.
2020-07-10 14:23:32 LAPSforMac [info] resetting password for XXXX. (Keychain will not be updated!) Done
2020-07-10 14:23:33 LAPSforMac [info] Password of XXX has changed in success.
2020-07-10 14:23:34 LAPSforMac [info] Retrieve test passed.
2020-07-10 14:23:34 LAPSforMac [info] Done.
手順8. パスワードの確認
Jamfにログインして、パスワードがちゃんと保存されているか、確認します。

拡張属性の欄ができて、ちゃんとパスワードが保存されていますね。
今回使用したコードは平文(暗号化してない)で保存するような仕組みにしています。
これはJamfにログインできる人が限定的であること、そしてヘルプデスクのメンバーの生産性を考えて、リスクが低いといえる場合に使用してください。
別途、暗号化して保存する場合のコードも作成して記事で紹介しますね。
手順9. パスワードテスト
実際にこのパスワードが使用できるか確認します。
該当ユーザにスイッチしてログインできるかどうか、確認するなどしてください。
おわりに
このような仕組みを利用することで簡単でラクに、セキュリティを向上させることができます。
基本的にルールで縛ってセキュリティを向上させるという時代は終わったのかな、と思っています。ルールを作って善意で運用するより、システム的に生産性とセキュリティの両立を図っていきたいものです。