Jetspeed2 + Fedora Directory Server

LDAPとの連携方法については、http://portals.apache.org/jetspeed-2/multiproject/jetspeed-security/ldap.html に書いてあるから、そこを参照すればいいのだけど、想定しているのが ApacheDS がメイン。そもそも ApacheDS がどの程度、実運用で使われているかわらからんというのがあるけど(私はOpenLDAPとFDSしか使ったことはない・・・)。というわけで、ここはあえて、FDS を試す。ちなみに試したのは、2.1.3のブランチからビルドしたJ2(というかPALポータル)。そのサイトにもあるけど、2.1.2とかじゃ問題があるっぽい(詳細は未確認)。

まず、J2側ですることは、Springの設定ファイルをいじる。以下のような感じ。

$ pushd webapps/palportal/WEB-INF/assembly/override/
$ wget http://people.apache.org/~taylor/LDAP/security-spi-ldap.xml
$ wget http://people.apache.org/~taylor/LDAP/security-spi-ldap-atn.xml
$ wget http://people.apache.org/~taylor/LDAP/security-spi-ldap-atz.xml
$ cd ..
$ mv security-spi-atn.xml security-spi-atz.xml alternate/

次に、security-spi-ldap.xmlを編集。以下のような感じ。indexの 1, 2, 3, 4, 5, 15, 16, 17, 18, 24 あたりを変更すればOK。

<beans>
<!-- ************** Ldap Configuration ************** -->
<bean id="org.apache.jetspeed.security.spi.impl.ldap.LdapBindingConfig"
class="org.apache.jetspeed.security.spi.impl.ldap.LdapBindingConfig">
<!-- The LDAP initial context factory. -->
<constructor-arg index="0"><value>com.sun.jndi.ldap.LdapCtxFactory</value></constructor-arg>
<!-- The LDAP server name. -->
<constructor-arg index="1"><value>ds.hoge.co.jp</value></constructor-arg>
<!-- The LDAP server port. -->
<constructor-arg index="2"><value>389</value></constructor-arg>
<!-- The LDAP server root context. -->
<constructor-arg index="3"><value>dc=hoge,dc=co,dc=jp</value></constructor-arg>
<!-- The LDAP server root dn. -->
<constructor-arg index="4"><value>cn=Directory Manager</value></constructor-arg>
<!-- The LDAP server root password. -->
<constructor-arg index="5"><value>adminpass</value></constructor-arg>
<!-- The roles filter. -->
<constructor-arg index="6"><value>(objectclass=jetspeed-2-role)</value></constructor-arg>
<!-- The groups filter. -->
<constructor-arg index="7"><value>(objectclass=jetspeed-2-group)</value></constructor-arg>
<!-- The user filter. -->
<constructor-arg index="8"><value>(objectclass=jetspeed-2-user)</value></constructor-arg>
<!-- The roleMembershipAttributes. -->
<constructor-arg index="9"><value>j2-role</value></constructor-arg>
<!-- The userRoleMembershipAttributes. -->
<constructor-arg index="10"><value>j2-role</value></constructor-arg>
<!-- The groupMembershipAttributes. -->
<constructor-arg index="11"><value>uniqueMember</value></constructor-arg>
<!-- The userGroupMembershipAttributes. -->
<constructor-arg index="12"><value>j2-group</value></constructor-arg>
<!-- The groupMembershipForRoleAttributes. -->
<constructor-arg index="13"><value>uniqueMember</value></constructor-arg>
<!-- The roleGroupMembershipForRoleAttributes. -->
<constructor-arg index="14"><value></value></constructor-arg>
<!-- The defaultSearchBase. -->
<constructor-arg index="15"><value>dc=hoge,dc=co,dc=jp</value></constructor-arg>
<!-- The roleFilterBase. -->
<constructor-arg index="16"><value>ou=Roles,dc=hoge,dc=co,dc=jp</value></constructor-arg>
<!-- The groupFilterBase. -->
<constructor-arg index="17"><value>ou=Groups,dc=hoge,dc=co,dc=jp</value></constructor-arg>
<!-- The userFilterBase. -->
<constructor-arg index="18"><value>ou=People,dc=hoge,dc=co,dc=jp</value></constructor-arg>
<!-- The roleObjectClasses. -->
<constructor-arg index="19"><value>top,groupOfUniqueNames,jetspeed-2-role</value></constructor-arg>
<!-- The groupObjectClasses. -->
<constructor-arg index="20"><value>top,groupOfUniqueNames,jetspeed-2-group</value></constructor-arg>
<!-- The userObjectClasses. -->
<constructor-arg index="21"><value>top,person,organizationalPerson,inetorgperson,jetspeed-2-user</value></constructor-arg>
<!-- The roleIdAttribute. -->
<constructor-arg index="22"><value>cn</value></constructor-arg>
<!-- The groupIdAttribute. -->
<constructor-arg index="23"><value>cn</value></constructor-arg>
<!-- The userIdAttribute. -->
<constructor-arg index="24"><value>uid</value></constructor-arg>
<!-- The UidAttribute. -->
<constructor-arg index="25"><value>uid</value></constructor-arg>
<!-- The MemberShipSearchScope. -->
<constructor-arg index="26"><value>1</value></constructor-arg>
<!-- The roleUidAttribute. -->
<constructor-arg index="27"><value>cn</value></constructor-arg>
<!-- The groupUidAttribute. -->
<constructor-arg index="28"><value>cn</value></constructor-arg>
<!-- The userUidAttribute. -->
<constructor-arg index="29"><value>uid</value></constructor-arg>
<!-- The roleObjectRequiredAttributeClasses. -->
<constructor-arg index="30"><value>cn,j2-classname,uid,uniquemember</value></constructor-arg>
<!-- The groupObjectRequiredAttributeClasses. -->
<constructor-arg index="31"><value>cn,j2-classname,uid,uniqueMember</value></constructor-arg>
<!-- The userAttributes. -->
<constructor-arg index="32"><value>sn={u},cn={u},uid={u}</value></constructor-arg>
<!-- The roleAttributes. -->
<constructor-arg index="33"><value></value></constructor-arg>
<!-- The groupAttributes. -->
<constructor-arg index="34"><value></value></constructor-arg>
<!-- The userPasswordAttribute. -->
<constructor-arg index="35"><value>userPassword</value></constructor-arg>
<!-- The knownAttributes. -->
<constructor-arg index="36"><value>cn,sn,o,uid,ou,objectClass,userPassword,member,uniqueMember,memberOf,j2-role,j2-group</value></constructor-arg>
</bean>
</beans>

