PAC-LDAP 許可モジュールの使用

概要

PAC-LDAP 許可モジュールによって、Caching Proxy は許可または認証ルーチンの実行時に Lightweight Directory Access Protocol (LDAP) サーバーにアクセスできます。このモジュールは 2 つのコンポーネント・セットから構成されています。Caching Proxy API と Policy Authentication Control (PAC) デーモンに LDAP 機能を追加する共有ライブラリーのペアです。ibmproxy.conf ファイルの中の ServerInit ディレクティブは、Caching Proxy の始動時に 1 つ以上の PAC デーモンを初期化するように共有ライブラリーに指示します。共有ライブラリーは、paccp.conf ファイルを読み取って、PAC デーモンの数値および特性を判別します。初期化中にこのデーモンは、pac.conf ファイルで構成ディレクティブを、また pacpolicy.conf でポリシー情報を読み取ります。次に、ibmproxy.conf ファイル内の Authentication ディレクティブが、認証が必要なときに共有ライブラリーを呼び出すようにプロキシー・サーバーに指示するか、あるいは Authorization ディレクティブが標準 HTTP 要求の処理中に Caching Proxy のワークフローを取り出します。

認証

認証のプロセスは、提供された資格情報のセット、すなわちユーザー名およびパスワードが有効かどうかを判断します。このプロセスには、ユーザーがレジストリー内に存在すること、および提供されたパスワードが レジストリーに保管されたパスワードと一致することの検証が含まれます。これらのアクションは、認証のステップの中で PAC-LDAP モジュールを使用して実行されます。

PAC-LDAP 許可モジュールは、認証に使用できるようになっている場合は、ユーザー ID、パスワード、 およびグループを検索するデフォルトのリポジトリーになります。HTTP 要求が Caching Proxy の ワークフローに渡されると、それぞれの Protect ディレクティブが要求された URL をその要求 テンプレートと比較します。一致が見つかると、Protect ディレクティブは、サーバー ID、使用する認証のタイプ、要求元クライアントに適用されるマスキング規則、およびパスワード・ファイルとグループ・ファイルの場所が入っている保護スキーマを呼び出します。パスワード・ファイルが定義されていない場合には、ユーザー ID とパスワードは PAC-LDAP 許可モジュールを介して検索されます。タイプ 0、1、2、および 3 のポリシーは認証スキーマを定義します。認証されるとその要求はサービスされ、認証されないと Caching Proxy はクライアントに 401 エラーを戻します。

許可

認証のプロセスは、ユーザーが保護リソースにアクセスするために必要な許可を持っているかどうかを判断します。PAC-LDAP モジュールが使用される場合は、 HTTP 要求に対して pacpolicy.conf ファイル内の許可規則が適用されます。

PAC-LDAP 許可モジュールが許可について使用可能になっていると、pacpolicy.conf ファイル内の 許可規則が HTTP 要求に適用されます。HTTP 要求が Caching Proxy の ワークフローに渡されると、それぞれの Protect ディレクティブが要求された URL をその要求 テンプレートと比較します。一致が見つかると、Protect ディレクティブは保護スキーマを呼び出します。この場合には、保護スキーマは PAC-LDAP 許可モジュールによって取り出された許可ルーチンです。Authorization ディレクティブは、要求された URL をその要求テンプレートと比較して、一致するものが見つかると PAC-LDAP 許可モジュールが呼び出されます。タイプ 4 のポリシーは、pacpolicy.conf ファイル内で定義されて、各種の URL 要求に必要な認証を詳細に定義します。

Lightweight Directory Access Protocol (LDAP)

LDAP は、最少のシステム・リソースを用いて対話式に X.500 ディレクトリーにアクセスします。IANA は LDAP に TCP ポート 389 と UDP ポート 389 を割り当てています。 詳細については、LDAP を定義している RFC 1777 を参照してください。

サポートされる LDAP クライアントの例としては、IBM Tivoli LDAP クライアントおよび IBM SecureWay LDAP クライアントがあります。

