PloneLDAPの利用 [Plone4.0]
アカウント管理の簡単化のため、認証に LDAP を用いる。グループも同様に LDAP のグループを参照できるように設定する。
インストール
$PLONE_INSTANCE : /usr/local/Plone/zinstance (Plone のインスタンス)
サーバへのインストール
PloneLDAP を利用するには LDAPMultiPlugins, LDAPUserFolder もインストールしておく必要がある。
LDAPUserFolder は日本語が文字化けする不具合があるため、自動ダウンロードはせず、 http://pypi.python.org/pypi/Products.LDAPUserFolder よりダウンロードし、開発用ディレクトリに格納する。
# tar zxvf Products.LDAPUserFolder-2.20.tar.gz # mv Products.LDAPUserFolder-2.20 $PLONE_INSTANCE/src/Products.LDAPUserFolder
次に LDAPUserFolder 内の utils.py を次のように変更する。
- encoding = 'latin1' + encoding = 'utf-8'
また LDAPUserFolder を Plone 上からインストールするとサイトが壊れるため、Plone 上からインストールできないようにしておく。LDAPUserFolder 内の configure.zcml を次のように変更する。
- <!-- Only install CMFLDAP bits if CMFCore is installed --> - <configure - zcml:condition="installed Products.CMFCore"> - - <cmf:registerDirectory name="cmfldap"/> - - <genericsetup:registerProfile - name="cmfldap" - title="LDAPUserFolder CMF Tools" - description="Adds LDAP support to the CMF." - provides="Products.GenericSetup.interfaces.EXTENSION" - for="Products.CMFCore.interfaces.ISiteRoot" - /> - - </configure>
さらに LDAPUserFolder 内の LDAPUserFolder.py でセキュリティの宣言が間違っているので修正する。
- security.declareProtected(manage_users, 'getEncryptedPassword')
+ security.declareProtected(manage_users, 'getEncryptedBindPassword')
次にインスタンス内の buildout.cfg を設定する。
eggs = Plone : + Products.PloneLDAP==1.1 + Products.LDAPMultiPlugins==1.14 + Products.LDAPUserFolder==2.20 + dataflake.ldapconnection==1.2 + dataflake.cache==1.2 develop = : + src/Products.LDAPUserFolder
最後に設定を反映する。
# bin/buildout # bin/plonectl stop; bin/plonectl start
LDAP 接続の設定
Plone LDAP Plugin の追加
ZMI で acl_users を開き Plone LDAP Plugin を追加する。
<例> ID : ldap LDAP Server : ldapserver.example.jp UseSSL : LDAP over SSL Read-only : ON
他の項目は後ほど設定するため、ここでは最低限(サーバのアドレス関係のみ)設定しておく。Fedora Core 等では /etc/openldap/ldap.conf に次の1行を追加することで SSL 鍵の確認なしに ldaps 接続ができるようになる。
TLS_REQCERT never
LDAP Attribute とのマッピング
上で追加した Plone LDAP Plugin 内に追加された LDAPUserFolder の設定を行う。acl_users/ldap/acl_users の LDAP Schema タブを開き、Add LDAP schema item 欄に追加することで LDAP Attribute とのマッピングを行うことができる。たとえばユーザの名前に LDAP ツリーの cn;lang-ja を用いる場合は次のように追加する。Map to Name 欄は LDAP の cn;lang-ja を Plone の fullname にマッピングするという意味である。
LDAP Attribute Name : cn;lang-ja Friendly Name : Canonical Name Multi-valued : No Map to Name (optional) : fullname
LDAP ツリーの指定
次に LDAPUserFolder の Configure タブに戻り LDAP の構造等の設定を行う。
Title : User Folder (分かり易い名前にしておく) Login Name : UID (uid) User ID Attribute : UID (uid) RDN Attribute : UID (uid) (ユーザ名として用いる LDAP Attribute の指定) Users Base DN : ou=people,dc=example,dc=jp (ユーザのエントリを検索する Base DN を指定する) Scope : ONELEVEL (検索対象範囲) Group storage : Groups stored on LDAP server (Plone のグループと LDAP のグループのマッピングをする場合) Group mapping (Applies to LDAP group storage only) : Manually map LDAP groups to Zope roles (手動マッピングを指定する) Groups Base DN : ou=groups,dc=example,dc=jp (グループのエントリを検索する Base DN を指定する) Scope : ONELEVEL (検索対象範囲) Manager DN : cn=ploneadmin,ou=users,dc=example,dc=jp (LDAP のエントリを検索するためのユーザ) Password : **** (上記ユーザのパスワード) Manager DN Usage : Always (グループ検索にも利用するので Always とする) Read-only : ON (LDAP データを変更されないように読み取り専用とする) User object classes : top,person User password encryption : crypt Default User Roles : Anonymous (ログインしたユーザが得るロール)
Manager DN はユーザと Plone に利用するグループのエントリを読み取る権限があればよい。
LDAP サーバの指定
Plone LDAP Plugin の追加時に設定済みのはずであるが、変更等する場合は LDAPUserFolder の LDAP Servers タブで LDAP サーバを指定する。Add LDAP Server 欄に次のように入力し追加すればよい。
Server host, IP or socket path : ldapserver.example.jp Server port : 636 Protocol : LDAP over SSL Connection Timeout : 5 seconds Operation Timeout : No timeout
接続成功すれば LDAP Servers 欄に次のように表示される。
Currently connected to: ldaps://ldapserver.example.jp:636
グループとロールのマッピング
LDAP上のあるグループに対して、ロールを割り当てることができる。acl_users/ldap/acl_users の Groups タブを開くと LDAP 上のグループ一覧が表示される。例えば test-group というグループに対して、Editor ロールを与えるには、Add LDAP group to Zope role mapping 欄で次のように設定すれば良い。
Map LDAP Group... : test-group ... to Zope Role : Editor
LDAP接続の有効化
acl_users/ldap を開き、有効化する Plone LDAP Plugin の機能を設定する。
- Authentication
認証に LDAP を用いるかどうかを設定する。
- Reset Credentials
- Group_Enumeration
有効にすることで、LDAP に登録されているグループ名を検索できるようになる。検索値は cn の値となる。グループタイトル、説明は Plone 上で付加することは可能である。ただし、グループを一覧表示(gtool/listGroups を利用)する場合は、LDAP に登録されているグループはすべて表示されるため、必要なグループに制限するにはテンプレートなどで対応が必要となる。
- Group_Introspection
有効にすることで LDAP グループに登録されているメンバー一覧を表示することができる。
- Group_Management
- Groups
有効にすることで、LDAP に登録されているグループを利用できるようになる。Plone 上のグループとのマッピングではなく直接利用できるようになる。
- Properties
有効にすることで、LDAP Attribute とのマッピングを行った属性(氏名など)が Plone 上から利用できるようになる。ただし、acl_users/ldap → Properties の設定ページで、ldap を Active Plugins の最上位とする必要がある。
- Role_Enumeration
- Roles
有効にすることで、グループとロールのマッピング機能等が利用できるようになる。
- User_Adder
- User_Enumeration
有効にすることで、LDAP に登録されているユーザを検索できるようになる。ただしこの項目のみでは、ユーザ ID での検索のみであり、フルネームの検索には Properties を有効にする必要がある。
- User_Management