apacheのbasic認証をLDAPで

使っているCentOS6.4のhttpdを確認。パッケージ版はLDAPモジュールが入っているようだ。

$ rpm -qa | grep httpd
httpd-tools-2.2.15-28.el6.centos.x86_64
httpd-2.2.15-28.el6.centos.x86_64
$ cd /etc/httpd/conf
$ grep ldap httpd.conf
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
$

なお、セルフコンパイルする場合は、--with-ldapを忘れずに行うこと。

$ ./configure --with-ldap --enable-authnz-ldap=shared --enable-ldap=shared
....
$ make
$ make install

LDAPURI

LDAPURIは以下のようになる。基本的には"?"でつなげる。まあ当たり前だよね。

scheme "://" [hostport] ["/" [dn ["?" [attributes] ["?" [scope] ["?" [filter] ["?" extensions] ] ] ] ] ]

例えばuidの表示、

$ ldapsearch -x -s sub -b 'ou=Users,dc=miyagino,dc=net' '(uid=test0)' uid

は、

ldap://localhost/ou=Users,dc=miyagino,dc=net?uid?sub?(uid=test0)

となる。

Apacheの設定

パッケージ版のhttpd.confではデフォルトでLoadModuleしてくれているので、必要な設定を以下のように記述。

# cd /etc/httpd/conf
# vi httpd.conf
....
ServerName localhost:80
....
# cd /etc/httpd/conf.d
# vi ldap.conf
Alias /ldap/ /home/httpd/ldap/
<Directory "/home/support/ldap/">
	AuthName "LDAP Authentication"
	AuthType Basic
	AuthBasicProvider ldap
	AuthzLDAPAuthoritative  off
	AuthLDAPURL  ldap://localhost/ou=Users,dc=miyagino,dc=net?uid?sub?(objectClass=posixAccount)
	Require valid-user
</Directory>
# /etc/init.d/httpd start

これでhttp://localhost/ldapにアクセスすると、ユーザ名に"uid"の値を指定して設定したパスワードでアクセス可能となる。


その他、設定内容は以下。

AuthLDAPBindDN LDAPサーバへバインドするためのバインドDN
AuthLDAPBindPassword 上記パスワード
AuthLDAPUrl LDAP URLの指定
AuthzLDAPAuthoritative 認証が失敗したときに他の認証モジュールが認証を行うのを防ぐ