[CentOS6][OpenAM10] LDAP認証 - OpenDJでLDAPサーバ構築


Create: 2014/03/08
LastUpdate: 2014/03/15
≪ メニューに戻る

[CentOS6][OpenAM10] OpenAMを試す - OpenAMのシングルサインオン(SSO)を試す(2/4)」では、下図の環境(グレー部分)を構築し、ユーザ情報は、OpenAMに内蔵しているOpenDJ(LDAP)に格納していました。
ここでは、前述の環境にLDAPサーバ(下図のグリーン部分)を追加し、OpenAMのサブレルム(test01)を変更してきます。


ユーザ端末:192.168.1.91(exdt01.example.com)
OpenAMサーバ:192.168.1.92(exam01.example.com)
リバースプロキシサーバ:192.168.1.93(exig01.example.com)
WEBサーバ:192.168.1.94(www.example.com)
LDAPサーバ:192.168.1.95(exdj01.example.com)

今回、LDAPサーバは、OpenDJで構築します。
ユーザ情報はLDAPサーバに外だしで格納するようにし、LDAPサーバを使用したLDAP認証を試してみます。

1.LDAPサーバの構築


CentOS6.5(32bit) で仮想マシンを作成して、OpenDJをインストールします。
OpenDJはGUI操作できるようなので、CentOSのGNOMEデスクトップ環境もインストールします。

1.1.OSインストール


CentOS6のインストール手順は、「 [XenServer 6.1.0] CentOS6.4(32bit)のネットワーク・インストール」を参照してください。
今回は、以下のような設定にします。
  • OS:CentOS6.4 (32bit)
  • SELinux:無効
  • ファイヤーウォール:無効
  • タイムゾーン:Asia/Tokyo
  • 言語:ja_JP.UTF-8
  • パッケージ:最小構成
  • ホスト名: exdj01
  • IPアドレス: 192.168.1.95
また、GNOMEデスクトップ環境もインストールします。手順は、「 [TIPS][XenServer 6.0] CentOS 6.0 に後から GNOME を入れる」を参照してください。

1.2.JAVAインストール


Oeracleのサイトから JDK をダウンロードしてインストールします。
今回は、JDK6をダウンロードしました。
ダウンロードしたファイルをサーバにおいて、以下のように実行してインストールします。
# sh ./jdk-6u45-linux-i586-rpm.bin 

1.3.OpenDJインストール


/etc/hosts にホスト名を登録します。
192.168.1.95 exdj01
今回は、コミュニティ版のOpenDJを使用します。
ForgeRockコミュニティサイトからOpenDJ をダウンロードして、/opt に解凍します。
# cd /opt
# wget http://download.forgerock.org/downloads/opendj/2.5.0-Xpress1/OpenDJ-2.5.0-Xpress1.zip
# unzip OpenDJ-2.5.0-Xpress1.zip
OpenDJのインストーラを起動します。
# cd /opt/OpenDJ-2.5.0-Xpress1
# ./setup
下図の画面が表示されたら[次へ]ボタンをクリックします。



管理者のパスワード以外は、デフォルトの設定を使用します。
[パスワード]を入力して、[次へ]ボタンをクリックします。



今回はLDAPサーバが1台しかないので、レプリケーションはしません。
[これはスタンドアロンサーバーになります]を選択して、[次へ]ボタンをクリックします。



[ディレクトリベースDN]は、OpenAMのベースDNと同じ "dc=example,dc=com" にします。
[次へ]ボタンをクリックします。



デフォルトの設定を使用します。
[次へ]ボタンをクリックします。



表示内容を確認して、OKなら、[完了]をクリックします。



セットアップの実行中です。
このまま、しばらく待ちます。



セットアップの完了です。[閉じる]ボタンをクリックすれば、下図の画面は消えます。
[コントロールパネルの起動]ボタンをクリックして、OpenDJの管理画面を表示してみます。



[パスワード]は、上記の[サーバ設定]で設定したものです。
[パスワード]を入力し、[OK]ボタンをクリックします。



このまま、しばらく待ちます。



下図のように [OpenDJ 制御パネル]が表示され、サーバーの状態が "起動中" であればOKです。



[OpenDJ 制御パネル] は、以下のようにして起動します。
# cd /opt/OpenDJ-2.5.0-Xpress1/bin
# ./control-panel

1.4.OpenAM用のOU(組織単位)の登録


OpenAMの管理画面(対象)でユーザを登録したときに、下記エラーがでるようであれば、LDAPサーバのOUの設定に間違いがあります。
プラグイン com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo で LDAP 例外が発生しました。LDAP Error 32: The entry specified in the request does not exist.
このとき、OpenDJのログファイル(/opt/OpenDJ-2.5.0-Xpress1/logs/access)を見ると、以下のようなエラーが記録されてました。
OpenAMが使用する ou は、デフォルトでは、"people" ですが、OpenDJの初期状態には存在しないのでエラーになっているようです。
[09/3/2014:09:29:54 +0900] ADD RES conn=4 op=3 msgID=224 result=32 message="エントリ uid=xxxx,ou=people,dc=example,dc=com を追加できません。サーバー内に親エントリ ou=people,dc=example,dc=com が存在しません" etime=2
というわけで、OpenDJに、"ou=people" を作成します。
OpenDJの管理画面で、[エントリの管理]ボタンをクリックします。



