概要
Fess はLDAP(Lightweight Directory Access Protocol)サーバーとの統合をサポートしており、 エンタープライズ環境での認証とユーザー管理を実現できます。
LDAP統合により:
Active DirectoryやOpenLDAPでのユーザー認証(ログイン)
グループ・ロールベースのアクセス制御
管理画面からのLDAPユーザー/ロール/グループ管理(オプション)
が可能になります。
対応LDAPサーバー
Fess は以下のLDAPサーバーとの統合をサポートしています:
Microsoft Active Directory
OpenLDAP
389 Directory Server
Apache Directory Server
その他のLDAP v3互換サーバー
前提条件
LDAPサーバーへのネットワークアクセス
LDAP検索用のサービスアカウント(バインドDN)
LDAPの構造(ベースDN、属性名など)の理解
設定方法の概要
Fess のLDAP設定は、用途によって2つの場所で管理されます。
- 接続・認証設定(管理画面 /
system.properties) LDAPサーバーへの接続とログイン認証に関する設定です。 管理画面の 「システム > 全般」 ページにある「LDAP」セクションから設定でき、
app/WEB-INF/conf/system.propertiesに保存されます。- LDAP管理機能・動作設定(
fess_config.properties) 管理画面からLDAPユーザー/ロール/グループを管理する機能や、 ロール解決などの動作に関する設定です。これらは
app/WEB-INF/classes/fess_config.propertiesに定義されており、 値を変更する場合はこのファイルを編集します。
注釈
ログイン認証だけを利用する場合は、「接続・認証設定」のみで動作します。 「LDAP管理機能」(ldap.admin.enabled)は、管理画面からLDAP側の ユーザー/ロール/グループを作成・更新・削除する場合にのみ必要です。
接続・認証設定
これらの設定は管理画面「システム > 全般」のLDAPセクションから設定でき、 app/WEB-INF/conf/system.properties に保存されます。直接ファイルを編集することもできます。
設定例(system.properties を直接編集する場合):
注釈
%s プレースホルダーはJavaの String.format() で処理されます。 ldap.security.principal ・ ldap.account.filter ・ ldap.group.filter ・ 各管理用フィルターはいずれも %s 形式を使用します({0} 形式ではありません)。 なお、フィルターに渡されるユーザー名はLDAPインジェクション対策として Fess 内部で自動的にエスケープされます。
LDAP管理機能・動作設定
以下のプロパティは app/WEB-INF/classes/fess_config.properties で定義されています。 値を変更する場合はこのファイルを編集します。
管理機能の有効化
| プロパティ | デフォルト値 | 説明 |
|---|---|---|
ldap.admin.enabled | false | 管理画面からLDAPのユーザー/ロール/グループを作成・更新・削除する機能を有効にします。**ログイン認証には不要**で、有効にしなくてもLDAPによるログインは機能します。 |
ldap.admin.sync.password | true | 管理画面でユーザーを更新した際に、Fess 側のパスワードをLDAPと同期します。 |
ldap.auth.validation | true | ログイン時にLDAP認証の検証を行います。 |
ユーザー/ロール/グループの管理用フィルターとベースDN
ldap.admin.enabled=true の場合に、管理画面からLDAPエントリを操作するために使用します。
ロール解決と動作の制御
ログイン後のロール/グループ解決の挙動を制御します。
属性マッピング
LDAP属性と Fess のユーザー属性の対応は ldap.attr.* プロパティで定義されています。 通常は変更不要ですが、スキーマが異なる場合に調整できます。代表的な例:
注釈
ldap.attr.state は st、ldap.attr.city は l にマッピングされるなど、 プロパティ名とLDAP属性名が一致しないものもあります。 完全な一覧は fess_config.properties の ldap.attr. で始まる行を参照してください。
Active Directory設定
Microsoft Active Directory向けの設定例です(system.properties または管理画面)。
入れ子グループ(ネストグループ)を解決する場合は、Active Directory固有の LDAP_MATCHING_RULE_IN_CHAIN を使用できます。
OpenLDAP設定
OpenLDAP向けの設定例です。
注釈
標準のOpenLDAPは memberOf 属性を持たないため、 ldap.group.filter を使ってグループを解決します。 memberof オーバーレイを有効にしている場合は ldap.memberof.attribute も利用できます。
セキュリティ設定
LDAPS(SSL/TLS)
暗号化された接続を使用:
自己署名証明書の場合は、Java truststore に証明書をインポートします。
パスワードの保護
ldap.admin.security.credentials は system.properties に保存されます。 管理画面から設定した認証情報は内部的に暗号化されて保存されます。 ファイルのアクセス権限を適切に制限してください。
フェイルオーバー
複数のLDAPサーバーへフェイルオーバーする場合は、ldap.provider.url に スペース区切りで複数のURLを指定します。
トラブルシューティング
接続エラー
症状: LDAP接続に失敗する
確認事項:
LDAPサーバーが起動しているか
ファイアウォールでポートが開いているか(389または636)
ldap.provider.urlが正しいか(ldap://またはldaps://)ldap.admin.security.principalとパスワードが正しいか
認証エラー
症状: ユーザー認証に失敗する
確認事項:
ldap.security.principalのテンプレートが正しいか(%sを含むか)ユーザーが指定したベースDN内に存在するか
ldap.account.filterが正しいか
グループ/ロールが取得できない
症状: ユーザーのグループやロールが取得できない
確認事項:
ldap.group.filterが正しいかldap.memberof.attributeが正しいか(Active Directoryの場合)グループが検索ベースDN内に存在するか
ldap.role.search.*.enabledが有効になっているか
管理画面からのユーザー管理ができない
症状: 管理画面でLDAPユーザーを作成・編集・削除できない
確認事項:
ldap.admin.enabledがtrueになっているかldap.admin.user.base.dnなどの管理用ベースDNが正しいかldap.admin.security.principalのサービスアカウントに書き込み権限があるか
デバッグ設定
詳細なログを出力するには、app/WEB-INF/classes/log4j2.xml にロガーを追加します。
参考情報
ロールベース検索の設定 - ロールベースのアクセス制御
Windows統合認証によるSSO設定 - SPNEGO(Kerberos)認証
ユーザー - ユーザー管理ガイド