Red Hat Training

A Red Hat training course is available for RHEL 8

5.16. Podman での事前実行フックの設定

プラグインスクリプトを作成して、コンテナー操作の詳細な制御を定義できます。特に、コンテナーイメージのプル、実行、リストなどの不正なアクションをブロックできます。

注記

ファイル /etc/containers/podman_preexec_hooks.txt は管理者が作成する必要があり、空であってもかまいません。/etc/containers/podman_preexec_hooks.txt が存在しない場合、プラグインスクリプトは実行されません。

次のルールがプラグインスクリプトに適用されます。

  • root 所有である必要があり、書き込み可能ではありません。
  • /usr/libexec/podman/pre-exec-hooks および /etc/containers/pre-exec-hooks ディレクトリーに配置する必要があります。
  • 英数字順に順次実行します。
  • すべてのプラグインスクリプトがゼロ値を返す場合、podman コマンドが実行されます。
  • いずれかのプラグインスクリプトがゼロ以外の値を返した場合、それは失敗を示します。podman コマンドは終了し、最初に失敗したスクリプトのゼロ以外の値を返します。
  • Red Hat では、スクリプトを正しい順序で実行するために、DDD_name.lang という命名規則を使用することを推奨します。

    • DDD は、スクリプトの実行順序を示す 10 進数です。必要に応じて、先頭に 1 つまたは 2 つのゼロを使用します。
    • name はプラグインスクリプトの名前です。
    • lang (オプション) は、指定されたプログラミング言語のファイル拡張子です。たとえば、プラグインスクリプトの名前は 001-check-groups.sh のようになります。
注記

プラグインスクリプトは作成時点で有効です。プラグインスクリプトの前に作成されたコンテナーは影響を受けません。

前提条件

  • container-tools モジュールがインストールされている。

手順

  • 001-check-groups.sh という名前のスクリプトプラグインを作成します。以下に例を示します。

    #!/bin/bash
    if id -nG "$USER" 2> /dev/null | grep -qw "$GROUP" 2> /dev/null ; then
        exit 0
    else
        exit 1
    fi
    • スクリプトは、ユーザーが指定されたグループに属しているかどうかを確認します。
    • USERGROUP は、Podman によって設定される環境変数です。
    • 001-check-groups.sh スクリプトによって提供される終了コードは、podman バイナリーに提供されます。
    • podman コマンドは終了し、最初に失敗したスクリプトのゼロ以外の値を返します。

検証

  • 001-check-groups.sh スクリプトが正しく動作するかどうかを確認します。

    $ podman run image
    ...

    ユーザーが正しいグループに属していない場合は、次のエラーが表示されます。

    external preexec hook /etc/containers/pre-exec-hooks/001-check-groups.sh failed