Kompira Enterpirse AD/LDAP連携設定ガイド # 1. はじめに Kompira Enterprise (以後、KE と呼称) Ver.1.6.8 以降では、新たにAD/LDAP連携機能が追加されます。これによって、既存のADサーバやLDAPサーバと連携してKEのログインアカウントを管理することが可能になります。本ドキュメントは、KEの管理者を対象としてKE側でのAD/LDAP連携の設定方法について説明します。AD/LDAPサーバの構築や設定方法については説明しないので、これらの情報については必要に応じてインターネットや書籍等を参照してください。なお、連携の設定にあたっては、AD/LDAPサーバ側での設定に関する情報が必要となります。自身で AD/LDAPサーバを管理していない場合、適宜AD/LDAPサーバの管理者に問い合わせて、必要な情報を取得してください。 # 2. AD/LDAPについて 本章では、KE側でAD/LDAP連携設定を行うにあたって必要となるAD/LDAPに関する最小限の知識を説明します。 ## 2.1. AD/LDAP とは AD (Active Directory) は Microsoft社の Windows Server に備わっている機能の一つで、「ディレクトリ・サービス」を提供するものです。ディレクトリ・サービスとは、コンピュータネットワーク上のリソース(資源)とその所在や属性、設定などの情報を収集・記録し、検索できるようにしたサービスです。ここでいうリソースには、サーバやプリンタ、アプリケーションなど、様々なものが含まれますが、KEとの連携にあたっては、ユーザーやそのユーザが所属するグループといったものが対象となります。 LDAP (Lightweight Directory Access Protocol) は、ディレクトリ・サービスのための通信プロトコルの一つで、RFCで仕様が定義されているインターネット標準のプロトコルです。KEは、LDAPクライアントとして、LDAPサーバにアクセスすることで、KEのログインに必要な情報を取得して認証処理を行います。ADは内部でLDAPを利用してディレクトリ・サービスを提供しており、KEと連携することが可能です。 ## 2.2. LDAP のデータモデル LDAPはその名前の表すとおり、以下のような階層(ディレクトリ)構造によってデータを管理しています。(ディレクトリツリーの階層は無制限) ![図1.jpg](https://image.docbase.io/uploads/8f2ffa06-57d4-4993-8d51-7c9c74374738.jpg =WxH) ディレクトリの各エントリは属性型と属性値から構成されていて、以下のような構造になっています。この図は、人(山田太郎)のエントリに属性型“email address”、属性値“yamada@example.com”という情報が格納されていることを示しています。 ![図2.jpg](https://image.docbase.io/uploads/6b1c584f-df0c-44c0-96e3-e6315e99819f.jpg =WxH) ## 2.3. 用語説明 以下は、本ドキュメントを理解するために必要なLDAPに関する用語説明です。 | 用語 | 意味 | | --- | --- | | エントリ | LDAP ディレクトリ内でのユニット1つのことです。各エントリはその固有の Distinguished Name(区別名) (DN)で識別されます。 | | ディレクトリ情報ツリー(DIT:Directory Information Tree) | エントリの階層構造を表します。ディレクトリ情報ツリーは、階層構造のデータベース内で、ネットワーク上のリソースをすべて論理的なものとして管理したものです。 | | 属性 | エントリと直接関連した情報です。例えば、ある組織は LDAP エントリとして表示出来ます。組織と関連した属性には、fax番号、その住所、などがあります。LDAP ディレクトリでは、人もエントリとして表示できます。人の一般的な属性には、その人の電話番号と電子メールアドレスなどが含まれます。 | | オブジェクトクラス | LDAPの属性にはたくさんの種類があるため、いくつかの属性をお互いに関連した1つのまとまりとして扱える仕組みがあります。それぞれのまとまりをオブジェクトクラスと言います。オブジェクトクラスでは、どのような属性がそこに含まれるのかが定義されています。 | | 識別名(DN) | LDAPでオブジェクトを一意に識別する名前の表記法で、操作対象のユーザーアカウントなどを指定する際に用いられます。相対識別名(RDN)を、対象ディレクトリのツリー構造に従って下位から上位にカンマ区切りで並べて表記します。例)“cn=Fix Taro,ou=users,o=ujitsu,dc=com” | | 相対識別名(RDN) | DN(識別名)を結びつけ、相対的な位置を指定する方法です。「属性名=値」という形式であらわします。各RDNは、その兄弟関係において、一意でなければなりません。例)“ou=fixpoint” | | バインドDN | LDAPサーバにログインする時に使用するユーザのDN。 | | バインド | LDAP サービスへログインすることを意味します。バインドすると、LDAP サービスの利用(検索や、別ユーザの認証情報の照合)が出来ます。 | | 匿名バインド | バインドには具体的な DN (ユーザ名)が必要ですが、バインド DN 無しでも LDAP サービスを使わせることができます。これが匿名バインドです。 | また、LDAP上のユーザ/グループとKE上のそれを区別するために以下の用語を用います。 | 用語 | 意味 | | --- | --- | | LDAPユーザ | LDAPサーバやADサーバなどで管理しているユーザアカウント | | LDAPグループ | LDAPサーバやADサーバなどで管理しているグループ | | ローカルユーザ | KEで登録・管理するユーザ | | ローカルグループ | KEで登録・管理するグループ | # 3. KE の設定方法 KEをAD/LDAPサーバと連携するには、必要な設定項目を入力したLDAPサーバ型オブジェクトを作成し、システム設定(/system/config)の「LDAPサーバ」から、作成したオブジェクトを参照するように設定します。初期状態では、デフォルトのLDAPサーバ(/system/ldap_servers/Default)が設定されているので、このデフォルトのLDAPサーバを直接編集して、LDAPサーバの設定項目を入力しても良いでしょう。複数のLDAPサーバ型オブジェクトを作成しておくと、LDAPサーバの切り替えに便利です。また、システム設定の「LDAPサーバ」フィールドを空にするか、指定したLDAPサーバオブジェクトのURLフィールドが空の場合、AD/LDAP連携は行いません。 以下の各節では、主にWindows のADサーバとの連携を例に、LDAPサーバ型オブジェクトの具体的な設定方法を説明していきます。なお、LDAPサーバ型オブジェクトの各フィールド(設定項目)の詳細は、KEのオンラインヘルプ「2.4.7. LDAPサーバ」をご参照ください。 ## 3.1. AD/LDAPサーバの接続設定 ### 3.1.1. LDAPサーバ URL の指定 LDAPサーバオブジェクトの「サーバURL」フィールドに、連携対象となるAD/LDAPサーバのURLを`ldap://ldap.example.com` のような形式で指定します。URLスキームには、`ldap` もしくは `ldaps` を指定することができます。接続先のサーバへの接続プロトコルに応じてどちらかを指定してください。指定したプロトコルに応じてデフォルトのポート番号は以下のようになります。 | プロトコル | ポート番号 | | --- | --- | | LDAP | 389 | | LDAPS | 636 | 接続先のAD/LDAPサーバのポート番号がデフォルトと異なる場合は、`ldap://ldap.example.com:<ポート番号>` のようにコロン(:)の後にポート番号を明示的に指定してください。 LDAPS ではなく、LDAP + STARTTLS でセキュアに通信を行う場合は、「STARTTLS使用」のフィールドをチェックしてください。 ### 3.1.2. バインドDN とバインドパスワードの指定 接続先のLDAPサーバが匿名バインドを許可していない場合、「バインドDN」と「バインドパスワード」の各フィールドにそれぞれ値を設定する必要があります。バインドDNとバインドパスワードはAD/LDAPサーバの管理者に問い合わせてください。 ## 3.2. ユーザー検索設定 ### 3.2.1. ユーザー検索DNとユーザー検索スコープの指定 KEにログインさせるユーザーをLDAPのディレクトリツリーから検索する際に、起点となるDNを「ユーザー検索DN」フィールドに指定します。また、ユーザー検索のスコープは、ユーザー検索DNの基点からどの範囲を探索するかを以下の中から指定します。 | スコープ | 意味 | 備考 | | --- | --- | --- | | BASE | 指定したDNのみが検索対象となります。 | KEにログインするユーザーを直接DNで指定するケース | | ONELEVEL | 指定したDNの直下のエントリが検索対象となります。 | | | SUBTREE | 指定したDNの子孫のエントリが検索対象となります。 | | 例えば、KEにログインさせるユーザーの DN が、`cn=testuser,cn=Users,dc=example,dc=com` の場合、ユーザー検索DNに `cn=Users,dc=example,dc=com` を設定し、検索スコープには `ONELEVEL` か `SUBTREE` を指定します。 ### 3.2.2. ユーザー検索属性の指定 ユーザー検索DN配下のユーザーオブジェクトは一般的に複数の属性を持っていますが、そのうち、検索対象となるユーザー名が値として含まれる属性名を指定します。例えば、`cn=testuser,cn=Users,dc=example,dc=com` のユーザーエントリの属性が以下とします。 ``` sn: Test givenName: User initials: TU name: Test User sAMAccountName: testuser mail: testuser@example.com ``` KEのログイン画面で入力したユーザー名が検索キーとなります。したがって、 `testuser` でログインしたい場合、属性名として `sAMAccountName` を指定します。なお、ログイン時に使用するユーザー名はKEのユーザー名の命名規則に準じる必要があります(空白文字や特殊記号を含むユーザー名は使用できません)。 ## 3.3. 動作確認 ### 3.3.1. LDAPサーバの接続確認 ここまで、設定が済んだら、KEの画面上から接続確認を行います。LDAPサーバオブジェクトの表示画面の右上にある「接続テスト」ボタンをクリックしてください。 ![image.png](https://image.docbase.io/uploads/3dea7004-f35d-4b99-8760-4e8f414c05b9.png =WxH) LDAPサーバの接続に成功すると、以下のような「接続成功」のダイアログが表示されます。 ![image.png](https://image.docbase.io/uploads/bf6e3447-3223-44be-8a1a-087f62c0e8dc.png =WxH) 接続に失敗した場合は、以下のような「接続失敗」のダイアログが表示されるので、エラーメッセージの内容を参考にして、設定項目に間違いが無いかどうか確認してください。 ![image.png](https://image.docbase.io/uploads/dc100716-0c03-48f4-b9e1-7efe02501b4b.png =WxH) ### 3.3.2. ログインの確認 次に、LDAPのディレクトリツリーに登録してあるユーザーエントリのユーザー名とパスワードで、KEのログイン画面から実際にログインできるかどうかを確認します。ログインに成功すると、新規にKEのユーザーオブジェクトとホームディレクトリが作成されます。 作成されたユーザーオブジェクトには、以下のようにLDAPユーザーを示すフラグがセットされています。一般ユーザーは自身のユーザーオブジェクト編集時にこのフラグを削除することはできません。 ![image.png](https://image.docbase.io/uploads/59d87048-96c4-4f94-a5c1-54cd15250288.png =WxH) ## 3.4. グループ検索設定 グループ検索設定は、LDAPユーザーが所属するLDAPグループをKE側のユーザーオブジェクトの所属グループに反映させる場合や、グループによる連携対象ユーザーの絞り込みの際に必要となる設定です。グループの反映やユーザーの絞り込みが不要な場合には設定の必要はありません。 グループ検索が設定されていて、かつ、LDAPユーザーの所属しているグループが検索結果に含まれる場合、KEのLDAPユーザーオブジェクトのグループフィールドに、所属するLDAPグループが反映されます。LDAPグループオブジェクトがKE上に存在しない場合は、新規にグループオブジェクトが自動的に作成されます。 ### 3.4.1. グループ検索DNとグループ検索スコープ グループ検索の際に、起点となるDNを「グループ検索DN」フィールドに指定します。また、グループ検索スコープの指定は、ユーザー検索スコープの指定と同様、グループ検索DNの基点からどの範囲を探索するかを指定します。 グループ検索では、グループエンティティの `cn` 属性の値がグループ名とみなされます。 ### 3.4.2. グループ検索クラス グループ検索の対象となるエンティティのオブジェクトクラスを表す文字列を指定します。接続先がADサーバの場合は、通常は `group` を指定します。Unix上のOpenLDAPサーバが接続先の場合、一般に `posixGroup` を指定します。 ### 3.4.3. グループ種別 グループ種別には、LDAPグループの種類を以下から選択して指定します。 | グループ種別 | メンバー属性 | ネスト | 備考 | | --- | --- | --- | --- | | PosixGroup | `gidMember` または `memberUid` | なし | 一般的に接続先がOpenLDAPサーバの場合に指定 | | GroupOfNames | `member` | なし | | | NestedGroupOfNames | `member` | あり | | | GroupOfUniqueNames | `uniqueMember` | なし | | | NestedGroupOfUniqueNames | `uniqueMember` | あり | | | ActiveDirectoryGroup | `member` | なし | 一般的に接続先がADサーバの場合に指定 | | NestedActiveDirectoryGroup | `member` | あり | | | OrganizationRoleGroup | `roleOccupant` | なし | | | NestedOrganizationRoleGroup | `roleOccupant` | あり | | 上記の表において、メンバー属性はグループエンティティの中のユーザーメンバーを表す属性名を表します。また、ネストありの場合、ネストしたグループも検索対象となります。例えば、グループ `division_A` のメンバーが `teamB` グループで、さらに`teamB` グループのメンバーにユーザー `hanako` が含まれている場合、グループ `division_A` もユーザ `hanako` の所属グループとみなされます) ### 3.4.4. 反映グループ KE側に反映させる所属グループを限定したい場合は、「反映グループ」フィールドに反映させたいグループ名を指定します。空の場合は、LDAPユーザーが所属する検索されたすべてのグループが反映されます。 ## 3.5. 連携対象ユーザーの絞り込み 「3.2. ユーザー検索設定」で設定した連携対象のユーザーの中から、さらにKEにログインを許可するユーザーを絞り込むことが可能です。 ### 3.5.1. 対象ユーザーの限定 LDAPオブジェクトの「対象ユーザ」フィールドに、KEにログインできるユーザ名を設定(複数指定可能)することで、対象ユーザーを限定することができます。このフィールドを空に設定した場合、絞り込みは行いません。 ### 3.5.2. 所属グループによる絞り込み LDAPオブジェクトの「所属グループDN」フィールドに、LDAPのグループエントリのDNを設定(複数指定可能)することで、そのグループに所属するLDAPユーザーのみKEにログインできるようになります。このフィールドを空に設定した場合、絞り込みは行いません。所属グループを複数指定した場合、いずれかのグループに所属するユーザーが対象となります。 なお、所属グループによる絞り込みを行うには、所属グループDNが「3.4. グループ検索設定」で検索対象となるグループに含まれている必要があります。グループ検索設定がされていない場合、所属グループによる絞り込みはできません。 ## 3.6. その他の設定 ### 3.5.1. LDAPの登録情報をKEのユーザーデータに反映する LDAPサーバオブジェクトの以下の各フィールドに対応する属性名を指定することで、所属グループ以外でもメールアドレスや苗字など、ユーザーエンティティに格納されている属性値をKEのユーザーオブジェクトの対応するフィールドに反映させることができます。 | LDAPサーバオブジェクトのフィールド名 | ユーザーオブジェクトのフィールド | デフォルト値 | | --- | --- | --- | | ユーザデータ(名) | 名 | givenName | | ユーザデータ(姓) | 姓 | sn | | ユーザデータ(Email) | Eメール | mail | LDAPサーバ側で、エンティティ情報を変更した場合、その後、KEにログインしたタイミングで、KE側のユーザーオブジェクトの情報に反映されます。 ### 3.5.2. LDAPサーバ障害時でもKEにログインできるようにする(フォールバックログイン) KEでLDAP連携時、連携先のLDAPサーバで障害が発生するなどして、KEからアクセスできなくなると、KEからLDAPユーザーでのログインができなくなります。ただし、LDAPサーバオブジェクトの「フォールバックログイン」を許可(True)にセットしている場合は、LDAPサーバ障害時でも、LDAPユーザーでKEにログイン可能です。ただし、ここでログイン可能なユーザーは、障害発生前に一度でもKEにログインしたLDAPユーザーに限られます。ログインパスワードは、最後にログインした時にパスワードとなります。 ### 3.5.3. セッション有効期間について LDAPユーザーはデフォルトのセッション有効期間が0に設定されています。したがって、LDAPユーザーでログインして、ログアウトせずにブラウザを閉じると、その時点でログインセッションは破棄され、再度ログインする必要があります。LDAPユーザーオブジェクトの「セッション有効期間」を設定することで、セッション有効期間を延ばすことができます。 (ちなみに、ローカルユーザーの場合、セッション有効期間は2週間となっているため、ブラウザを閉じても、2週間は再ログインせずにアクセスすることが可能です) # 4. その他 ## 4.1. トラブルシューティング #### ■ 接続テストに失敗する場合 以下の原因が考えられます。 - LDAPのサーバURLの指定が間違っている - バインドDNやバインドパスワードが間違っている - ユーザー検索DNが空である、または、間違っている #### ■ LDAPユーザーでログインできない 接続テストには成功するが、KEからLDAPユーザーでログインできない場合、以下の原因が考えられます。 - ユーザ検索属性の指定が間違っている - ユーザー名がKEの命名規則に違反している - LDAPサーバー側のアカウントが無効になっている ## 4.2. 注意事項&制限事項 #### ■ ローカルユーザとLDAPユーザ名が重複している場合 KEとLDAPの両方で同じユーザ名が重複して登録されている場合、ローカルユーザが優先されます。たとえば、`root` ユーザや `guest` ユーザはKEのローカルユーザとしてあらかじめ組み込まれているため、LDAP側で同名のユーザを登録しても、KEのログインには影響を与えません。 #### ■ ユーザー名の制限について KEと連携可能なLDAPユーザーのユーザー名は、KEのユーザーの命名規則に合致している必要があります。具体的には、記号以外の文字、数字、および、_ 以外は使用できません。先頭に半角数字は使用できません。これらの規則に反しているユーザー名がLDAPユーザーに存在しても、KEからはログインできません。 # 5. 参考資料 - https://software.fujitsu.com/jp/manual/manualfiles/M050000/B1WN4901/02/irep01/irep0010.htm