Oracle® Solaris Cluster リファレンスマニュアル

印刷ビューの終了

更新: 2014 年 7 月、E51742-01
 
 

scha_check_app_user (1HA )

名前

scha_check_app_user - アプリケーションユーザー名の取得と所有権およびアクセス権のチェック

形式

scha_check_app_user [-R resource] [-U username] [-Z 
     zoneclustername] cmd-path

説明

scha_check_app_user コマンドは、Resource Group Manager (RGM) の制御下にあるリソースによって使用される構成済みのアプリケーションユーザー名を取得します。cmd-path で指定される実行可能ファイルの所有権およびアクセス権もチェックされます。この実行可能ファイルは通常、リソースのメソッドまたはモニターで実行されるアプリケーションプログラムになり、su(1M) などのラッパーを使用して、ユーザー ID を構成済みのユーザーに設定します。リソースメソッドまたはモニターは、アプリケーションプログラムの実行前に scha_check_app_user を呼び出します。scha_check_app_user の出力に応じて、メソッドまたはモニターは、エラーを返すか、セキュリティー関連の問題が検出された場合は警告メッセージを出力します。

scha_check_app_user コマンドは、構成済みのユーザーの名前を標準出力 (ファイル記述子 1) に書き込み、セキュリティー警告またはエラーメッセージを標準エラー (ファイル記述子 2) に書き込みます。終了コードは、構成済みのセキュリティーポリシーによりコマンドの実行が許可されるかどうかを示します。終了コードが 0 の場合、呼び出し元はアプリケーションユーザーとしてコマンドの実行を試みることができます。終了コードが 0 以外の場合は、エラーが返されるため、呼び出し元でアプリケーションユーザーとしてコマンドを実行しようとしないでください。

使用法

scha_check_app_user を呼び出すスクリプトでは、コマンドの出力を使用して次を判断できます:

  • コマンドを実行する必要のあるユーザー ID

  • コマンドの実行を許可するかエラーをスローするか

  • セキュリティーの問題が検出された場合に、ユーザーに渡すエラーまたは警告メッセージ

scha_check_app_user コマンドは、r_properties(5) のマニュアルページで説明されている Resource_security および Application_user プロパティーと連動します。

scha_check_app_user コマンドの動作は、Resource_security プロパティーの設定に依存します。Resource_security プロパティーは、グローバルクラスタおよび各ゾーンクラスタで値が異なる場合があります。scha_check_app_user で使用される Resource_security の値は、コマンドが実行されるクラスタのプロパティーの値です。

scha_check_app_user コマンドは、アプリケーションプログラムが実行されるのと同じコンテキストで呼び出すように意図されています。たとえば、アプリケーションプログラムが大域ゾーンで実行される場合は、scha_check_app_user も大域ゾーンで実行するようにしてください。

通常のユースケースは次のいずれかになります:

  • リソースとそのリソースグループがグローバルクラスタに構成され、scha_check_app_user プログラムがグローバルクラスタで実行されている。

  • リソースとそのリソースグループがゾーンクラスタに構成され、scha_check_app_user プログラムがゾーンクラスタで実行されている。

どちらのユースケースでも、–Z zoneclustername オプションをコマンドに指定する必要はありません。

–Z zoneclustername オプションが使用されるのは、アプリケーションプログラムが大域ゾーン内で実行されるが、そのアプリケーションプログラムがゾーンクラスタのリソースに関連付けられている場合です。これは通常は必要ありませんが、Global_zone プロパティーが TRUE に設定されているリソースタイプで必要になる場合があります。詳細は、rt_properties(5) を参照してください。

–Z の使用や、その他のコマンドオプションとの連携の詳細は、オプション セクションを参照してください。

オプション

次のオプションがサポートされています。

–Z zoneclustername

リソースが構成されているクラスタを指定します。このオプションが必要になるのは、コマンドが大域ゾーンで実行されるが、ゾーンクラスタのリソースの Application_user プロパティーにアクセスする必要がある場合のみです。–Z オプションは、ゾーンクラスタ内で異なるゾーンクラスタにアクセスするために使用することはできません。

–Z オプションを省略すると、scha_check_app_user コマンドが実行されるクラスタ (グローバルクラスタとゾーンクラスタのいずれか) 内にリソースが存在するとみなされます。

scha_check_app_user コマンドが大域ゾーンで実行され、–Z および –R オプションが両方とも指定されている場合、–R で指定した resource は、グローバルクラスタではなく、–Z で指定したゾーンクラスタに存在します。どちらの場合も、エージェントの開発者は、リソースがゾーンクラスタで構成されている場合でも、Application_user プロパティーで指定したユーザー名を大域ゾーンで有効にする必要がある旨をエンドユーザーに警告するようにしてください。

scha_check_app_user コマンドが大域ゾーン内で実行され、–Z オプションが指定されている場合、cmd-path 引数は、–Zで指定されたゾーンではなく、大域ゾーン内のファイルのパス名を識別します。

–U username

このユーザー名を指定した場合は、実行可能ファイルの所有者、Application_user プロパティーの設定、または Resource_security プロパティーの設定に関係なく、アプリケーションのユーザー名になります。–U オプションを使用できるのは、呼び出し元にアプリケーションのユーザー名を判断するための独自のメカニズムがあり、呼び出し元で実行可能プログラムの所有権とアクセス権のみをチェックする場合です。 呼び出し元の実際のユーザー ID が root 以外で、–U オプションで root が指定されると、エラーが発生します。

–U オプションが –Z オプションとともに使用されている場合、指定された username は、コマンドが実行されるゾーンで有効である必要があますが、–Z オプションで指定されている zoneclustername で必ずしも有効である必要はありません。

