OSX Server の OpenDirectory を用いて,Linux上のApache2の mod_authnz_ldap でグループ認証.
できてしまえばあっさりなのだけれど,何故かつまずきまくった*1.
いつか同じことで躓きそうなきもするので記録しておく.
下記の例の前提は下記の通り.
- OSX Server の IPアドレスは 192.168.100.1
- OpenDirectory の ベースDNは "dc=ldap,dc=example,dc=org"
- 認証させたいグループ名は foobarbaz
ldapsearch でグループの DNを取得する.
ldapsearch を使う.OSX Server に到達可能なマシンならどこからでも構わないが,認証させたい Apache2サーバマシンで実行すれば認証以外のネットワークトラブルがあった場合早めに解るのでオススメ.
# ldapsearch -h 192.168.100.1 -x "cn=foobarbaz" -b "dc=ldap,dc=example,dc=org" # extended LDIF # # LDAPv3 # base <cn=groups,dc=ldap,dc=example,dc=org> with scope subtree # filter: cn=foobarbaz # requesting: ALL # # foobarbaz, groups, ldap.example.org dn: cn=foobarbaz,cn=groups,dc=ldap,dc=example,dc=org objectClass: posixGroup objectClass: apple-group objectClass: extensibleObject objectClass: top (以下略)
ここで,
dn: cn=foobarbaz,cn=groups,dc=ldap,dc=example,dc=org
を覚えておく.
Apache2
下記の例には今回の話にとって冗長なものが沢山あるけれども,残したほうが雰囲気は掴みやすいかと思い,そのまま残してある.
他のLDAP環境ではどうなのか判らず,他の解説webサイトを見た結果混乱してしまった.結論として,下記3点に気をつければ,グループ認証はできるようになる.
- AuthLDAPURL は base DN を書いておけば良い.
- require ldap-group は,先に ldapsearch で得た dn をそのまま書き写す.
- AuthLDAPGroupAttribute は省いてはいけない.
<Location "/trac/"> AuthName "Trac user" AuthType Basic AuthBasicProvider ldap require ldap-group cn=foobarbaz,cn=groups,dc=ldap,dc=example,dc=org AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off AuthLDAPURL ldap://192.168.100.1/dc=ldap,dc=example,dc=org
以上,Leopard Server で確認.
*1:なんとなくいつもよりストレス負けしているのかもしれない