2009年12月22日火曜日

PloneでサクッとLDAPを使う

まず始めに
(追加説明) 丸カッコは補足説明
[心の呟き] 角カッコは心の呟き です。
読み分けてもらえると誤解がないと思います。


ここだけの話なんですが僕は人の3倍働いたことは無く、PythonやZope/Ploneのことは理解しているふりをしているだけなので、advent calenderが回ってきても何を書けば良いか全然アイディアがないんです〜。

ま〜それでも、最近CentOSの64bit版でLDAPを使ってログインできるところまで行ったのでその辺をまとめることにしてみます。

LDAPに関しては、自分でコンパイルするなんて無謀なことはやめて、素直にYUMでinstallすることのし、最小限の設定にで始めましょう。(それでも、logの出力先は調整しておくとの後のdebugには絶対役に立ちます)

# yum install -y openldap
[こんな感じだったかな〜?]


install後に注目するのが、
/etc/openldap/slapd.conf ['l'の次に'd'が無いんですよね〜、スラップ?]
/etc/openldap/schema (追加のスキーマファイルを置くところ)
/etc/init.d/ldap(お決まりの起動スクリプトが置かれるところ)


/etc/openldap/slapd.confの中のsuffixを自分のドメインに合わせて書き換えて、
とりあえずcnがManagerでアクセスできるようにrootdnも書き換えておく。

suffix dc=cmscom,dc=jp
rootdn cn=Manager,dc=cmscom,dc=jp


更にファイルの最後の部分に以下の内容を追記する。

rootdnでloginする場合のパスワード
rootpw loginwaiwai


userPasswordというアトリビユートにアクセスする権限
(後でPLONE側からloginの判定をするときの依頼に使う) *1

access to attrs=userPassword

by * auth


全てのアトリビュートをanonymousで読めるようにするための権限設定

(必要事項ではない、LDAPの思想の問題のようです) *2

access to *

by * read


注)
*1 この設定が間違っているとPlone側の設定をどんなにがんばっても、まずplone側の認証わ通らないと思います。[僕は、hackerではないのでその先が分かりません]
*2 Plone側からは、設定でcn=Manager権限で読みに行くことができます。

後は、schema(obejectclass)を選択してデータを登録していくんですが、その辺は、ldap本に従って進めうるのが最簡単なような気がする〜。最小限必要な項目は、schema項目はuserPasswordとcnです。それと、高度なセキュリティーの設定もldap本を参照してくださ〜い。



それでは、料理番組ようにここまで完璧に作業が完了していることを前提に、Ploneの設定に入ります。
まず始めに、自分がploneとLDAPの取り扱いに100%自信がない限り、既に走っている重要なインスタンスでこれからの作業をするのはやめましょう!新しいinstanceで始めることをおすすめします。

(${zinstance} = "Plone用のインスタンスが置かれている場所"と言う前提で…)
${zinstance}/buildout.cfgで、

eggs =
   .....
   plone.app.ldap

zcml =
   ....
   plone.app.ldap


$ ./bin/buildout

で、終わると幸せなんですが…、

[それは、展開的に面白く無いね…]

CentOS5.3の64bitの場合は、現状(2009/12/22)ではpython-ldapがコンパイルできずに、buildoutが途中で止まってしまうんです〜。これ、原因がldapのinclude headerの問題みたいなんですぅ。従ってpython-ldapのCVSのheadを取ってきて、事前にinstallしておくと問題なくbuildoutが完了します。

python-ldapのCVSの取得方法:
http://sourceforge.net/scm/?type=cvs&group_id=2072


取ってきた、CVSのディレクトリーで、権限に注意して、必要なlibとGCCが有る前提で…。
(${python} = "インスタンスで使っているpythonのいるディレクトリーへのパス"という前提で…)
${zinstance}/python setup.py install


それで、
$ ./bin/buildout
installが終われば、幸せに一歩近づいたかも…。
[早く、原稿書き終えて妻と娘に会いたいよ〜]


その後は、
インスタンスを起動しエーラーを見られるようにしつつ作業を進めてきましょう。
$ ./bin/instance fg

