CentOS5.0でApache2.2のBasic認証をLDAP連携にする

一般的にWebサイト内には随所に公開したくない管理用やプライベートなページがある。Apacheではそのために設定ファイルのDirectoryディレクティブや各公開ディレクトリの.htaccessファイルでIPアドレスによるフィルタやBasic認証の設定が出来る。Basic認証は通常はApache独自のパスワードを管理するが、これをLDAPを参照するようにしたい。

まず、Apacheで必要なモジュールがロードされることを確認する。

[root@manager1 ~]# vi /etc/httpd/conf/httpd.conf
...
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
...

そして認証をかけたいディレクトリの設定を以下のように変更する。

[root@manager1 ~]# vi /etc/httpd/conf.d/private.conf

Alias /private "/var/www/html/private"

<Directory "/var/www/html/private">
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
   AuthName "LDAP Auth"
   AuthType Basic
   AuthBasicProvider ldap
   AuthLDAPURL ldap://ns1/ou=People,dc=grandarbre,dc=net?uid
   Require ldap-attribute objectClass=person
</Directory>

ここでAuthLDAPURLとRequireは環境に合わせて修正しなければならない。 参考までに、当サイトのLDAPサーバではユーザは以下のように登録されている。

# testuser, People, grandarbre.net
dn: uid=testuser,ou=People,dc=grandarbre,dc=net
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: testuser
uidNumber: 1011
gidNumber: 513
homeDirectory: /home/testuser
gecos: System User,,,,
cn: System User
sn: User
givenName: System
loginShell: /bin/bash
userPassword: {SSHA}(削除)

あとはApacheに設定を再読み込みさせればOK。

[root@manager1 ~]# service httpd reload