インストール

PAC-LDAP 許可モジュールのすべてのコンポーネントは、WebSphere® Application Server, バージョン 8.5 の Caching Proxy システムのインストール時に自動的にインストールされます。Linux および UNIX システムでは、Caching Proxy ライブラリー (./lib/) ディレクトリー、PAC-LDAP 許可モジュール ライブラリー (./lib/plugins/pac/) ディレクトリー、バイナリー (./bin/) ディレクトリー、および構成 (./etc/) ディレクトリーが /opt/ibm/edge/cp/ ディレクトリー内に作成されます。次に、/usr/lib/、/usr/sbin/、および /etc ディレクトリーからそれらの製品特有のものへのシンボリック・リンクが作成されます。

ディレクトリー構造

Linux および UNIX ディレクトリー Windows ディレクトリー 内容
/opt/ibm/edge/cp C:¥Program Files¥IBM¥edge¥cachingproxy¥cp Caching Proxy 基本ディレクトリー (cp_root)
cp_root/sbin C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥Bin¥ Caching Proxy バイナリーおよびスクリプト
/usr/sbin/ cp_root/sbin/ へのシンボリック・リンク
cp_root/etc/ C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥etc¥ Caching Proxy 構成ファイル
/etc/ cp_root/etc/ へのシンボリック・リンク
cp_root/lib/ C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥lib¥plugins¥ Caching Proxy ライブラリー
cp_root/lib/ plugins/pac/ C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥lib¥plugins¥pac¥ PAC-LDAP 許可モジュール ライブラリー
/usr/lib/ cp_root/lib/ および cp_root/lib/ plugins/pac/ へのシンボリック・リンク
cp_root/server_root/pac/data/ C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥server_root¥pac¥data¥ PAC-LDAP 許可モジュール・データ・ストレージ
cp_root/server_root/ pac/creds/ C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥server_root¥pac¥creds¥ PAC-LDAP 許可モジュール・クレデンシャル

LDAP プラグイン・ファイル

Linux および UNIX ファイル名 Windows ファイル名 説明
libpacwte.so pacwte.dll 共有ライブラリー
libpacman.so pacman.dll 共有ライブラリー
pacd_restart.sh pacd_restart.bat PAC デーモン再始動スクリプト
paccp.conf, pac.conf, pacpolicy.conf paccp.conf, pac.conf, pacpolicy.conf 構成およびポリシー・ファイル

セキュア PACD-LDAP サーバー接続のための追加要件および制限事項

LDAP クライアント・パッケージでは GSKit が必要

PACD デーモンと LDAP サーバーとの Secure Sockets Layer (SSL) 接続を可能にするには、 LDAP クライアント・パッケージで必要とされる GSKit パッケージをインストールしてください。 GSKit 7 は Caching Proxy マシンでは必要であり、マシン上でデフォルトで提供されていますが、 マシン上の LDAP クライアントが必要とするバージョンとは異なるバージョンの可能性があります。 同一のマシン上で、別々のプロセスで異なるバージョンの GSKit を使用することは可能です。

GSKit 鍵ファイルを $pacd_creds_dir/pac_keyring.kdb に置き、パスワードを $pacd_creds_dir/pac_keyring.pwd に置きます。

注:
LDAP サーバー上の GSKit 要件の情報については、 Web サイト http://www.ibm.com/software/tivoli/products/directory-server/ に ある IBM Tivoli Directory Server (ITDS) 文書を参照してください。

Linux システムには LD_PRELOAD 環境変数の設定が必要

Linux システムでは、PACD デーモンと LDAP サーバーとの SSL 接続を可能にするために、 以下に説明されているように LD_PRELOAD 環境変数を構成する必要があります。 変数に次の値を設定してください。

LD_PRELOAD=/usr/lib/libstdc++-libc6.1-1.so.2 

このセクションで前述の GSKit 要件は、Linux システムにも適用されます。