[dc=example,dc=com]を右クリックするとメニューが表示されるので、[新規組織単位] をクリックします。



[名前]に "people" を入力して、[OK]ボタンをクリックします。



下図のメッセージが表示されたらOKです。[閉じる]ボタンをクリックします。



下図のように "perople" が表示されていれば、OKです。[閉じる]ボタンをクリックします。
OpenAM管理画面(対象)でユーザ登録すると、"people" に表示されるようになります。



1.5.OpenAM用のスキーマ登録 


OpenAMの管理画面(対象)でユーザを登録したときに、下記エラーがでるようであれば、LDAPサーバにOpenAM用のスキーマが不足しています。
プラグイン com.sun.identity.idm.plugins.ldapv3.LDAPv3Repo で LDAP 例外が発生しました。LDAP Error 65: The requested operation will add or change data so that the data no longer complies with the schema.
このとき、OpenDJのログファイル(/opt/OpenDJ-2.5.0-Xpress1/logs/access)を見ると、以下のようなエラーが記録されてました。
OpenAMが使用するオブジェクトクラスが存在しないのでエラーになっているようです。
[09/3/2014:09:56:59 +0900] ADD RES conn=4 op=6 msgID=227 result=65 message="エントリ uid=xxxx,ou=people,dc=example,dc=com がディレクトリサーバースキーマ構成に違反しています。このエントリには不明なオブジェクトクラス sunAMAuthAccountLockout が含まれます" etime=2
というわけで、OpenDJに、OpenAM用のスキーマをインポートします。
OpenAM用のスキーマは、OpenAMサーバにあります。
OpenAMサーバにログインして、下記2ファイルを、LDAPサーバに scp します。
# scp -p /var/lib/tomcat6/webapps/openam/WEB-INF/template/ldif/opendj/opendj_user_schema.ldif 192.168.1.95:/tmp/.
# scp -p /var/lib/tomcat6/webapps/openam/WEB-INF/template/openfm/fam_sds_schema.ldif 192.168.1.95:/tmp/.
LDAPサーバにログインして、以下のように ldapmodifyコマンドを実行してスキーマを追加します。
# cd /opt/OpenDJ-2.5.0-Xpress1/bin
# ./ldapmodify --bindDN "cn=Directory Manager" --bindPassword password --filename /tmp/opendj_user_schema.ldif
cn=schema の MODIFY 要求を処理しています
DN cn=schema に対して MODIFY の操作が成功しました
# ./ldapmodify --bindDN "cn=Directory Manager" --bindPassword password --filename /tmp/fam_sds_schema.ldif
cn=schema の MODIFY 要求を処理しています
DN cn=schema に対して MODIFY の操作が成功しました
OpenDJの管理画面で、[スキーマ管理] > [オブジェクトクラス] > [カスタム] をクリックすると、下図の画面が表示されます。
"inetuser"、"iplanet-*"などが追加されていればOKです。



2.OpenAMの設定変更


[CentOS6][OpenAM10] OpenAMを試す - OpenAMのシングルサインオン(SSO)を試す(2/4)」で設定したサブレルム(test01)を変更して、上記で構築したLDAPサーバを使用するように設定します。

2.1.データストア


OpenAM管理画面をひらき、[アクセス制御] > [レルム(test01)] > [データストア] をクリックすると、下図の画面が表示されます。
[データストア]欄の "embedded" をチェックして、[削除]ボタンをクリックします。
"embedded" はOpenAM内蔵のOpenDJです。レルム(test01)では、使わないので削除します。



[新規]ボタンをクリックします。
LDAPサーバのOpenDJを使用するように設定します。



[名前]を入力し、[タイプ]は、"OpenDJ" をクリックして、[次へ]ボタンをクリックします。



赤枠部分を入力して、[終了]ボタンをクリックします。
  • [LDAPサーバ] ・・・ LDAPサーバのIPアドレス:LDAPポート番号
  • [LDAPバインドDN] ・・・ 上記1.3の[ルートユーザDN]
  • [パスワード] ・・・ [LDAPバインドDN]のパスワード
  • [LDAP組織DN] ・・・ 上記1.3の[ディレクトリベースDN]
  • [LDAPピープルコンテナ値] ・・・ デフォルト値を使用。上記1.4 も参照
  • [持続検索ベースDN] ・・・ 上記1.3の[ルートユーザDN]



下図のように[データストア]欄に "OpenDJ" が表示されたらOKです。



データストアの設定が正しいかチェックします。
[対象]タブをクリックして、下図のようにエラーが表示されなければOKです。
現時点で LDAPサーバにはユーザを登録していないので、[ユーザ]欄には何も表示されません。
試しに、[新規]ボタンをクリックして、ユーザを登録してみます。



