PloneLDAPの利用 [Plone3.3]

アカウント管理の簡単化のため、認証に LDAP を用いる。グループも同様に LDAP のグループを参照できるように設定する。

インストール

$PLONE_INSTANCE : /usr/local/Plone/zinstance (Plone のインスタンス)

LDAPMultiPlugins のインストール

LDAPMultiPlugins プロダクトを用いることで、LDAPUserFolder プロダクトが利用できるようになる。インストールは解凍後、開発用ソースディレクトリに Products.LDAPMultiPlugins という名前で格納する。ダウンロードは http://pypi.python.org/pypi/Products.LDAPMultiPlugins より行える。

# tar zxvf Products.LDAPMultiPlugins-1.8.tar.gz
# mv Products.LDAPMultiPlugins-1.8 $PLONE_INSTANCE/src/Products.LDAPMultiPlugins

次にインスタンス内の buildout.cfg を設定する。

  eggs =
      Plone
       :
+     Products.LDAPMultiPlugins

  develop =
       :
+     src/Products.LDAPMultiPlugins

  [versions]
       :
+ Products.LDAPMultiPlugins = 1.8

最後に設定を反映する。

# bin/buildout
# bin/plonectl stop; bin/plonectl start

LDAPUserFolder のインストール

LDAPUserFolder プロダクトを用いることで ユーザ・グループ管理を LDAP を用いて行うことができる。インストールは解凍後、開発用ソースディレクトリに Products.LDAPUserFolder という名前で格納する。ダウンロードは http://pypi.python.org/pypi/Products.LDAPMultiPlugins より行える。

 # tar zxvf Products.LDAPUserFolder-2.13.tar.gz
 # mv Products.LDAPUserFolder-2.13 $PLONE_INSTANCE/src/Products.LDAPUserFolder

次にインスタンス内の buildout.cfg を設定する。

  eggs =
      Plone
       :
+     Products.LDAPUserFolder

  develop =
       :
+     src/Products.LDAPUserFolder

  [versions]
       :
+ Products.LDAPUserFolder = 2.13

Python に python-ldap モジュールがインストールされている必要がある。また、日本語を扱う場合は 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>

最後に設定を反映する。

# bin/buildout
# bin/plonectl stop; bin/plonectl start

PloneLDAP のインストール

PloneLDAP プロダクトを用いることでグループメンバー一覧などの機能を利用できる。インストールは解凍後、開発用ソースディレクトリに Products.PloneLDAP という名前で格納する。ダウンロードは http://pypi.python.org/pypi/Products.PloneLDAP より行える。

 # tar zxvf Products.PloneLDAP-1.1.tar.gz
 # mv Products.PloneLDAP-1.1 $PLONE_INSTANCE/src/Products.PloneLDAP

次にインスタンス内の buildout.cfg を設定する。

  eggs =
      Plone
       :
+     Products.PloneLDAP

  develop =
       :
+     src/Products.PloneLDAP

  [versions]
       :
+ Products.PloneLDAP = 1.1

最後に設定を反映する。

# 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 を用いるかどうかを設定する。
    Authentication : ON
  • Reset Credentials
    Reset Credentials : OFF
  • Group_Enumeration
    有効にすることで、LDAP に登録されているグループ名を検索できるようになる。検索値は cn の値となる。グループタイトル、説明は Plone 上で付加することは可能である。ただし、グループを一覧表示(gtool/listGroups を利用)する場合は、LDAP に登録されているグループはすべて表示されるため、必要なグループに制限するにはテンプレートなどで対応が必要となる。
    Group_Enumeration : ON
  • Group_Introspection
    有効にすることで LDAP グループに登録されているメンバー一覧を表示することができる。
    Group_Introspection : ON
  • Group_Management
    Group_Management : OFF
  • Groups
    有効にすることで、LDAP に登録されているグループを利用できるようになる。Plone 上のグループとのマッピングではなく直接利用できるようになる。
    Groups : ON
  • Properties

    有効にすることで、LDAP Attribute とのマッピングを行った属性(氏名など)が Plone 上から利用できるようになる。ただし、acl_users/ldap → Properties の設定ページで、ldap を Active Plugins の最上位とする必要がある。

    Properties : ON
  • Role_Enumeration
    Role_Enumeration : OFF
  • Roles
    有効にすることで、グループとロールのマッピング機能等が利用できるようになる。
    Roles : OFF
  • User_Adder
    User_Adder : OFF
  • User_Enumeration
    有効にすることで、LDAP に登録されているユーザを検索できるようになる。ただしこの項目のみでは、ユーザ ID での検索のみであり、フルネームの検索には Properties を有効にする必要がある。
    User_Enumeration : ON
  • User_Management
    User_Management : OFF