グループのメンバ
次に紹介するディレクティブセットは、Require ldap-groupディレクティブで指定されているグループのプライマリまたはセカンダリメンバであるユーザに対し、カレントディレクトリへのアクセスを許可する。
このグループの設定は、NISから変換されたディレクトリのスキーマ設計ゆえに非常に難解かもしれない(私の場合もそうだった)。初めに示したLDIFレコードを見返してみるとgidNumber属性が420になっていて、これと同じ値が私のディレクトリの“infosys”グループに割り当てられているのがわかる。これはユーザのプライマリグループに相当する。ただし、各グループのLDAPエントリには、そのグループのセカンダリメンバのユーザだけがmemberUid属性として記される。以下に、グループレコードの一部を示す。
dn: cn=infosys,ou=Group,dc=company,dc=com objectClass: posixGroup gidNumber: 420 memberUid: user1 memberUid: user2 memberUid: user3 ...
ここでもう1つのテストとして、グループのプライマリユーザを取り出すためのRequire ldap-attributeが必要になる。グループ自体にはプライマリユーザが記されていないからである。結果、グループ認証のためのApacheディレクティブは以下のようになる。
Order deny,allow Deny from All AuthName "Company.com Intranet" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative on AuthLDAPUrl ldap://ldap.company.com/ou=People,dc=company,dc=com?uid AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off Require ldap-group cn=infosys,ou=Group,dc=company,dc=com Require ldap-attribute gidNumber=420 Satisfy any
AuthzLDAPAuthoritative onはデフォルトの設定なので省略可能であるが、やはり設定内容を明示するために残してある。
AuthLDAPGroupAttribute memberUidは、LDAPグループレコードのどの属性をUidとマッチングさせるか(ここではmemberUid)を指定する。グループレコードには、グループの(プライマリでない)メンバ用にmemberUid属性が1つずつ含まれている。
AuthLDAPGroupAttributeIsDN offにより、Apacheはグループメンバシップのチェックにクライアントの識別名を使用することになる。それ以外の場合にはユーザ名が使用される。私のOpenLDAPディレクトリでNISから移行したのはユーザ名だけであり、この設定はデフォルトで“on”になっているので、“off”にする必要があった。LDAPディレクトリは全体の識別名を格納している可能性があるので、場合によっては自分のディレクトリに基づいてこの設定を変更する必要がある。
Require ldap-groupの行は、“infosys”グループのメンバにアクセスを許可するものである。グループが複数になる場合は、グループごとにディレクティブを追加すればよい。
Require ldap-attribute gidNumber=420は、処理の対象がグループ420、つまり“infosys”グループのプライマリユーザであることを示している。この条件がなければ、プライマリユーザのアクセスは拒否される。また、複数のグループを扱う場合は、グループごとにディレクティブを用意する。
ここではSatisfy anyディレクティブが必要である。複数の条件をテストして1つでも条件を満たせばアクセスを許可するようにしたいからである。
