« Google Mail Checker Plus いい感じです | Main | ServersMan@VPS(9) phpLDAPadminでユーザーの追加を行う »

2010.07.18

ServersMan@VPS(8) OpenLDAP+Apache2.2

ldifファイルに2階層以上の組織構造を記述。例えば、こんな感じ。

dn: dc=testdomain,dc=co,dc=jp
objectClass: dcObject
objectClass: organization
o: testdomain
dc: testdomain

dn: ou=org01,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: org01

dn: ou=staff,ou=org01,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: staff

dn: ou=tempstaff,ou=org01,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: tempstaff

dn: ou=org02,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: org02

dn: ou=staff,ou=org02,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: staff

dn: ou=org03,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: org03

dn: ou=staff,ou=org03,dc=testdomain,dc=co,dc=jp
objectClass: top
objectClass: organizationalUnit
ou: staff

dn: cn=testuser01,ou=staff,ou=org01,dc=testdomain,dc=co,dc=jp
objectClass: inetOrgPerson
uid: testuser01
userPassword: password01
sn: testSn
cn: testuser01
description: developer

dn: cn=testuser02,ou=tempstaff,ou=org01,dc=testdomain,dc=co,dc=jp
objectClass: inetOrgPerson
uid: testuser02
userPassword: password02
sn: testSn
cn: testuser02
description: tester

dn: cn=testuser03,ou=staff,ou=org02,dc=testdomain,dc=co,dc=jp
objectClass: inetOrgPerson
uid: testuser03
userPassword: password03
sn: testSn
cn: testuser03
description: org02developer

組織org01の下にstaffとtempstaffという組織を追加。
組織org02の下にstaffという組織を追加。
組織org03の下にstaffという組織を追加。

org01/staff の下にメンバーを1人、org01/tempstaff の下にメンバーを1人、org02/staff の下にメンバーを1人登録するような感じのldifファイルです。

ldapadd -v -h localhost -x -D cn=ldapadmin,dc=testdomain,dc=co,dc=jp -w ******** -f test.ldif

ってな感じでデータを取込。phpLDAPadmin でログインすると、階層構造がいい感じで作られているのがわかります。

Apache用に以下のような設定を記述してみます。

<Location /test1/>
  AuthType Basic
  AuthName "LDAP Auth Test"
  AuthBasicProvider ldap
  AuthzLDAPAuthoritative on
  AuthLDAPGroupAttributeIsDN off
  AuthLDAPUrl ldap://localhost/dc=testdomein,dc=co,dc=jp?uid
  AuthLDAPBindDN cn=ldapadmin,dc=testdomein,dc=co,dc=jp
  AuthLDAPBindPassword ********
  Require ldap-attribute description=developer
</Location>

<Location /test2/>
  AuthType Basic
  AuthName "LDAP Auth Test"
  AuthBasicProvider ldap
  AuthzLDAPAuthoritative on
  AuthLDAPGroupAttributeIsDN off
  AuthLDAPUrl ldap://localhost/dc=testdomein,dc=co,dc=jp?uid
  AuthLDAPBindDN cn=ldapadmin,dc=testdomein,dc=co,dc=jp
  AuthLDAPBindPassword ********
  Require ldap-attribute description=tester
</Location>

<Location /test3/>
  AuthType Basic
  AuthName "LDAP Auth Test"
  AuthBasicProvider ldap
  AuthzLDAPAuthoritative on
  AuthLDAPGroupAttributeIsDN off
  AuthLDAPUrl ldap://localhost/dc=testdomein,dc=co,dc=jp?uid
  AuthLDAPBindDN cn=ldapadmin,dc=testdomein,dc=co,dc=jp
  AuthLDAPBindPassword ********
  Require ldap-attribute description=developer description=tester
</Location>

本当は、組織情報(ou)を用いてアクセス制御を行いたいのですが、ldap-groupやldap-filterの設定がどうにもうまくいかない(設定方法がよくわからない)ので、かなり妥協しています。
description属性を利用して、無理矢理グループ化。組織情報を無視していますね(苦笑)。

まぁ、とりあえず、上記のような設定を行うと、
testuser01 ⇒ test1/test3にアクセス可能
testuser02 ⇒ test2/test3にアクセス可能
testuser03 ⇒ アクセス不可
といった感じでアクセス制限をかけることが出来るようです。

ldap-attributeで or 条件を記述する場合、半角スペースで区切って複数指定すればOKってところに注意。ldap-attributeを複数行指定すると、上手く動きませんでした。

ちなみに、dn:で記述しているcnの値と、cn:で記述している値とが違っている場合、

ldapadd: Naming violation (64)
       additional info: value of naming attribute 'cn' is not present in entry

というエラーが出てしまいますので注意(^^;

|

« Google Mail Checker Plus いい感じです | Main | ServersMan@VPS(9) phpLDAPadminでユーザーの追加を行う »

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference ServersMan@VPS(8) OpenLDAP+Apache2.2:

« Google Mail Checker Plus いい感じです | Main | ServersMan@VPS(9) phpLDAPadminでユーザーの追加を行う »