次に、FDSの方の設定(既にFDSの基本設定は完了しているものとする)。まず、/opt/fedora-ds/slapd-ds/config/schema/61jetspeed.ldif というファイルを作り、以下の内容を記述。

dn: cn=schema
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.1 NAME ( 'j2-classname' ) DESC 'The java class name of the object.' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE X-ORIGIN 'Jetspeed 2' )
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.2 NAME ( 'j2-action' ) DESC 'An action associated with a permission. This is a multi-valued attribute.' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'Jetspeed 2' )
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.3 NAME ( 'j2-role' ) DESC 'The UID of an associated Role. This is a multi-valued attribute.' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'Jetspeed 2' )
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.4 NAME ( 'j2-group' ) DESC 'The UID of an associated Group. This is a multi-valued attribute.' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'Jetspeed 2' )
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.5 NAME ( 'j2-permission' ) DESC 'The UID of an associated Permission' EQUALITY caseExactIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 X-ORIGIN 'Jetspeed 2' )
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.6 NAME ( 'creation-date' ) DESC 'create date' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE X-ORIGIN 'Jetspeed 2' )
attributeTypes: ( 1.3.6.1.4.1.8100.1.2.3.7 NAME ( 'modified-date' ) DESC 'modified date' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE  X-ORIGIN 'Jetspeed 2' )
objectClasses: ( 1.3.6.1.4.1.8100.1.2.4.1 NAME 'jetspeed-2-group' DESC 'Jetspeed-2 group' SUP ( groupOfUniqueNames ) MUST ( j2-classname $ uid) MAY ( j2-role $ creation-date $ modified-date $ cn $ ou) X-ORIGIN 'Jetspeed 2' )
objectClasses: ( 1.3.6.1.4.1.8100.1.2.4.2 NAME 'jetspeed-2-permission' DESC 'Jetspeed-2 permission' MUST ( j2-classname $ uid) MAY ( j2-action $ creation-date $ modified-date) X-ORIGIN 'Jetspeed 2' )
objectClasses: ( 1.3.6.1.4.1.8100.1.2.4.3 NAME 'jetspeed-2-role' DESC 'Jetspeed-2 role' SUP ( groupOfUniqueNames ) MUST ( j2-classname $ uid) MAY ( creation-date $ modified-date $ cn $ ou) X-ORIGIN 'Jetspeed 2' )
objectClasses: ( 1.3.6.1.4.1.8100.1.2.4.4 NAME 'jetspeed-2-user' DESC 'Jetspeed-2 user' SUP ( inetOrgPerson ) MUST ( cn $ uid) MAY ( j2-role $ j2-group $ j2-permission $ creation-date $ modified-date) X-ORIGIN 'Jetspeed 2' )