Linux システムで IBM Tivoli Directory Server (ITDS) 6.0 LDAP クライアントを使用する際、PACD プロセスの開始に失敗する

Red Hat Enterprise Linux 4.0 システムでは、 認証に ITDS 6.0 LDAP プラグインを使用するよう Caching Proxy が構成されている場合、PACD プロセスが開始されません。 その結果、次のエラー・メッセージが出されます。

"error while loading shared libraries: 
/usr/lib/libldapiconv.so: R_PPC_REL24 relocation at 0x0fb58ad0 
for symbol 'strpbrk' out of range" 

現在、ITDS 6.0 で RHEL 4.0 システムがサポートされないという制限があります。

AIX システムで、IBM Tivoli Directory Server (ITDS) LDAP クライアントを使用する際、PAC-LDAP モジュールをロードできない

ITDS LDAP クライアントの使用時、未解決のリンクがあると、 AIX システムで PACD プロセスが開始されません。 PACD プロセスを開始する際、次のようなエラーが発生する可能性があります。

exec(): 0509-036 Cannot load program /usr/sbin/pacd 
because of the following errors: 
0509-022 Cannot load module /usr/lib/libpacman.a.
0509-150 Dependent module libldap.a could not be loaded.
0509-022 Cannot load module libldap.a. 

ITDS バージョン 5 の LDAP クライアントで、この問題に対処するには、 次のシンボリックを作成します。

ln -s /usr/lib/libibmldap.a /usr/lib/libldap.a  

ITDS バージョン 6 の LDAP クライアントで、この問題に対処するには、 次のシンボリックを作成します。

ln -s /opt/IBM/ldap/V6.0/lib/libibmldap.a /usr/lib/libldap.a

PAC-LDAP 許可モジュールを使用可能にする ibmproxy.conf ファイルの編集

PAC-LDAP 許可モジュールを初期化するには、3 つのディレクティブ ServerInit、 Authorization または Authentication、および ServerTerm を、ibmproxy.conf ファイルの API ディレクティブ・セクションに追加する必要があります。これらのディレクティブを作成するには、ibmproxy.conf ファイルを手作業で編集するか、あるいはプロキシー・サーバーが既に実行中の場合にはインターネット・ブラウザーで「構成および管理」フォームに接続して「API 要求処理」フォームを開きます (「サーバー構成」 –> 「要求処理」–> 「API 要求処理」)をクリックします。このセクションの例では分かりやすくするために改行を入れてありますが、プロキシー構成ファイルではそれぞれのディレクティブは単一行にある必要があります。

ibmproxy.conf ファイルの API セクションには、(コメントの形で) プロトタイプ・ディレクティブが 提供されていることに注意してください。この API ディレクティブは目的別の順序で配列されています。 API ディレクティブを追加して新しい機能やプラグイン・モジュールを使用できるようにするには、各ディレクティブを構成ファイルのプロトタイプ・セクションに示されているように配列してください。あるいは、必要に応じて API ディレクティブをアンコメントして編集し、 それぞれ必要な機能やプラグインに対するサポートを組み込んでください。

ServerInit ディレクティブには 3 つの引数があります。(1) 共有ライブラリーの完全修飾パス、(2) 関数呼び出し、および (3) paccp.conf ファイルの完全修飾パスです。最初の引数と 2 番目の引数はコロン (:) で区切ります。2 番目の引数と 3 番目の引数はスペースで区切ります。 最初の引数と 3 番目の引数はシステム特有で、プラグイン・コンポーネントのインストール場所によって決まります。2 番目の引数は共有ライブラリーにハードコーディングされるので表示されたとおりに入力する必要があります。 「API 要求処理」フォームを使用して ServerInit ディレクティブを作成する場合には、2 番目と 3 番目の両方の引数を「関数名」フィールドに入力する必要があります。3 番目の引数は「IP テンプレート」欄に表示されます。

