DokuWikiのユーザー管理にOpenLDAPを使う
お仕事でOpenLDAP+DokuWikiな連携をやったので覚え書き。
英語のドキュメントしかなくてしかも完全じゃなかったのでちょっと苦労した。
一応環境はCentOS4。だけど他のOSでもだいたい同じだろう。
OpenLDAPのインストール
適当にyumかなんかで入れる。なぜか所有者がおかしいとこがあるので修正もしとく。
# yum install openldap-servers openldap-clients
# chown -R ldap:ldap /var/lib/ldap
OpenLDAPの設定
次に設定ファイルをいじる
設定ファイルは、
/etc/openldap/slapd.conf
/etc/openldap/ldap.conf
のふたつ。
新しくなって slapd.conf のほうはいらなくなったみたいだけどよくわからなかったので旧来の方法を使った。
(参考: [LDAP]slapd.confが無い)
設定方法は面倒なので各自ぐぐるなり、LDAP本を読むなりして欲しい。
一応、自分の環境では
slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
suffix "dc=test,dc=com"
rootdn "cn=manager,dc=test,dc=com"
rootpw XXXXXXXXXXXXXXXXX
directory /var/lib/ldap
ldap.conf
BASE dc=test,dc=com
URI ldap://localhost
HOST localhost
もちろん、パスワードやdnは各自読み替えること。
OpenLDAPの起動
起動は、さっきの参考リンクにあった通りで起動。
# slapd -f /etc/openldap/slapd.conf
ちゃんと設定してるなら、serviceとかでもいいはず。
# service slapd start
こんな感じかな。
OpenLDAPにユーザー情報を投入
今回はツールとかなしでちまちま入れる。
適当なファイルにldifを書いて、ldapaddするって手順。
data.ldif
dn: dc=test, dc=com
objectClass: dcObject
objectClass: organization
o: test
dc: test
dn: ou=Users,dc=test,dc=com
objectClass: top
objectClass: organizationalUnit
ou: users
dn: cn=admin,ou=Users,dc=test,dc=com
objectClass: top
objectClass: person
cn: admin
sn: admin
userPassword: admin
これをldapaddする。
# ldapadd -v -h localhost -x -D cn=manager,dc=test,dc=com -W -f data.ldif
パスワードを聞かれるのでそれを入れれば、データが入るはず。
DokuWikiのインストール
まずは、適当なDocumentRootをApacheかなんかに設定してやる。
そしたら後は簡単。公式サイトにいって落としてきて、解凍した中身を配置するだけ。
その後、/install.phpにブラウザからアクセスして設定する。あとは見たらわかると思う。
ldap-phpのインストール
DokuWikiがphpで書かれている以上、phpのldapライブラリを使ってldapにアクセスすることになる。
でも、デフォルト環境ではldapライブラリが入っていないので入れておく。
//これに気づくのにどれだけかかったか・・・
# yum install ldap-php
OpenLDAPとDokuWikiの連携
さて、ようやく本題。こっからはDokuWikiの設定。
DokuWikiの設定は、 $DocumentRoot/conf/local.php
なんかに直接phpコードを書く形になってる。
そこにコレを追記する。
conf/local.php に追記
$conf['authtype'] = 'ldap';
$conf['auth']['ldap']['server'] = 'ldap://localhost:389';
$conf['auth']['ldap']['version'] = 3;
$conf['auth']['ldap']['usertree'] = 'ou=Users, dc=test, dc=com';
$conf['auth']['ldap']['binddn'] = 'cn=manager,dc=test,dc=com';
$conf['auth']['ldap']['bindpw'] = 'XXXXXXXXXXXXXXXXX';
$conf['auth']['ldap']['grouptree'] = 'ou=Users, dc=test, dc=com';
$conf['auth']['ldap']['userfilter'] = '??????';//要設定
$conf['auth']['ldap']['groupfilter'] = '??????';//要設定
$conf['auth']['ldap']['mapping']['name'] = 'sn';
もちろん、dnとかURLなんかは環境に応じて書き換えて欲しい。バージョン指定も大事。
ここで注目して欲しいのが、userfilterとgroupfilter。
これらは、ユーザーとかグループの検索条件を書くところ。
${user}
がユーザー名になるので、これを使ってエントリが特定できるように設定する。
今回の場合は、 (&(cn=%{user})(objectClass=person))
と入れておけばOK。
あと、エラーが出て原因がわからない時は
$conf['auth']['ldap']['debug'] = true;
と書いておくと幸せになれると思うよ。