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 をローカルマシンにインストールできます。

  1. 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 では利用できません。

  2. 389 ディレクトリーサーバーパッケージをインストールした後、以下のコマンドを実行してディレクトリーサーバーを設定します。

    sudo setup-ds-admin.pl

    このスクリプトは対話型で、389 Directory Server の基本設定を指定するように求められます。スクリプトが完了すると、バックグラウンドで 389 Directory Server が自動的に起動します。

  3. 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.orgWindows Console のダウンロード手順を参照してください。

コンソールのサーバーへの接続

389 Directory Server Console を LDAP サーバーに接続するには、以下を行います。

  1. 以下のコマンドを入力して、389 Management Console を起動します。

    389-console
  2. ログインダイアログが表示されます。User ID および Password フィールドに LDAP ログインクレデンシャルを入力し、Administration URL フィールドのホスト名をカスタマイズして 389 管理サーバーインスタンスに接続します (ポート 9830 は 389 管理サーバーインスタンスのデフォルトポートです)。

    LDAP Console Login
  3. 389 Management Console ウィンドウが表示されます。Servers and Applications タブを選択します。
  4. 左側のペインで、Directory Server アイコンを見つけます。

    LDAP Console Open
  5. 左側のペインで Directory Server アイコンを選択し、Open をクリックして 389 Directory Server Console を開きます。
  6. 389 Directory Server Console で、Directory タブをクリックして Directory Information Tree (DIT) を表示します。
  7. ルートノード YourDomain (通常はホスト名にちなんで命名され、次のスクリーンショットの localdomain のように表示) を展開して、DIT を表示します。

    LDAP ServerConsole DIT

8.3. ディレクトリーサーバーへのユーザーエントリーの追加

OSGi コンテナーで LDAP 認証を使用するための基本的な前提条件は、X.500 ディレクトリーサーバーが実行し、ユーザーエントリーのコレクションで設定することです。多くのユースケースでは、ユーザーロールを管理するために複数のグループを設定する必要もあります。

ユーザーエントリー追加の代替

LDAP サーバーにユーザーエントリーおよびグループがすでに定義されている場合は、新規エントリーを作成する代わりに、LDAPLoginModule 設定の roles.mapping プロパティーを使用して既存の LDAP グループを JAAS ロールにマッピングした方が好ましい場合があります。詳細は、「JAAS LDAP ログインモジュール」 を参照してください。

ゴール

本チュートリアルでは、以下を行います。

ユーザーエントリーの追加

ディレクトリーサーバーにユーザーエントリーを追加するには、以下の手順を実行します。

  1. LDAP サーバーおよびコンソールが稼働していることを確認します。「Directory Server およびコンソールの設定」 を参照してください。
  2. Directory Server Console で、Directory タブをクリックし、YourDomain ノード下で People ノードを見つけます (以下のスクリーンショットでは YourDomainlocaldomain として表示されてます)。

    directory information tree in the LDAP browser
  3. People ノードを右クリックし、コンテキストメニューから menu:[ > New > > User > ] と選択して Create New User ダイアログを開きます。
  4. Create New User ダイアログの左側のペインで User タブを選択します。
  5. 以下のように User タブのフィールドを入力します。

    1. First Name フィールドを John に設定します。
    2. Last Name フィールドを Doe に設定します。
    3. User ID フィールドを jdoe に設定します。
    4. Password フィールドにパスワード secret を入力します。
    5. Confirm Password フィールドにパスワード secret を入力します。

      Filling the fields of the User tab in the Create New User dialog
  6. OK をクリックします。
  7. Step 3 から Step 6 に従って、ユーザー Jane Doe を追加します。

    Step 5.e で、新規ユーザーの User IDjanedoe を使用し、パスワードフィールドにはパスワード secret を使用します。

  8. Step 3 から Step 6 に従って、ユーザー Camel Rider を追加します。

    Step 5.e で、新規ユーザーの User IDcrider を使用し、パスワードフィールドにはパスワード secret を使用します。

ロールのグループの追加

