Macでのリモートアクションスクリプト署名 (クラシック)

以下はMacデバイスでリモートアクションスクリプトを署名するためのステップバイステップガイドです。

本番環境では、コード署名証明書の使用をお勧めします。

証明書を作成する

  • Macデバイスでキーチェーンアクセスを起動します。

  • キーチェーンアクセス > 証明書アシスタント > 証明書を作成... に進みます。

Create a certificate
  • 証明書の名前を入力してください。

  • 証明書タイプCode Signing を選択します。

  • テスト目的の場合、デフォルトをオーバーライドする は未選択のままでかまいません。

  • 作成 をクリックして、完了 をクリックします。 システムが証明書を生成しました。

リモートアクションスクリプトの署名とパッケージ化

署名

標準のmacOSコードサインユーティリティを使用してリモートアクションスクリプトに署名します。

codesign -s <your certificate identity> --timestamp --prefix=<code signature identifier prefix> --force <script file name>

パラメーター:

-s <your certificate identity>

コード署名証明書のアイデンティティはキーチェーンにあります。 一般的には、証明書のサブジェクトコモン名または証明書のハッシュです。 完全な説明については、codesign マニュアルページを参照してください。

--timestamp

署名のための信頼できるタイムスタンプ。

--prefix

コード署名識別子のプレフィックス。 これにより、識別子に会社のアイデンティティを付加し、識別子をユニークにするのに役立ちます。 コード署名識別子生成ルールについては、codesign マニュアルページを参照してください。

--force

既に存在する場合、コード署名を強制的に書き換えます。

example_ra_script.sh リモートアクションスクリプトのテスト証明書の例:\

codesign -s "RA scripts code signing certificate" --timestamp --prefix=com.my-organisation.remote-action.macos. --force example_ra_script.sh

スクリプトファイルの署名は、ファイルに付随するファイルシステムの拡張属性で生成されます。 コード署名の詳細を取得し、署名を検証するには、codesignユーティリティを使用してください。

Screenshot of the terminal
Screenshot of the terminal

パッケージング

リモートアクションスクリプトを.tarアーカイブと.gzip圧縮でパッケージします。 拡張子".tar.gz"は必須です。

tar -czvf ./<your script name>.tar.gz ./<your script name>.sh

スクリプトファイルが署名されている場合、tarユーティリティはその拡張属性もパックします。 このようにして、システムはコード署名をスクリプトファイルと共に転送することができます。 制約

  • 1つのアーカイブには1つのスクリプトのみを入れることができます。

  • スクリプトファイルはルートパッケージフォルダーに入れる必要があり、./myscript/myscript.shパスは正しくありません。

  • スクリプトは.sh拡張子を持っている必要があります。

  • スクリプトファイル名は、macOSでデフォルトであるUTF-8でエンコードされている必要があります。

test.shスクリプトのパッケージングの例:

tar -czvf ./example_ra_script.tar.gz ./example_ra_script.sh

結果として得られるexample_ra_script.tar.gzは、リモートアクションスクリプトファイルです。

リモートアクションスクリプトの署名とパッケージ化

Nexthinkは、このスクリプトを使用して署名とパッケージ化のプロセスを簡素化することを推奨します。

#!/bin/bash
#
# script_signing.sh
# 
# Copyright (C) 2023 by Nexthink S.A., Switzerland. Any usage, copy or partial copy of
# this code without the explicit agreement of Nexthink S.A. is prohibited and will be
# pursued to the full extend of the law.
#
# The arguments for the script:
# - input script filename
# - output archive filename
# - Certificate owner
# - Prefix
#
 
 
# エラーハンドリング
set -euo pipefail
trap "echo unrecoverable error !" ERR
 
 
# codesignの確認
if [[ ! -x /usr/bin/codesign ]]
then
    echo "Error: this script requires that codesign is installed"
    exit 2
fi
 
# tarの確認
if [[ ! -x /usr/bin/tar ]]
then
    echo "Error: this script requires that tar is installed"
    exit 2
fi
 
 
# 引数の確認
if [[ $# -lt 4 ]]
then
    echo "Usage: script_signing.sh inputScriptFilename outputArchiveFilename CertificateOwner prefix"
    echo "Example: ./script_signing.sh script.sh script.tar.gz \"John Doe\" com.john.remote-action.macos."
    exit 1
fi
 
/usr/bin/codesign -s "$3" --timestamp --prefix="$4" --force "$1"
/usr/bin/tar czf "$2" "$1"

エンドポイントにインストールするためのコード署名証明書のエクスポート

キーチェーンにコード署名証明書があり、その公開番がエンドポイントにインストールしたい場合、まずエクスポートする必要があります。\

  • ポップアップウィンドウで、公開証明書として Certificate (.cer) ファイル形式を選択します。

エンドポイントのキーチェーンにコード署名証明書をインポート

  • コード署名された証明書をシステムキーチェーンにインポートし、Trusted Publisher 実行ポリシーでリモートアクションスクリプトを使用します。

  • .cerファイルをダブルクリックし、Keychain ドロップダウンメニューで System オプションを選択します。

Add certificates
  • 証明書をインポートするには、ルートパスワードをEnterします。

証明書が自己署名されている場合、コード署名にも信頼される必要があります。

  • ユーティリティのキーチェーンアクセス証明書をダブルクリックし、コード署名 オプションで 常に信頼 を選択します。

Certificate details

これらのタスクを自動化するには、セキュリティユーティリティ(外部リンク)または自分の自動化フレームワークを使用してください。

証明書がエンドポイントに正しくインポートされたことを確認する

  • 署名されたリモートアクションスクリプトをエンドポイントにコピーして展開します。

tar -xzvf example_ra_script.tar.gz
  • 署名を検証します。

codesign -vvvv -R="certificate leaf trusted" example_ra_script.sh

署名が正しくインポートされている場合、次の出力が表示されるはずです:


関連トピック

Last updated

Was this helpful?