Authorization ディレクティブには 3 つの引数があります。(1) 要求テンプレート、(2) 共有ライブラリーの完全修飾パス、および (3) 関数名です。HTTP 要求は、アプリケーション機能が呼び出されたかどうかを判断するために、要求テンプレートと比較されます。要求テンプレートには、プロトコル、ドメイン、およびホストを組み込むことができ、前にスラッシュ (/) を付けたり、ワイルドカードとしてアスタリスク (*) を使用することができます。 例えば、/front_page.html、 http://www.ics.raleigh.ibm.com、/pub*、/*、および * はすべて有効です。関数名は、プログラムの中でアプリケーション機能に与えられた名前です。これはハードコーディングされるので、表示されたとおりに入力する必要があります。最初の 2 つの引数はスペースで区切ります。最後の 2 つの引数はコロン (:) で区切ります。

Authentication ディレクティブには 2 つの引数があります。(1) 共有ライブラリーの完全修飾パスと (2) 関数名です。これらの引数はコロン (:) で区切られます。 最初の引数はシステム特有で、共有ライブラリーがインストールされている場所によって決まります。 Caching Proxy をリバース・プロクシーとして使用しているとき、 最初の引数の URL テンプレートは文書のルート (/) から開始する必要があります。 2 番目の引数は共有ライブラリーにハードコーディングされるので表示されたとおりに入力する必要があります。

ServerTerm ディレクティブには 2 つの引数があります。(1) 共有ライブラリーの完全修飾パスと (2) 関数名です。これらの引数はコロン (:) で区切られます。 最初の引数はシステム特有で、共有ライブラリーがインストールされている場所によって決まります。 2 番目の引数は共有ライブラリーにハードコーディングされるので表示されたとおりに入力する必要があります。 このディレクティブは、プロキシー・サーバーの終了時に PAC デーモンを終了します。このデーモンの所有者がプロキシー・サーバーの所有者 と違う場合には、プロキシー・サーバーはそのデーモンを停止させることができません。この場合には、管理者がデーモンを手作業で 停止する必要があります。

ServerInit path_of_shared_library:pacwte_auth_init path_of_conf_policy_file

Linux および UNIX の例:

ServerInit /usr/lib/libpacwte.so:pacwte_auth_init /etc/pac.conf 

Windows の例:

ServerInit C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥lib¥plugins¥
  pac¥pacwte.dll:pacwte_auth_init C:¥Progra ~1¥IBM¥edge¥cp
Authorization request-template path_of_shared_library:pacwte_auth_policy

Linux および UNIX の例:

Authorization http://* /usr/lib/libpacwte.so:pacwte_auth_policy 

Windows の例:

Authorization http://* C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥lib¥plugins¥
  pac¥pacwte.dll:pacwte_auth_policy 
Authentication BASIC path_of_shared_library:pacwte_auth_policy 

Linux および UNIX の例:

Authentication BASIC /usr/lib/plugins/pac/libpacwte.so:pacwte_auth_policy 

Windows の例:

Authentication BASIC C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥lib¥plugins¥
  pac¥pacwte.dll:pacwte_auth_policy 
ServerTerm path_of_shared_library:pacwte_shutdown 

Linux および UNIX の例:

ServerTerm /usr/lib/libpacwte.so:pacwte_shutdown 

Windows の例:

ServerTerm BASIC C:¥Program Files¥IBM¥edge¥cachingproxy¥cp¥lib¥plugins¥
  pac¥bin¥pacwte.dll:pacwte_shutdown 

PAC-LDAP 許可モジュール構成ファイルの編集

PAC-LDAP 許可モジュール構成およびポリシー・ファイルは、テキスト・エディターを使用して手作業で編集する 必要があります。ディレクティブ名とその最初の引数はコロン (:) で区切ります。複数の引数はコンマ (,) で区切ります。構成およびポリシー・ファイルには、編集時に注釈を組み込みます。 以下に、主要なポリシー・ディレクティブを示します。

paccp.conf

