Menu Close
第8章 LDAP 認証チュートリアル
概要
このチュートリアルでは、X.500 ディレクトリーサーバーを設定し、LDAP 認証を使用するように OSGi コンテナーを設定する方法を説明します。
8.1. チュートリアルの概要
ゴール
このチュートリアルでは、以下を行います。
- 389 Directory Server のインストール
- LDAP サーバーへのユーザーエントリーの追加
- セキュリティーロールを管理するグループの追加
- LDAP 認証を使用するように Fuse を設定
- 承認にロールを使用するように Fuse を設定
- LDAP サーバーへの SSL/TLS 接続の設定
8.2. Directory Server およびコンソールの設定
本チュートリアルでは、Fedora 389 Directory Server プロジェクトから X.500 ディレクトリーサーバーと管理コンソールをインストールする方法について説明します。389 Directory Server インスタンスにすでにアクセスできる場合は、389 Directory Server のインストール手順を省略し、代わりに 389 Management Console をインストールできます。
前提条件
Red Hat Enterprise Linux プラットフォームにインストールする場合は、最初に Extra Packages for Enterprise Linux (EPEL) をインストールする必要があります。fedoraproject.org
サイトの RHEL/Cent OS/ EPEL ( RHEL 6, RHEL 7, Cent OS 6, Cent OSý7) にあるインストールノートを参照してください。
389 Directory Server のインストール
既存の 389 Directory Server インスタンスにアクセスできない場合は、以下のように 389 Directory Server をローカルマシンにインストールできます。
Red Hat Enterprise Linux および Fedora プラットフォームでは、標準の
dnf
パッケージ管理ユーティリティーを使用して 389 Directory Server をインストールします。コマンドプロンプトに以下のコマンドを入力します (マシンの管理者権限が必要です)。sudo dnf install 389-ds
注記必要な
389-ds
および389-console
RPM パッケージは、Fedora、RHEL6+EPEL、および CentOS7+EPEL のプラットフォームで利用できます。執筆時点では、389-console
パッケージは RHEL 7 では利用できません。389 ディレクトリーサーバーパッケージをインストールした後、以下のコマンドを実行してディレクトリーサーバーを設定します。
sudo setup-ds-admin.pl
このスクリプトは対話型で、389 Directory Server の基本設定を指定するように求められます。スクリプトが完了すると、バックグラウンドで 389 Directory Server が自動的に起動します。
- 389 Directory Server のインストール方法の詳細は、Download ページを参照してください。
389 Management Console のインストール
389 Directory Server インスタンスにアクセスできる場合は、389 Management Console のみをインストールする必要があります。これにより、リモートでサーバーにログインし、管理できます。以下のように 389 Management Console をインストールできます。
Red Hat Enterprise Linux および Fedora プラットフォームの場合 - 標準の
dnf
パッケージ管理ユーティリティーを使用して、389 Management Console をインストールします。コマンドプロンプトに以下のコマンドを入力します (マシンの管理者権限が必要です)。sudo dnf install 389-console
-
Windows プラットフォームの場合 -
fedoraproject.org
で Windows Console のダウンロード手順を参照してください。
コンソールのサーバーへの接続
389 Directory Server Console を LDAP サーバーに接続するには、以下を行います。
以下のコマンドを入力して、389 Management Console を起動します。
389-console
ログインダイアログが表示されます。
User ID
およびPassword
フィールドに LDAP ログインクレデンシャルを入力し、Administration URL
フィールドのホスト名をカスタマイズして 389 管理サーバーインスタンスに接続します (ポート9830
は 389 管理サーバーインスタンスのデフォルトポートです)。-
389 Management Console ウィンドウが表示されます。
Servers and Applications
タブを選択します。 左側のペインで、
Directory Server
アイコンを見つけます。-
左側のペインで
Directory Server
アイコンを選択し、Open
をクリックして389 Directory Server Console
を開きます。 -
389 Directory Server Console
で、Directory
タブをクリックして Directory Information Tree (DIT) を表示します。 ルートノード
YourDomain
(通常はホスト名にちなんで命名され、次のスクリーンショットのlocaldomain
のように表示) を展開して、DIT を表示します。
8.3. ディレクトリーサーバーへのユーザーエントリーの追加
OSGi コンテナーで LDAP 認証を使用するための基本的な前提条件は、X.500 ディレクトリーサーバーが実行し、ユーザーエントリーのコレクションで設定することです。多くのユースケースでは、ユーザーロールを管理するために複数のグループを設定する必要もあります。
ユーザーエントリー追加の代替
LDAP サーバーにユーザーエントリーおよびグループがすでに定義されている場合は、新規エントリーを作成する代わりに、LDAPLoginModule
設定の roles.mapping
プロパティーを使用して既存の LDAP グループを JAAS ロールにマッピングした方が好ましい場合があります。詳細は、「JAAS LDAP ログインモジュール」 を参照してください。
ゴール
本チュートリアルでは、以下を行います。
ユーザーエントリーの追加
ディレクトリーサーバーにユーザーエントリーを追加するには、以下の手順を実行します。
- LDAP サーバーおよびコンソールが稼働していることを確認します。「Directory Server およびコンソールの設定」 を参照してください。
Directory Server Console
で、Directory
タブをクリックし、YourDomain
ノード下でPeople
ノードを見つけます (以下のスクリーンショットではYourDomain
はlocaldomain
として表示されてます)。-
People
ノードを右クリックし、コンテキストメニューから menu:[ > New > >User
> ] と選択してCreate New User
ダイアログを開きます。 -
Create New User
ダイアログの左側のペインで User タブを選択します。 以下のように
User
タブのフィールドを入力します。-
First Name
フィールドをJohn
に設定します。 -
Last Name
フィールドをDoe
に設定します。 -
User ID
フィールドをjdoe
に設定します。 -
Password
フィールドにパスワードsecret
を入力します。 Confirm Password
フィールドにパスワードsecret
を入力します。
-
- OK をクリックします。
Step 3 から Step 6 に従って、ユーザー
Jane Doe
を追加します。Step 5.e で、新規ユーザーの
User ID
にjanedoe
を使用し、パスワードフィールドにはパスワードsecret
を使用します。Step 3 から Step 6 に従って、ユーザー
Camel Rider
を追加します。Step 5.e で、新規ユーザーの
User ID
にcrider
を使用し、パスワードフィールドにはパスワードsecret
を使用します。
ロールのグループの追加
ロールを定義するグループを追加するには、以下を実行します。
-
Directory Server Console
のDirectory
タブで、YourDomain
ノード下のGroups
ノードを見つけます。 -
Groups
ノードを右クリックし、コンテキストメニューから menu:[ > New > >Group
> ] と選択してCreate New Group
ダイアログを開きます。 -
Create New Group
ダイアログの左側のペインで General タブを選択します。 以下のように
General
タブのフィールドを入力します。-
Group Name
フィールドをadmin
に設定します。 必要に応じて、
Description
フィールドに説明を入力します。
-
Create New Group
ダイアログの左側のペインで Members タブを選択します。-
Add
をクリックしてSearch users and groups
ダイアログを開きます。 Search
フィールドで、ドロップダウンメニューからUsers
を選択し、Search
ボタンをクリックします。-
表示されているユーザーのリストから、
John Doe
を選択します。 -
OK をクリックして
Search users and groups
ダイアログを閉じます。 -
OK をクリックして
Create New Group
ダイアログを閉じます。 Step 2 から Step 10 に従って、
manager
ロールを追加します。Step 4 で
Group Name
フィールドにmanager
を入力します。Step 8 で、
Jane Doe
を選択します。Step 2 から Step 10 に従って、
viewer
ロールを追加します。Step 4 で
Group Name
フィールドにviewer
を入力します。Step 8 で、
Camel Rider
を選択します。Step 2 から Step 10 に従って、
ssh
ロールを追加します。Step 4 で
Group Name
フィールドにssh
を入力します。Step 8 で、
John Doe
、Jane Doe
、およびCamel Rider
のすべてのユーザーを選択します。
8.4. OSGi コンテナーでの LDAP 認証の有効化
本セクションでは、OSGi コンテナーで LDAP レルムを設定する方法を説明します。新しいレルムはデフォルトの karaf
レルムを上書きするため、コンテナーは X.500 ディレクトリーサーバーに保存されているユーザーエントリーを基にしてクレデンシャルを認証します。
参考資料
LDAP 認証については、より詳細な以下のドキュメントを参照してください。
- LDAPLoginModule オプション - 「JAAS LDAP ログインモジュール」 に詳しい説明があります。
- その他のディレクトリーサーバーの設定 - 本チュートリアルは 389-DS のみを取り上げます。Microsoft Active Directory などの他のディレクトリーサーバーを設定する方法は、「異なるディレクトリーサーバーのフィルター設定」 を参照してください。
スタンドアロン OSGi コンテナーの手順
スタンドアロンの OSGi コンテナーで LDAP 認証を有効にするには、以下を実行します。
- X.500 ディレクトリーサーバーが稼働していることを確認します。
ターミナルウインドウに以下のコマンドを入力して、Karaf コンテナーを起動します。
./bin/fuse
-
ldap-module.xml
という名前のファイルを作成します。 例8.1「スタンドアロンの JAAS レルム」 を
ldap-module.xml
にコピーします。例8.1 スタンドアロンの JAAS レルム
<?xml version="2.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:jaas="http://karaf.apache.org/xmlns/jaas/v1.0.0" xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"> <jaas:config name="karaf" rank="200"> <jaas:module className="org.apache.karaf.jaas.modules.ldap.LDAPLoginModule" flags="required"> initialContextFactory=com.sun.jndi.ldap.LdapCtxFactory connection.url=ldap://localhost:389 connection.username=cn=Directory Manager connection.password=DIRECTORY_MANAGER_PASSWORD connection.protocol= user.base.dn=ou=People,dc=localdomain user.filter=(&(objectClass=inetOrgPerson)(uid=%u)) user.search.subtree=true role.base.dn=ou=Groups,dc=localdomain role.name.attribute=cn role.filter=(uniquemember=%fqdn) role.search.subtree=true authentication=simple </jaas:module> </jaas:config> </blueprint>
ldap-module.xml
ファイルで以下の設定をカスタマイズする必要があります。- connection.url
-
この URL を、ディレクトリーサーバーインスタンスの実際の場所に設定します。通常、この URL の形式は
ldap://Hostname:Port
です。たとえば、389 Directory Server のデフォルトポートは IP ポート389
です。 - connection.username
-
ディレクトリーサーバーへの接続の認証に使用されるユーザー名を指定します。389 Directory Server の場合、デフォルトは通常
cn=Directory Manager
です。 - connection.password
- ディレクトリーサーバーに接続するためのクレデンシャルのパスワード部分を指定します。
- authentication
認証プロトコルには、以下のいずれかの方法を指定できます。
-
simple
の場合、ユーザークレデンシャルが提供され、connection.username
オプションおよびconnection.password
オプションを設定する義務があることを意味します。 none
の場合、認証が行われないことを意味します。この場合、connection.username
およびconnection.password
オプションを設定しないでください。このログインモジュールは、
karaf
という名前の JAAS レルムを作成します。これは、Fuse によって使用されるデフォルトの JAAS レルムと同じ名前です。0
より大きいrank
属性の値でこのレルムを再定義すると、ランク0
を持つ標準karaf
レルムがオーバーライドされます。LDAP を使用するよう Fuse を設定する方法の詳細は、「JAAS LDAP ログインモジュール」 を参照してください。
重要上記の JAAS プロパティーを設定する場合は、プロパティー値を二重引用符で囲まないでください。
-
新しい LDAP モジュールをデプロイするには、
ldap-module.xml
を Karaf コンテナーのdeploy/
ディレクトリー (ホットデプロイ) にコピーします。LDAP モジュールは自動的にアクティベートされます。
注記その後、LDAP モジュールをアンデプロイする必要がある場合は、Karaf コンテナーの実行中に
deploy/
ディレクトリーからldap-module.xml
ファイルを削除して実行できます。
LDAP 認証のテスト
以下のように Karaf client
ユーティリティーを使用して実行中のコンテナーに接続し、新しい LDAP レルムをテストします。
- 新しいコマンドプロンプトを開きます。
-
Karaf
InstallDir/bin
ディレクトリーに移動します。 以下のコマンドを入力し、ID
jdoe
を使用して実行中のコンテナーインスタンスにログインします。./client -u jdoe -p secret
コンテナーのリモートコンソールに正常にログインする必要があります。コマンドコンソールで、
jaas:
と入力した後に [Tab] キーを押します (コンテンツ補完を使用)。jdoe@root()> jaas: Display all 31 possibilities? (31 lines)? jaas:cancel jaas:group-add ... jaas:whoami
jdoe
がすべてのjaas
コマンド (admin
と一致) にアクセスできることが確認できるはずです。-
logout
コマンドを入力して、リモートコンソールからログアウトします。 以下のコマンドを入力し、ID
janedoe
を使用して実行中のコンテナーインスタンスにログインします。./client -u janedoe -p secret
コンテナーのリモートコンソールに正常にログインする必要があります。コマンドコンソールで、
jaas:
と入力した後に [Tab] キーを押します (コンテンツ補完を使用)。janedoe@root()> jaas: Display all 25 possibilities? (25 lines)? jaas:cancel jaas:group-add ... jaas:users
janedoe
がほぼすべてのjaas
コマンド (manager
と一致) にアクセスできることが確認できるはずです。-
logout
コマンドを入力して、リモートコンソールからログアウトします。 以下のコマンドを入力し、ID
crider
を使用して実行中のコンテナーインスタンスにログインします。./client -u crider -p secret
コンテナーのリモートコンソールに正常にログインする必要があります。コマンドコンソールで、
jaas:
と入力した後に [Tab] キーを押します (コンテンツ補完を使用)。crider@root()> jaas: jaas:manage jaas:realm-list jaas:realm-manage jaas:realms jaas:user-list jaas:users
crider
は 5 つのjaas
コマンド (viewer
と一致) のみにアクセスできることが確認できるはずです。-
logout
コマンドを入力して、リモートコンソールからログアウトします。
トラブルシューティング
LDAP 接続のテスト中に問題が発生した場合は、ログレベルを DEBUG
に引き上げ、LDAP サーバーへの接続で何が起こっているかを詳細にトレースします。
以下の手順を実行します。
Karaf コンソールから以下のコマンドを入力し、ログレベルを
DEBUG
に引き上げます。log:set DEBUG
Karaf ログインをリアルタイムで確認します。
log:tail
ログリストからエスケープするには、Ctrl-C を入力します。