ロールを定義するグループを追加するには、以下を実行します。

  1. Directory Server ConsoleDirectory タブで、YourDomain ノード下の Groups ノードを見つけます。
  2. Groups ノードを右クリックし、コンテキストメニューから menu:[ > New > > Group > ] と選択して Create New Group ダイアログを開きます。
  3. Create New Group ダイアログの左側のペインで General タブを選択します。
  4. 以下のように General タブのフィールドを入力します。

    1. Group Name フィールドを admin に設定します。
    2. 必要に応じて、Description フィールドに説明を入力します。

      Filling the fields of the General tab in the Create New Group dialog
  5. Create New Group ダイアログの左側のペインで Members タブを選択します。

    Filling the fields of the Members tab in the Create New Group dialog
  6. Add をクリックして Search users and groups ダイアログを開きます。
  7. Search フィールドで、ドロップダウンメニューから Users を選択し、Search ボタンをクリックします。

    LDAP SearchUsers
  8. 表示されているユーザーのリストから、John Doe を選択します。
  9. OK をクリックして Search users and groups ダイアログを閉じます。
  10. OK をクリックして Create New Group ダイアログを閉じます。
  11. Step 2 から Step 10 に従って、manager ロールを追加します。

    Step 4Group Name フィールドに manager を入力します。

    Step 8 で、Jane Doe を選択します。

  12. Step 2 から Step 10 に従って、viewer ロールを追加します。

    Step 4Group Name フィールドに viewer を入力します。

    Step 8 で、Camel Rider を選択します。

  13. Step 2 から Step 10 に従って、ssh ロールを追加します。

    Step 4Group Name フィールドに ssh を入力します。

    Step 8 で、John DoeJane Doe、および Camel Riderすべてのユーザーを選択します。

8.4. OSGi コンテナーでの LDAP 認証の有効化

本セクションでは、OSGi コンテナーで LDAP レルムを設定する方法を説明します。新しいレルムはデフォルトの karaf レルムを上書きするため、コンテナーは X.500 ディレクトリーサーバーに保存されているユーザーエントリーを基にしてクレデンシャルを認証します。

参考資料

LDAP 認証については、より詳細な以下のドキュメントを参照してください。

スタンドアロン OSGi コンテナーの手順

スタンドアロンの OSGi コンテナーで LDAP 認証を有効にするには、以下を実行します。

  1. X.500 ディレクトリーサーバーが稼働していることを確認します。
  2. ターミナルウインドウに以下のコマンドを入力して、Karaf コンテナーを起動します。

    ./bin/fuse
  3. ldap-module.xml という名前のファイルを作成します。
  4. 例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=(&amp;(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 プロパティーを設定する場合は、プロパティー値を二重引用符で囲まないでください。

  5. 新しい LDAP モジュールをデプロイするには、ldap-module.xml を Karaf コンテナーの deploy/ ディレクトリー (ホットデプロイ) にコピーします。

    LDAP モジュールは自動的にアクティベートされます。

    注記

    その後、LDAP モジュールをアンデプロイする必要がある場合は、Karaf コンテナーの実行中deploy/ ディレクトリーから ldap-module.xml ファイルを削除して実行できます。

LDAP 認証のテスト

以下のように Karaf client ユーティリティーを使用して実行中のコンテナーに接続し、新しい LDAP レルムをテストします。

  1. 新しいコマンドプロンプトを開きます。
  2. Karaf InstallDir/bin ディレクトリーに移動します。
  3. 以下のコマンドを入力し、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 と一致) にアクセスできることが確認できるはずです。

  4. logout コマンドを入力して、リモートコンソールからログアウトします。
  5. 以下のコマンドを入力し、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 と一致) にアクセスできることが確認できるはずです。

  6. logout コマンドを入力して、リモートコンソールからログアウトします。
  7. 以下のコマンドを入力し、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 と一致) のみにアクセスできることが確認できるはずです。

  8. logout コマンドを入力して、リモートコンソールからログアウトします。

トラブルシューティング

LDAP 接続のテスト中に問題が発生した場合は、ログレベルを DEBUG に引き上げ、LDAP サーバーへの接続で何が起こっているかを詳細にトレースします。

以下の手順を実行します。

  1. Karaf コンソールから以下のコマンドを入力し、ログレベルを DEBUG に引き上げます。

    log:set DEBUG
  2. Karaf ログインをリアルタイムで確認します。

    log:tail

    ログリストからエスケープするには、Ctrl-C を入力します。