必須項目を入力して、[了解]ボタンをクリックします。



エラーメッセージが表示されずに、下図のように、ユーザが表示されたらOKです。



登録したユーザを削除したい場合は、ユーザ横のチェックボックスをクリックして、[削除]ボタンをクリックします。

2.2.LDAP認証


サブレルム(test01)でLDAP認証の設定をします。
[アクセス制御] > [レルム(test01)] > [認証] をクリックすると下図の画面が表示されます。
[モジュールインスタンス]欄の"LDAP" をクリックします。



赤枠部分を入力したら、[保存]ボタンをクリックして、[認証へ戻る]ボタンをクリックします。
  • [プライマリLDAPサーバ] ・・・ LDAPサーバのIPアドレス:LDAPポート番号
  • [ユーザ検索の開始DN] ・・・ 上記1.3の[ルートユーザDN]
  • [バインドユーザのパスワード] ・・・ 上記1.3の[パスワード]



[保存]ボタンをクリックします。



以上で、LDAP認証の設定ができたので、正しく動作するか確認します。
OpenAM管理画面を開いているブラウザとは、異なるブラウザを起動して、下記URLにアクセスします。
このURLは、OpenAMログイン用です。レルム(test01)と認証モジュール(LDAP)を指定しています。
  • http://exam01.example.com:8080/openam/UI/Login?realm=test01&module=LDAP
下図のように LDAP 認証の画面が表示されます。
上記2.1で登録した user01 でログインします。



下図のように、user01 の画面が表示されたらLDAP認証は成功です。



次の認証連鎖の確認でも同様なことをするので、[ログアウト]ボタンをクリックしてログアウトしておきます。

2.3.認証連鎖


サブレルム(test01)で認証連鎖の設定して、最初にLDAP認証を使うようにします。
[アクセス制御] > [レルム(test01)] > [認証] をクリックすると下図の画面が表示されます。
[認証連鎖]欄の[新規]ボタンをクリックします。



[名称]を入力して、[了解]ボタンをクリックします。



[追加]ボタンをクリックすると、インスタンスが入力できるように1行増えます。
[インスタンス]は、"LDAP" を選択して、[条件]は、"必須"にして[保存]ボタンをクリックします。



[組織認証設定] を "SSO-1" にして、[保存]ボタンをクリックします。



以上で、認証連鎖の設定ができたので、OpenAMを再起動してから、正しく動作するか確認します。
# service tomcat6 restart
OpenAM管理画面を開いているブラウザとは、異なるブラウザを起動して、下記URLにアクセスします。
このURLは、OpenAMログイン用です。レルム(test01)を指定しています。
  • http://exam01.example.com:8080/openam/UI/Login?realm=test01
下図のように LDAP 認証の画面が表示されます。
上記2.1で登録した user01 でログインします。



下図のように、user01 の画面が表示されたら認証連鎖は成功です。



2.4.サービス


PolicyAgent がLDAPサーバから属性値を取得するように設定します。
[アクセス制御] > [レルム(test01)] > [サービス] をクリックすると下図の画面が表示されます。
[サービス]欄の "ポリシー設定" をクリックします。



赤枠部分を入力して、[保存]ボタンをクリックします。
  • [プライマリLDAPサーバ] ・・・ LDAPサーバのIPアドレス:LDAPポート番号
  • [LDAPベースDN] ・・・ 上記1.3の[ルートユーザDN]
  • [LDAPユーザベースDN] ・・・ 上記1.3の[ルートユーザDN]
  • [OpenAMロールベースDN] ・・・ 上記1.3の[ルートユーザDN]
  • [LDAPバインドパスワード] ・・・ 上記1.3の[パスワード]



ここを変更した場合、[アクセス制御] > [レルム] > [ポリシー]の設定をやり直す必要があるかもしれません。

3.動作確認


ブラウザで下記URLにアクセスして「テスト用WEBサイト」にアクセスします。
  • http://exig01.example.com
下図のログイン画面が表示されたら user01 / p@ssw0rd でログインします。



LDAP認証に成功すると、下図の画面が表示されます。
「BASIC認証ページ」をクリックすると代理認証機能が働いてページが表示されます。



「フォーム認証ページ」の代理認証機能は、LDAPサーバの「姓(sn)」からパスワードを取得するように設定してあります。
現時点では、LDAPサーバの "user01" には、正しいパスワードを設定していないので、ログインに失敗しています。



OpenAM管理画面で[アクセス制御] > [レルム(test01)] > [対象] をクリックして、"user01" をクリックすると下図の画面が表示されます。
[姓]にフォーム認証用のパスワードを設定して、[保存]ボタンをクリックします。



再度、「フォーム認証ページ」にアクセスすると、下図のように代理認証に成功しました。
これで、LDAPサーバの値を参照していることが確認できました。



ちなみに、OpenDJの管理画面でユーザを見ると、下図のように参照できます。