一度Basic認証が通ると本来アクセスさせたくない他のディレクトリにもアクセスできてしまう場合があります。 ディレクトリ別にアクセス可能なユーザ/グループを定義して、OpenLDAPを利用したBasic認証の設定手順をまとめます。 【OpenLDAPサーバ】 OS: CentOS 6.3(64-bit) openldap-servers: 2.4.23-26.el6_3.2 hostname: openldap IP: 192.168.77.146 【Webサーバ】 OS: CentOS 6.3(64-bit) Apache: 2.2.15 hostname: web03 IP: 192.168.77.147
■アクセス制御
ユーザ:en2011001,en2011002 → unit01ディレクトリにアクセス可能
ユーザ:en2012001,en2012002 → unit02ディレクトリにアクセス可能
■OpenLDAPユーザ作成
Apache Directory Studio を利用してユーザをOpenLDAPに登録する。
■OpenLDAPサーバで作成状況確認
[root@openldap ~]# ldapsearch -x -h localhost -b "dc=open_ldap,dc=com"
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# open_ldap.com
dn: dc=open_ldap,dc=com
dc: open_ldap
o: open_ldap
objectClass: dcObject
objectClass: top
objectClass: organization
# unit01, open_ldap.com
dn: ou=unit01,dc=open_ldap,dc=com
ou: unit01
objectClass: organizationalUnit
objectClass: top
# en2011001, unit01, open_ldap.com
dn: cn=en2011001,ou=unit01,dc=open_ldap,dc=com
sn:: 56aP5rKi
cn: en2011001
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
givenName:: 6Kut5ZCJ
userPassword:: e1NTSEF9UGN4eHNTakF4U0ltQXB2ZXdaZXNBeUp6cyt4TG5odHNBMXJNaFE9PQ=
=
mail: yukichi@open_ldap.com
# en2011002, unit01, open_ldap.com
dn: cn=en2011002,ou=unit01,dc=open_ldap,dc=com
sn:: 5aSP55uu
cn: en2011002
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
userPassword:: e1NTSEF9S0dTTEdrWmt3VnN5SWhlbHRtV2dMb2NEV0JEY2R4clpzdWJiM2c9PQ=
=
givenName:: 5ryx55+z
mail: soseki@open_ldap.com
# unit02, open_ldap.com
dn: ou=unit02,dc=open_ldap,dc=com
ou: unit02
objectClass: organizationalUnit
objectClass: top
# en2012001, unit02, open_ldap.com
dn: cn=en2012001,ou=unit02,dc=open_ldap,dc=com
userPassword:: e1NTSEF9UGN4eHNTakF4U0ltQXB2ZXdaZXNBeUp6cyt4TG5odHNBMXJNaFE9PQ=
=
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: en2012001
sn:: 6YeO5Y+j
givenName:: 6Iux5LiW
mail: hideyo@open_ldap.com
# en2012002, unit02, open_ldap.com
dn: cn=en2012002,ou=unit02,dc=open_ldap,dc=com
userPassword:: e1NTSEF9S0dTTEdrWmt3VnN5SWhlbHRtV2dMb2NEV0JEY2R4clpzdWJiM2c9PQ=
=
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
cn: en2012002
sn:: 5qiL5Y+j
givenName:: 5LiA6JGJ
mail: ichiyo@open_ldap.com
# search result
search: 2
result: 0 Success
# numResponses: 8
# numEntries: 7
[root@openldap ~]#
■WebサーバBasic認証設定
[root@web03 ~]# vi /etc/httpd/conf/httpd.conf
[root@web03 ~]# tail -17 /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/unit01/">
AuthName "UserID/Password"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://192.168.77.146:389/ou=unit01,dc=open_ldap,dc=com?cn?sub?(objectClass=person)
Require valid-user
</Directory>
<Directory "/var/www/html/unit02/">
AuthName "UserID/Password"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://192.168.77.146:389/ou=unit02,dc=open_ldap,dc=com?cn?sub?(objectClass=person)
Require valid-user
</Directory>
[root@web03 ~]# /etc/init.d/httpd restart
※表示の都合上タグを"<"と">"で記載。■ブラウザで確認
en2011002 で http://192.168.77.147/unit01/ にアクセスしてみる。
アクセス可能。
en2011002 で http://192.168.77.147/unit02/ にアクセスしてみる。
アクセス不可能。(ディレクトリ別の制御ができている)
en2012001 で http://192.168.77.147/unit02/ にアクセスしてみる。
アクセス可能。
■その時のWebサーバのログ
[root@web03 ~]# tail -f /var/log/httpd/access_log
---
192.168.77.21 - - [28/Jan/2013:01:32:29 +0900] "GET /unit01/ HTTP/1.1" 401 481 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2011002 [28/Jan/2013:01:33:49 +0900] "GET /unit01/ HTTP/1.1" 200 235 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - - [28/Jan/2013:01:33:49 +0900] "GET /favicon.ico HTTP/1.1" 404 289 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - - [28/Jan/2013:01:42:25 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2011002 [28/Jan/2013:01:42:25 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2011002 [28/Jan/2013:01:42:31 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2011002 [28/Jan/2013:01:42:34 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2011002 [28/Jan/2013:01:42:37 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - - [28/Jan/2013:01:43:54 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2011002 [28/Jan/2013:01:43:54 +0900] "GET /unit02/ HTTP/1.1" 401 481 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"
192.168.77.21 - en2012001 [28/Jan/2013:01:44:51 +0900] "GET /unit02/ HTTP/1.1" 200 235 "http://192.168.77.147/unit01/" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)"