paccp.conf ファイルは、Caching Proxy の初期化中に共有ライブラリーによって読み取られ、開始するそれぞれの PAC デーモンの定義 ([PAC_MAN_SERVER] スタンザ) が入っています。それぞれの PAC デーモンには、独自の [PAC_MAN_SERVER] スタンザがなければなりません。

[PAC_MAN_SERVER]
hostname:                    # name of PAC daemon
port:                        # port pacd is listening on

[PACWTE_PLUGIN]
hostname_check:[true|false]  # enables DNS lookup. Must have
                             # DNS lookup turned on for ibmproxy to work. 

pac.conf

pac.conf ファイルは、PAC デーモンが接続しようとする LDAP サーバーを指定します。

[PAC_MAN_SERVER]
hostname:                    # name of PAC daemon
port:                        # port pacd is listening on
conn_type:ssl                # comment out if you do not use SSL
authentication_sequence: [primary|secondary|none]
authorization_sequence:  [primary|secondary|none]

[LDAP_SERVER]
hostname:                    # LDAP Server hostname
port:389                     # Port LDAP is listening on
ssl_port:636                 # SSL port used by the LDAP server
admin_dn:                    # User with permission to access the LDAP server
                             # specify admin_dn:NULL to enable anonymous binding
search_base:                 # Portion of LDAP tree to search for policy info
                             # If not required, specify search_base:NULL
search_key:                  # ID field to search

[CACHE]
cred_cache_enabled [TRUE|FALSE] # turn credentials cache on
cred_cache_min_size:100      # minimum number of credentials to cache in pacd
cred_cache_max_size:64000    # maximum number of credentials to cache in pacd
cred_cache_expiration:86400  # when a credential expires
policy_cache_enabled:[TRUE|FALSE] # turns policy cache on/off
policy_cache_min_size:100    # min. number of policy related items to cache
policy_cache_max_size:64000  # max. number of policy related items to cache
policy_cache_expiration:86400 # when a policy related item expires

pacpolicy.conf

すべての LDAP ポリシーは、構成およびポリシー・ファイル内の次のテンプレートを使用します。それぞれのポリシーは、大括弧で囲んだ大文字のキーワード POLICY で始まっていなければなりません。

[POLICY]
default_policy:[grant|deny]  # describes the default policy for users
                             # that are not described in the POLICY section
pac_client_hotname:          # the instances of Caching Proxy that are allowed
                             # to use a policy list
id:                          # the id for the LDAP entry or ip/hostname
                             # (wildcard supported, such as *.ibm.com)
grant:[true|false]           # true means to grant access, false means
                             # to deny access
type:[0|1|2|3|4]             # 0 LDAP entry that is a group,
                             # 1 LDAP entry that is not a group,
                             # 2 IP address
                             # 3 hostname
                             # 4 URL
propagate:[true|false]       # true means that the access rights (grant
                             # or deny) will be propagated to all
                             # descendants or members
stop_entry:[entry|NULL]      # Propagation of the access right stops
                             # at this entry. If the id is a group,
                             # stop_entry must be set to NULL.
                             # stop_entry may be applied to an IP
                             # address or hostname. Each stop_entry
                             # must be on its own line
exception_entry:[entry|NULL] # Assignment of the access right skips
                             # these entries, but continues through their
                             # subtrees. This may be a list of entries.
                             # exception_entry may be applied to a group,
                             # IP address, or hostname. Each
                             # exception_entry must be on its own line.
Exception_type:
Exception: 

ワイルドカード (*) がサポートされるのは、id および stop_entry ディレクティブの IP アドレスの最後の桁か、ホスト名の最初の桁だけです。ワイルドカードは、exception_entry ではサポートされません。ワイルドカードは、いずれのフィールドの LDAP 項目でもサポートされません。

複数のポリシーがサポートされ、ポリシーが競合する場合には、偽の値が常に優先します。言い換えれば、ポリシー内の単一の否定でアクセスが阻止されます。構成およびポリシー・ファイルにポリシーがリストされている順序は無関係で、優先順位を設定するものではありません。

