MFT ユーザー・サンドボックスの操作
ファイルの転送先および転送元とすることが可能なファイル・システム内の領域を、 転送を要求する MQMD ユーザー名に基づいて制限することができます。
エージェントがプロトコル・ブリッジ・エージェントまたは Connect:Direct® ブリッジ・エージェントの場合、ユーザー・サンドボックスはサポートされません。
userSandboxes=trueこのプロパティーが存在し、true に設定されている場合、エージェントは MQ_DATA_PATH/mqft/config/coordination_qmgr_name/agents/agent_name/UserSandboxes.xml ファイル内の情報を使用して、転送を要求するユーザーがアクセスできるファイル・システムの部分を判別します。UserSandboxes.xml XML は、
<sandbox> エレメントを 0 個以上含んでいる 1 つの <agent> エレメントで構成されています。 これらのエレメントは、どの規則がどのユーザーに適用されるかを記述します。 <sandbox> エレメントの user 属性は、
要求の MQMD ユーザーに対して突き合わせするために使用されるパターンです。
ファイル UserSandboxes.xml は、エージェントによって定期的に再ロードされ、ファイルへの有効な変更は、エージェントの動作に影響します。 デフォルトの再ロード間隔は 30 秒です。 この間隔は、agent.properties ファイルにエージェント・プロパティー xmlConfigReloadInterval を指定することによって変更できます。
userPattern= 属性または値を指定する場合、regex
user 属性は Java 正規表現として解釈されます。 詳しくは、 MFT で使用される正規表現を参照してください。
userPattern=regex
属性も値も指定しない場合、user 属性は次のワイルドカード文字を持つパターンとして解釈されます。- アスタリスク。0 個以上の文字を表します。
- 疑問符 (?)。ちょうど 1 文字を表します。
突き合わせは、ファイル内で <sandbox> エレメントがリストされている順序で実行されます。 最初のマッチングのみが使用され、ファイル内にあるかもしれないそれ以降の他のマッチングはすべて無視されます。 ファイルで指定された <sandbox> エレメントが、
転送要求メッセージに関連付けられた MQMD ユーザーとマッチングしない場合、
その転送はファイル・システムにアクセスできません。 MQMD ユーザー名と user 属性の間にマッチングが検出された場合、
そのマッチング項目を基にして、
転送に適用される規則セットが <sandbox> エレメント内で
識別されます。 この規則セットを使用して、
転送の一環として読み取りまたは書き込みが可能であるファイルやデータ・セットが判別されます。
<read> エレメント
および書き込み可能なファイルを識別する <write> エレメントを指定できます。 規則セットから <read> または <write> エレメントを省略した場合、
その規則セットに関連付けられたユーザーは、それぞれ読み取りまたは書き込みの実行を許可されないと想定されます。<read> 要素は <write> 要素の前になければならず、 <include> 要素は <exclude> 要素の前になければなりません。<read> または <write> のそれぞれのエレメントには、
ファイルがサンドボックス内にあるかどうかと、転送可能であるかどうかを決定するために使用されるパターンが 1 つ以上含まれています。 これらのパターンは、<include> および <exclude> エレメントを使用して指定します。 <include> または <exclude> エレメントの name 属性は、
突き合わせ対象となるパターンを指定します。 オプションの type 属性は、名前値がファイルまたはキュー・パターンであるかを指定します。 type 属性が指定されない場合、エージェントはパターンをファイルまたはディレクトリー・パス・パターンとして扱います。 以下に例を示します。<tns:read>
<tns:include name="/home/user/**"/>
<tns:include name="USER.**" type="queue"/>
<tns:exclude name="/home/user/private/**"/>
</tns:read>エージェントは <include> および <exclude> name パターンを
使用して、ファイル、データ・セット、キューの読み取りまたは書き込みが可能であるかどうかを
判別します。 操作は、正規のファイル・パス、データ・セット、またはキュー名が、
包含パターンの少なくとも 1 つにマッチングし、除外パターンに 1 つもマッチングしない
場合にのみ許可されます。 <include> および <exclude> エレメントの name 属性を
使用して指定するパターンには、エージェントを実行しているプラットフォームに適したパス分離文字および規則が使用されます。 相対ファイル・パスを指定する場合、パスはエージェントの transferRoot プロパティーを基準にして相対的に解決されます。- アットマーク文字 (@) が項目から欠落している場合、パターンはいずれかのキュー・マネージャーでアクセスされるキュー名として扱われます。 例えば、パターンが
nameである場合、name@**と同じように扱われます。 - アットマーク文字 (@) が項目の最初の文字である場合、パターンはキュー・マネージャー名として扱われ、キュー・マネージャーにあるすべてのキューにアクセスできます。 例えば、パターンが
@nameである場合、**@nameと同じように扱われます。
<include> および <exclude> エレメントの name 属性の一部として指定した場合、特別な意味を持ちます。- *
- 単一のアスタリスクは、ディレクトリー名、または データ・セット名または キュー名の修飾子の中の 0 個以上の文字と一致します。
- ?
- 疑問符 (?) は、ディレクトリー名、または データ・セット名か キュー名の修飾子の中の 1 文字にのみ一致します。
- **
- 2 つのアスタリスク文字は、ゼロ個以上のディレクトリー名、または データ・セット名または キュー名のゼロ個以上の修飾子に一致します。 また、パス分離文字で終わるパスには、パスの終わりに暗黙の
**
が追加されています。 したがって、/home/user/ は /home/user/**と同じです。
- /**/test/** は、パス内に test ディレクトリーを持つすべてのファイルに一致します。
- /test/file? は、/test ディレクトリー内のすべてのファイルと一致し、先頭にはストリング file の後に任意の単一文字が続きます。
- c:\test\*.txt は、c:\test ディレクトリー内のすべてのファイルを .txt 拡張子で一致させます。
- c:\test\**\*.txt は、'c:\test ディレクトリー内の任意のファイル、または .txt 拡張子を持つサブディレクトリーの 1 つに一致します。
//'TEST.*.DATA' は、最初の修飾子が TESTであり、2 番目の修飾子があり、3 番目の修飾子が DATAであるすべてのデータ・セットと一致します。- *@QM1 は、単一修飾子を持つキュー・マネージャー QM1 上のすべてのキューと一致します。
- TEST.*.QUEUE@QM1 は、TEST の最初の修飾子、2 番目の修飾子、および QUEUE の 3 番目の修飾子を持つキュー・マネージャー QM1上のすべてのキューと一致します。
- **@QM1 は、キュー・マネージャー QM1上の任意のキューと一致します。
シンボリック・リンク
UserSandboxes.xml ファイル内のファイル・パスで使用するシンボリック・リンクは、<include> および <exclude> エレメント内でハード・リンクを指定して、完全に解決する必要があります。 例えば、 /var が /SYSTEM/varにマップするシンボリック・リンクがある場合は、このパスを <tns:include
name="/SYSTEM/var"/>として指定する必要があります。そうしないと、意図した転送はユーザー・サンドボックス・セキュリティー・エラーで失敗します。例
この例は、以下の <sandbox> エレメントを AGENT_JUPITER の構成ディレクトリー内のファイル UserSandboxes.xml に追加することにより、MQMD ユーザー名 guest を持つユーザーが、エージェント AGENT_JUPITER が実行されているシステム上の /home/user/public ディレクトリーまたはそのサブディレクトリーから任意のファイルを転送できるようにする方法を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<tns:userSandboxes
xmlns:tns="http://wmqfte.ibm.com/UserSandboxes"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://wmqfte.ibm.com/UserSandboxes UserSandboxes.xsd">
<tns:agent>
<tns:sandbox user="guest">
<tns:read>
<tns:include name="/home/user/public/**"/>
</tns:read>
</tns:sandbox>
</tns:agent>
</tns:userSandboxes>
例
account に 1 つの数字が続く MQMD ユーザー名を持つユーザー (例: account4) に、以下のアクションの実行を許可する方法を示しています。- /home/account ディレクトリから、またはそのサブディレクトリから、エージェント AGENT_SATURN が実行されているシステム上の /home/account/private ディレクトリを除いて、任意のファイルを転送します。
- エージェントの AGENT_SATURN が実行されているシステム上の /home/account/output ディレクトリーまたはそのサブディレクトリーのいずれかにファイルを転送します。
- ローカル・キュー・マネージャー上のキューから、接頭部 ACCOUNT. で始まるメッセージを読み取ります。ただし、ACCOUNT.PRIVATE. で始まる (第 2レベルに PRIVATE がある) 場合は除きます。
- キュー・マネージャー上の接頭部 ACCOUNT.OUTPUT. で始まるキューにデータを転送します。
account のユーザーがこれらのアクションを実行できるようにするには、AGENT_SATURN の構成ディレクトリーにあるファイル UserSandboxes.xmlに以下の <sandbox> エレメントを追加します。<?xml version="1.0" encoding="UTF-8"?>
<tns:userSandboxes
xmlns:tns="http://wmqfte.ibm.com/UserSandboxes"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://wmqfte.ibm.com/UserSandboxes UserSandboxes.xsd">
<tns:agent>
<tns:sandbox user="account[0-9]" userPattern="regex">
<tns:read>
<tns:include name="/home/account/**"/>
<tns:include name="ACCOUNT.**" type="queue"/>
<tns:exclude name="ACCOUNT.PRIVATE.**" type="queue"/>
<tns:exclude name="/home/account/private/**"/>
</tns:read>
<tns:write>
<tns:include name="/home/account/output/**"/>
<tns:include name="ACCOUNT.OUTPUT.**" type="queue"/>
</tns:write>
</tns:sandbox>
</tns:agent>
</tns:userSandboxes>