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 の使用や、その他のコマンドオプションとの連携の詳細は、オプション セクションを参照してください。
次のオプションがサポートされています。
リソースが構成されているクラスタを指定します。このオプションが必要になるのは、コマンドが大域ゾーンで実行されるが、ゾーンクラスタのリソースの 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で指定されたゾーンではなく、大域ゾーン内のファイルのパス名を識別します。
指定されている場合は、実行可能ファイルの所有者、Application_user プロパティー設定、または Resource_security プロパティー設定には関係なく、このユーザー名がアプリケーションユーザー名になります。–U オプションを使用できるのは、呼び出し元にアプリケーションのユーザー名を判断するための独自のメカニズムがあり、呼び出し元で実行可能プログラムの所有権とアクセス権のみをチェックする場合です。 呼び出し元の実際のユーザー ID が root 以外で、–U オプションで root が指定されると、エラーが発生します。
–Z オプションとともに –U オプションが使用されている場合、指定された username は、必ずしも –Z オプションで指定されている zoneclustername ではなく、そのコマンドが実行されているゾーン内で有効である必要があります。
RGM リソースの名前は、このコマンドの実行に関連付けられています。–U オプションが同時に指定されていることがなければ、アプリケーションユーザー名は、このリソースの Application_user プロパティーから取得されます。リソースに Application_user プロパティーが存在しないか、そのプロパティーが設定されていない場合、アプリケーションのユーザー名は実行可能ファイルの所有者になります。
–U が指定されておらず、Resource_security が COMPATIBILITY に設定されている場合は、Application_user プロパティーの設定には関係なく、アプリケーションユーザー名は呼び出し元のプロセスの実ユーザー ID に設定されます。–U が指定されておらず、Resource_security プロパティーが OVERRIDE に設定されている場合は、Application_user プロパティーの設定には関係なく、アプリケーションユーザー名は実行可能ファイルの所有者に設定されます。
–Z とともに –R オプションが指定されている場合、そのリソースの Application_user プロパティーは、必ずしも –Z オプションで指定されている zoneclustername ではなく、そのコマンドが実行されているゾーン内で有効なユーザー名を指定する必要があります。
呼び出し元のプロセスがアプリケーションユーザーとして実行する実行可能ファイルのフルパス名。–Z オプションが指定されている場合、cmd-path は、–Z オプションで指定されている zoneclustername ではなく、そのコマンドが実行されているゾーンを基準にして評価されます。
–R と –U のどちらも指定されていない場合、アプリケーションユーザー名は実行可能ファイルの所有者です。ただし、Resource_security が COMPATIBILITY に設定されている場合を除きます。その場合、アプリケーションユーザー名は呼び出し元のプロセスの実ユーザー ID に設定されます。
計算されたアプリケーションユーザーが root (スーパーユーザー) であるが、呼び出し元の実際のユーザー ID が root 以外の場合、アプリケーションのユーザー名は呼び出し元の実際のユーザー ID になります。
次の 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) で説明されています。
セキュリティーチェックに合格し、コマンドをアプリケーションユーザーで実行できます。ただし、出力が stderr に書き込まれると、アプリケーションユーザーの取得またはチェックでエラーが発生したことが示されます。このような警告メッセージは、ユーザーに戻すようにしてください。
コマンドが無効な引数で呼び出されています。この場合、アプリケーションユーザーは stdout に書き込まれません。起こり得る複数のエラーの 1 つに関する詳細なエラーメッセージが stderr に書き込まれます。
パス引数で識別されるファイルが実行可能ファイルでないか、–U オプションは root を指定しているが、呼び出し元の実ユーザー ID が root 以外であるか、または Resource_security が SECURE であり、かつ次の条件のいずれかが適用されます。
実行可能ファイルは、だれでも読み書き可能です。
アプリケーションユーザーは root であり、実行可能ファイルはグループから書き込み可能です。
SCHA_ERR_ACCESS 終了コードはセキュリティー違反を示し、呼び出し元でコマンドを実行してはいけません。
rname 引数では、有効なリソース名を識別しません。この場合、アプリケーションユーザーは stdout に書き込まれません。エラーメッセージは stderr に書き込まれます。
Resource_security が SECURE であり、かつ Application_user 名が有効なユーザー ID にマップされません。SCHA_ERR_CHECKS 終了コードはセキュリティー違反を示し、呼び出し元でコマンドを実行してはいけません。
次の属性については、attributes(5) を参照してください。
|
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