一連のポリシーの例では、構成ファイル・ディレクトリーの pacpolicy.conf ファイルを参照してください。

注:
ネストされたグループは、親グループからポリシーを継承しません。 グループで適用される唯一のポリシーは、そのグループが明示的なメンバーであるポリシーだけです。

pac_ldap.cred の作成

pac_ldap.cred という名前のプレーン・テキストを /cp_root/server_root/pac/creds 内に作成します。 このファイルには、pac.conf ファイル内の admin_dn デ ィレクティブのユーザー名に 対応するパスワードが入ります。

注:
匿名バインディングを可能にするには、 pac.conf 内の admin_dn ディレクティブを admin_dn:NULL に変更し、 pac_ldap.cred ファイルにダミーのストリングを入れてください。

PAC デーモンは、初めてそのファイルを読み取ったときにパスワードを暗号化します。

ファイル pac_ldap.cred を Linux および UNIX プラットフォームで作成するには、次のコマンドを実行します。

cd cp_root/server_root/pac/creds
echo "password" > pac_ldap.cred
chown nobody pac_ldap.cred
chgrp nobody pac_ldap.cred
(on SUSE Linux, use chgrp nogroup pac_ldap.cred.) 

このファイルを Windows プラットフォームで作成するには、テキスト・ファイルにパスワードを入力し、そのファイルを server_root¥pac¥creds¥ ディレクトリーに格納します。

pacd の始動および停止

LDAP 許可デーモンは、pacd プロセスとして実行します。規定のスクリプトを使用して、Caching Proxy に割り込まずに LDAP 許可を再始動することができます。次の手順で pacd スクリプトを実行します。

注:
AIX システムの場合は stopsrc -ibmproxy コマンドを、HP-UX、Linux および Solaris システムの場合は ibmproxy -stop コマンドを使用して、 Caching Proxy サーバーをシャットダウンした後でも、pacd プロセスの稼働を継続することが可能です。以下のような kill コマンド を使用することによって、pacd プロセスを安全に終了させることができます。
kill -15 pacd_process_ID

HP-UX の場合: PAC-LDAP プラグインおよび pacd は、実行時にすべての従属共有ライブラリーをロードしません。それらを使用する前に、システム変数が次のように設定されていることを確認してください。

SHLIB_PATH=/usr/lib:/usr/IBMldap/lib
PATH=/usr/IBMldap/bin:$PATH
PATH=/usr/IBMldap/bin 

/usr/IBMldap/ は、HP-UX の LDAP クライアント用のデフォルトのインストール・パスです。LDAP クライアントが別のロケーションにインストールされている場合は、それに応じて PATH および SHLIB_PATH を調整してください。これらの変数を設定しないと、次のエラーが発生する可能性があります。

Linux の場合: SUSE Linux Enterprise Server 9 の場合、ldd pacd は、libldap.so が見つからない、とレポートことがあります。この問題に対処するには、 以下のシンボリックを作成してください。

ln -s /usr/lib/libldap.so.19  /usr/lib/libldap.so 

AIX の場合: IBM Tivoli Directory Server 5.2 で pacd を開始する場合は、 PAC-LDAP モジュールがロードできずに、次のエラーが出される可能性があります。

exec(): 0509-036 Cannot load program /usr/sbin/pacd because of the following errors: 
        0509-022 Cannot load module /usr/lib/libpacman.a. 
        0509-150 Dependent module libldap.a could not be loaded. 
        0509-022 Cannot load module libldap.a.

この問題に対処するには、 以下のシンボリックを作成してください。

ln -s /usr/lib/libibmldap.a /usr/lib/libldap.a

注:
LDAP 認証を使用するために Caching Proxy を構成した後に、以下のエラーが表示されます。
Could not extract a value for: Uid, return code:3 
このエラーは、LDAP 認証が正しく機能している場合でも表示されますので、無視することができます。