ApacheのLDAP認証

最終更新日:2006年09月14日

はじめに

概要

Apacheの認証に LDAP(Lightweight Directory Access Protocol) を使用する環境を作ってみたいので整理しておく。

構築した環境

名称 バージョン 備考
Solaris x86 10
Apache 2.2.3 2006.09.02時点での最新版。

Apacheのインストール

インストール手順(1)

新規インストール時は以下の手順で問題なし。
$ tar zxf httpd-2.2.3.tar.gz
$ cd httpd-2.2.3
$ ./configure --with-ldap --enable-ldap --enable-authnz-ldap
$ make
# make install
※ make時に mod_authnz_ldap.c のコンパイルで失敗する場合は、手順(2)を試してみる。

インストール手順(2)

既にApacheをインストール済みで、make時に
#error mod_authnz_ldap requires APR-util to have LDAP support built in. To fix add --with-ldap to ./configure.
と言われて mod_authnz_ldap.c のコンパイルで失敗する場合は、configure に "--with-included-apr" オプションを付けて試してみる。
$ ./configure --with-ldap --enable-ldap --enable-authnz-ldap --with-included-apr
$ make
# make install

組み込まれたモジュールの確認

$ ./httpd -l
Compiled in modules:
  core.c
  mod_authn_file.c
  mod_authn_default.c
  mod_authz_host.c
  mod_authz_groupfile.c
  mod_authz_user.c
  mod_authnz_ldap.c
  mod_authz_default.c
  mod_auth_basic.c
  mod_include.c
  mod_filter.c
  util_ldap.c
  mod_log_config.c
  mod_env.c
  mod_setenvif.c
  prefork.c
  http_core.c
  mod_mime.c
  mod_status.c
  mod_autoindex.c
  mod_asis.c
  mod_cgi.c
  mod_negotiation.c
  mod_dir.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_so.c
mod_authnz_ldap.c と util_ldap.c が組み込まれている。

Apacheの設定

LDAP認証の設定例

認証を行いたいディレクトリに対し、httpd.conf か .htaccess で以下のような設定を行う。

設定例その1

AuthType                Basic
AuthName                "LDAP Auth"
AuthBasicProvider       ldap
AuthLDAPURL             ldap://ldap.example.com/o=Example%20Limited,c=jp?uid    ← スペースは"%20"にする
Require                 ldap-attribute objectClass=person

設定例その2

AuthType                Basic
AuthName                "LDAP Auth"
AuthBasicProvider       ldap
AuthzLDAPAuthoritative  off                 ← "Require valid-user"を使用する場合には設定する必要あり
AuthLDAPURL             ldap://ldap.example.com/o=Example%20Limited,c=jp?uid    ← スペースは"%20"にする
Require                 valid-user

AuthLDAPURL ディレクティブの書式

ldap://host:port/basedn?attribute?scope?filter
basedn にスペースを入れる場合は、"%20"にエンコードする。
attribute にはカンマ区切りで複数書く事が出来るが、使用されるのは最初の値のみ。
詳細は、Apache 2.2 mod_authnz_ldapモジュールのドキュメントの "AuthLDAPUrl Directive" の項を参照。

Require ディレクティブの書式

LDAP認証(mod_authnz_ldap モジュール)使用時の Require の書式は、Apache 2.2 mod_authnz_ldap モジュールのドキュメントの "The require Directives" の項を参照。

LDAPとFileによる認証の設定例

LDAPに存在しないユーザはパスワードファイルを作成して管理したいような場合の設定例
AuthType                Basic
AuthName                "LDAP & File Auth"
AuthBasicProvider       file ldap
AuthzLDAPAuthoritative  off

AuthLDAPURL             ldap://ldap.example.com/o=Example%20Limited,c=jp?uid
Require                 ldap-attribute objectClass=person

AuthUserFile            /usr/local/apache2/htdocs/ldap-auth/.htpasswd
Require                 valid-user
上の設定では、まず File で認証を行い、File にユーザが存在しない場合は LDAP に問い合わせて認証を行う。

LDAPサーバの確認

接続確認

ldapsearch コマンドでの確認例
$ ldapsearch -x -H ldap://ldap.example.com -b "o=Example Limited, c=jp" -s sub "(uid=検索文字列)"
"検索文字列"には、ワイルドカードを指定できる。