–R resource

RGM リソースの名前は、このコマンドの実行に関連付けられています。–U オプションも指定されていない場合、アプリケーションのユーザー名は、このリソースの Application_user プロパティーから取得されます。リソースに Application_user プロパティーが存在しないか、そのプロパティーが設定されていない場合、アプリケーションのユーザー名は実行可能ファイルの所有者になります。

–U が指定されておらず、Resource_security が COMPATIBILITY に設定されている場合は、Application_user プロパティーの設定に関係なく、アプリケーションのユーザー名は、呼び出し元のプロセスの実際のユーザー ID に設定されます。–U が指定されておらず、かつ Resource_security プロパティーが OVERRIDE に設定されている場合、Application_user プロパティー設定には関係なく、アプリケーションユーザー名は実行可能ファイルの所有者に設定されます。

–R オプションが –Z オプションとともに指定されている場合は、コマンドが実行されるゾーンで有効なユーザー名をリソースの Application_user プロパティーで指定する必要がありますが、–Z オプションで指定されている zoneclustername 内で必ずしも有効ある必要はありません。

cmd-path

呼び出し元のプロセスがアプリケーションユーザーとして実行する実行可能ファイルのフルパス名。–Z オプションが指定されている場合、cmd-path は、–Z オプションで指定されている zoneclustername ではなく、コマンドが実行されるゾーンと比較して評価されます。

–R–U も指定されていない場合は、Resource_security が COMPATIBILITY に設定されていないかぎり、アプリケーションのユーザー名は実行可能ファイルの所有者になり、この場合、アプリケーションのユーザー名は呼び出しプロセスの実際のユーザー ID に設定されます。

計算されたアプリケーションユーザーが root (スーパーユーザー) であるが、呼び出し元の実際のユーザー ID が root 以外の場合、アプリケーションのユーザー名は呼び出し元の実際のユーザー ID になります。

使用例 1 スクリプトでの scha_check_app_usersu の使用

次の bash スクリプトは、su(1M) を使用する前に、scha_check_app_user を呼び出し、myresource という名前の RGM リソースに関連付けられている、mycommand という名前のコマンドを実行します。

    COMMANDPATH=/opt/mypkg/bin/mycommand
    RESOURCENAME=myresource
    TMPFILE=$(/usr/bin/mktemp)

    # Here we are redirecting the error/warning messages into 
    # a temp file and will write them later. 
    # Instead, we could just let them flow out to stderr.
    APPUSER=$(/usr/cluster/bin/scha_check_app_user \ 
            -R $RESOURCENAME $COMMANDPATH 2>$TMPFILE)
    errcode=$?

    if [[ $errcode -ne 0 ]]; then
        # Security checks failed -- do not execute the program
        printf "Security checks failed on program %s:\n" $COMMANDPATH
        # Output the error messages
        /usr/bin/cat $TMPFILE
        /usr/bin/rm $TMPFILE
        exit errcode
    fi

    # There may still be warning messages in TMPFILE.
    # Write them for the user.
    /usr/bin/cat $TMPFILE
    /usr/bin/rm $TMPFILE

    # Application user name is in $APPUSER.
    # Execute mycommand with any necessary arguments.
    #
    # Note that the su command might still fail, for example, if
    # this script lacks the necessary privilege to execute as
    # the application user.
    #
    # Other command wrappers such as "su -" or "pfexec" could be used
    # here instead of plain "su".

    su $APPUSER $COMMANDPATH arg1 arg2

終了ステータス

次の終了ステータスコードが返されます。エラーコードは、scha_calls(3HA) で説明されています。

0 SCHA_ERR_NOERR

セキュリティーチェックに合格し、コマンドをアプリケーションユーザーで実行できます。ただし、出力が stderr に書き込まれると、アプリケーションユーザーの取得またはチェックでエラーが発生したことが示されます。このような警告メッセージは、ユーザーに戻すようにしてください。

3 SCHA_ERR_INVAL

コマンドが無効な引数で呼び出されています。この場合、アプリケーションユーザーは stdout に書き込まれません。起こり得る複数のエラーの 1 つに関する詳細なエラーメッセージが stderr に書き込まれます。

6 SCHA_ERR_ACCESS

パス引数で識別されるファイルが実行可能でないか、–U オプションで root を指定しており、呼び出し元の実際のユーザー ID が root 以外であるか、または Resource_security が SECURE であり、次のいずれかの条件が適用されます。

  • 実行可能ファイルは、だれでも読み書き可能です。

  • アプリケーションユーザーは root であり、実行可能ファイルはグループから書き込み可能です。

SCHA_ERR_ACCESS 終了コードはセキュリティー違反を示し、呼び出し元でコマンドを実行してはいけません。

14 SCHA_ERR_RSRC

rname 引数では、有効なリソース名を識別しません。この場合、アプリケーションユーザーは stdout に書き込まれません。エラーメッセージは stderr に書き込まれます。

16 SCHA_ERR_CHECKS

Resource_security は SECURE で、Application_user 名は有効なユーザー ID にマップされません。SCHA_ERR_CHECKS 終了コードはセキュリティー違反を示し、呼び出し元でコマンドを実行してはいけません。

属性

次の属性については、attributes(5) を参照してください。

属性タイプ
属性値
使用条件
ha-cluster/developer/api
インタフェースの安定性
発展中

関連項目

su(1M), pfexec(1), cluster(1CL), scha_cmds(1HA), scha_calls(3HA), scha_strerror(3HA), attributes(5), Oracle Solaris Cluster Data Services Developer’s Guide