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