これを足したら、FDSを再起動。再起動したら、FDSの管理ツールからj2-roleとか、Object Class が見えるようになる。そしたら、管理ツールから以下のグループ、ロール、ユーザーを追加する。以下のような感じ(uniquememberとかはメンバー追加で追加した値で良いかも)。

dn: cn=admin,ou=Groups,dc=hoge,dc=co,dc=jp
objectClass: jetspeed-2-group
objectClass: groupOfUniqueNames
objectClass: top
cn: admin
j2-classname: admin
uid: admin
uniquemember: admin
dn: cn=user,ou=Groups,dc=hoge,dc=co,dc=jp
objectClass: jetspeed-2-group
objectClass: groupOfUniqueNames
objectClass: top
cn: user
j2-classname: user
uid: user
uniquemember: user
dn: cn=user,ou=Roles,dc=hoge,dc=co,dc=jp
objectClass: jetspeed-2-role
objectClass: groupOfUniqueNames
objectClass: top
cn: user
j2-classname: user
uid: user
uniquemember: user
dn: uid=admin,ou=People,dc=hoge,dc=co,dc=jp
objectClass: organizationalPerson
objectClass: person
objectClass: jetspeed-2-user
objectClass: inetOrgPerson
objectClass: top
cn: admin
givenname: Admin
j2-role: admin
j2-role: manager
j2-role: user
sn: admin
uid: admin
dn: cn=admin,ou=Roles,dc=hoge,dc=co,dc=jp
objectClass: jetspeed-2-role
objectClass: groupOfUniqueNames
objectClass: top
cn: admin
j2-classname: admin
uid: admin
uniquemember: admin
dn: cn=manager,ou=Groups,dc=hoge,dc=co,dc=jp
objectClass: jetspeed-2-group
objectClass: groupOfUniqueNames
objectClass: top
cn: manager
j2-classname: manager
uid: manager
uniquemember: admin
dn: cn=manager,ou=Roles,dc=hoge,dc=co,dc=jp
objectClass: jetspeed-2-role
objectClass: groupOfUniqueNames
objectClass: top
cn: manager
j2-classname: manager
uid: manager
uniquemember: admin

という感じで、ユーザーを追加するときには、ユーザー追加後にjetspeed-2-userのObject Classを与えて、j2-role を設定すれば良い。

以上ができたら、Jetspeed2を起動。すると、adminと作ったユーザーでログインできる。あと、新規ユーザーではユーザー用のPSMLファイルがないので、自動で生成されるように設定する。設定は webapps/palportal/WEB-INF/assembly/pipelines.xml で、

<bean id="jetspeed-pipeline"
class="org.apache.jetspeed.pipeline.JetspeedPipeline"
init-method="initialize"
>
<constructor-arg>
<value>JetspeedPipeline</value>
</constructor-arg>
<constructor-arg>
<list>
<ref bean="capabilityValve"/>
<ref bean="portalURLValve"/>
<ref bean="securityValve"/>
<ref bean="localizationValve"/>
<ref bean="passwordCredentialValve"/>
<ref bean="loginValidationValve"/>
<ref bean="profilerValve"/>
<ref bean="createUserTemplatePagesValve"/>
<ref bean="containerValve"/>
<ref bean="actionValve"/>
<ref bean="resourceValve"/>
<ref bean="DecorationValve" />
<ref bean="headerAggregatorValvePortal"/>
<ref bean="aggregatorValve"/>
<ref bean="cleanUpValve"/>
</list>
</constructor-arg>
</bean>

のような感じで、createUserTemplatePagesValve を加えておく。そうすれば、ログインしたときに webapps/palportal/WEB-INF/pages/_user/template/ からコピーして作ってくれる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です