お〜っと、ここからは、最悪いつでもZMIからplone siteを作り直す心構えで進めていきます。
[3倍働いて学習する能力がない僕には、3倍クリックするしかないのか〜]
プロダクトの再インストールとかするといきなり”wysiwyg”のeditorがどうとかっていわれたりします。そんなときは、すかさず新しいplone siteを作ってみてください。ここは、冗談ではなく重要な経験則でしす。

さて、ここらが困った…。
[想定したシナリオどおりに進まないなことがあるな〜]

アドオンプロダクトのところで、LDAP support 1.1のみインストールします。

# インストールログ
# このプロダクトはアップグレードされました 古いプロファイルバージョンは unknown でした 新しいプロファイルバージョンは 1.1 です このプロダクトについてはアップグレードされたものがありません。アップグレード情報についてプロダクトドキュメンテーションをあたるか、プロダクトの作者に連絡してください。
[なんていうメッセージが出ていますが、3倍働いていない僕には直し方が分かりませ〜ん]

アドオンプロダクトのコンフィグの欄からLDAP Connection に項目を選び設定画面へ進見ます。(http://localhost:8080/Plone3/@@ldap-controlpanel)

Global Settingタブ
  • LDAP server type:LDAP
  • rDN attribute:cn (LDAPへのlogin認証確認に使うDNの要素に使う)
  • user id attribute:cn (ploneへのloginした人のuserID)
  • login name attribute:cn (ploneへlogin欄に入力する項目)
  • LDAP object classes:perosn(LDAP登録者の使っているobjectclass)
  • Bind DN:cn=Manager,dc=cmscom,dc=jp(anonymousでLDAPのデータが読めれば不要)
  • Bind password:loginwaiwai(anonymousでLDAPのデータが読めれば不要)
  • Base DN for users:dc=cmscom,dc=jp(suffixに設定したもの)
  • Search scope for users:subtree
  • Base DN for groups:dc=cmscom,dc=jp(suffixに設定したもの)
  • Search scope for groups:sbutree

LDAP Schemaタブ
(login制御だけなら既存の設定のままでOK)


LDAP Serverタブ
”add LDAP server”ボタンをクリックして追加項目の画面に遷移します。

  • Enabled: チェックマークを付ける
  • LDAP server: ${LDAP server IP address}
  • LDAP connection type: LDAP(初期値)
  • Connection timeout: 5(初期値)
  • Operation timeout: -1(初期値)

項目を入力後保存。で無事設定ができ場合でてもできれば続きに目を通してくださいね。
又、無事進まなかった場合、あきらめるのはまだ早いです!3倍クリック人生で乗り切れます…。

無事進まなかった人、
http://localhost:8080/manageからZMI画面に移動し、Ploneの中のacl_usersを順にクリックして進むと ”ldap (Plone managed LDAP)”という電気のプラグのようなアイコンがついた項目が有るでしょうか?

ldap (Plone managed LDAP) -> Contents -> acl_users (Plone managed LDAP) と進むと、先ほどと同じような項目が出てきていると思いませんか?又、ページ上部にも同じような項目のタブがあると思いませんか?

ということで、先ほどのploneの設定ページは、ZOPEのこの部分を書き換えていたと僕は推測しています。[hackerではなので、確実なことは言えない…]

なので、ploneのサイト設定画面側でうまく設定が通ら無い場合ここで設定してあげると、以後サイト設定でも問題なく設定ができるようになるってことを多々経験している。[ここに気がつくために3倍以上クリックしているけど…]


それでは最後に、
この辺の設定ができていても、最初のうちはLDAPでPloneの認証できない場合があると思います。原因は、今回のエントリーの最初に書いたLDAPへのアクセス権限の設定(slapd.conf)と合わせ方法(RDN)のなことが多いと思います。そんなときは、LDAPのlog出力をtail -f slapd.logとしてモニターしながら、PloneからアクセスしてみるとLDAPどんな返事をしている確認しながら作業ができます。

PS:
後日このエントリーに画像を加え再校正したいと考えますが、今回は24時までにエントリーを公開しないと終電が無くなるのでこれでひとまず公開します。[本音で、家に帰りたい…]