可以将 Java CAPS 系统信息库配置为使用 LDAP 服务器进行用户管理。
当用户尝试登录系统信息库时,将检查用户名和密码是否与 LDAP 服务器中存储的用户名和密码匹配。此外,可以从服务器检索用户的角色列表,以授权用户访问系统信息库中的各种对象。
支持以下 LDAP 服务器:
Sun JavaTM System Directory Server 版本 5.1、5.2 和 6.x
Microsoft 的 Active Directory(Windows Server 2003 随附的版本)
OpenLDAP Directory Server 2.x
首先,必须配置 LDAP 服务器。请参见相应的章节:
然后,配置系统信息库,使其可以找到 LDAP 服务器,并查找相应的信息(例如目录中包含用户的部分)。请参见配置系统信息库。
如果要对系统信息库和 LDAP 服务器之间的通信进行加密,请参见SSL 支持。
《管理 Java CAPS 用户》提供了有关系统信息库用户管理的基本信息。
Sun Java System Directory Server 版本 5.1 和 5.2 包含以下主要组件:
Directory Server
Administration Server
Directory Server 控制台
可以使用 Directory Server 控制台执行大多数管理任务。该控制台包含四个顶级选项卡:“任务”、“配置”、“目录”和“状态”。“目录”选项卡将目录条目显示为树。可以通过此选项卡浏览、显示和编辑所有条目和属性。
还可以通过编辑配置文件或使用命令行实用程序手动执行管理任务。
Sun Java System Directory Server 版本 6.x 提供以下方式来管理目录中的条目:
DSCC 已集成到 Sun JavaTM Web Console 中。DSCC 包含五个顶级选项卡:“一般任务”、“目录服务器”、“代理服务器”、“服务器组”和“设置”。
依次单击“目录服务器”选项卡、服务器的名称和“条目管理”选项卡后,将显示可以浏览、添加和修改条目的页面。目录信息树 (Directory Information Tree, DIT) 将显示在左侧。
还可以使用“一般任务”选项卡创建新条目或浏览数据。
有关如何执行以下步骤的详细信息,请参见随 Sun Java System Directory Server 提供的文档。
在 People 目录下创建 admin 用户和 Administrator 用户。
在顶层节点下创建角色 all、administration 和 management。
将创建的角色分配给 admin 用户和 Administrator 用户。
转至配置系统信息库。
Active Directory 是 Windows 2003 的一个关键部件。它提供了各种可管理性、安全性以及互操作性功能。主要的管理工具是名为“Active Directory 用户和计算机”的管理单元。
Active Directory 不支持角色的概念。因此,在 Active Directory 中,必须使用组的概念模拟 Java CAPS 角色。
您应在名为 CAPSRoles 的新组织单位中创建组,而不是在 Users 目录中创建组。
有关如何执行以下步骤的详细信息,请参见随 Active Directory 提供的文档。
启动“Active Directory 用户和计算机”管理工具。
将显示“新建对象 - 组织单位”对话框。
在“名称”字段中,输入一个值(例如 CAPSRoles)。
单击“确定”。
在该组织单位下,创建以下组:all、administration 和 management。要创建组,请右键单击组织单位,然后选择“新建”>“组”。对组范围和组类型使用默认值。
添加组后,这些组将显示在该组织单位下。
将 admin 用户和 Administrator 用户作为您所创建的所有组的成员添加,方法是:双击每个组,然后从对话框中选择 admin 和 Administrator。
转至配置系统信息库。
OpenLDAP 项目提供了 LDAP 协议的开源实现。LDAP 服务器将作为名为 slapd 的独立守护进程运行。主要的配置文件名为 slapd.conf。此文件包含全局信息、特定于后端的信息以及特定于数据库的信息。可以使用多种方式将条目添加到数据库,例如,可以使用 slapadd 程序。要搜索数据库,请使用 ldapsearch 程序。
有关详细信息,请参见 http://www.openldap.org。
有关如何执行以下步骤的详细信息,请参见随 OpenLDAP Directory Server 提供的文档。
在用户所在的节点下创建 admin 用户和 Administrator 用户。
如果您的模式中没有用于角色的节点,请为将在以下步骤中创建的特定于 Java CAPS 的角色创建一个节点。例如:
dn: ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: organizationalUnit ou: CAPSRoles |
在角色所在的节点下创建角色 all、administration 和 management。将 admin 用户和 Administrator 用户作为每个角色的唯一成员添加。例如:
dn: cn=all, ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: groupOfUniqueNames cn: all ou: CAPSRoles uniqueMember: uid=admin, ou=People, dc=sun, dc=com uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com dn: cn=administration, ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: groupOfUniqueNames cn: administration ou: CAPSRoles uniqueMember: uid=admin, ou=People, dc=sun, dc=com uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com dn: cn=management, ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: groupOfUniqueNames cn: management ou: CAPSRoles uniqueMember: uid=admin, ou=People, dc=sun, dc=com uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com |
根据需要,将其他用户添加到一个或多个角色。例如:
dn: cn=all, ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: groupOfUniqueNames cn: all ou: CAPSRoles uniqueMember: uid=admin, ou=People, dc=sun, dc=com uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com uniqueMember: uid=userA, ou=People, dc=sun, dc=com uniqueMember: uid=userB, ou=People, dc=sun, dc=com dn: cn=administration, ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: groupOfUniqueNames cn: administration ou: CAPSRoles uniqueMember: uid=admin, ou=People, dc=sun, dc=com uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com uniqueMember: uid=userB, ou=People, dc=sun, dc=com dn: cn=management, ou=CAPSRoles, dc=sun, dc=com objectClass: top objectClass: groupOfUniqueNames cn: management ou: CAPSRoles uniqueMember: uid=admin, ou=People, dc=sun, dc=com uniqueMember: uid=Administrator, ou=People, dc=sun, dc=com |
转至配置系统信息库。
要将 LDAP 服务器用于系统信息库用户管理,必须将 <Realm> 元素添加到系统信息库的 server.xml 文件中,该文件位于 JavaCAPS-install-dir/repository/repository/server/conf 目录中。
server.xml 文件包含用于指定用户数据库的平面文件实现的默认 <Realm> 元素。平面文件实现将使用 tomcat-users.xml 文件,该文件位于 JavaCAPS-install-dir/repository/repository/data/files 目录中。
下表介绍了 LDAP 版本的 <Realm> 元素所使用的属性。有关所有可能属性的详细介绍,请参见 org.apache.catalina.realm.JNDIRealm 类的 Tomcat 文档。
打开 server.xml 文件,该文件位于 JavaCAPS-install-dir/repository/repository/server/conf 目录中。
删除或注释掉默认的 <Realm> 元素。
如果使用的是 Sun Java System Directory Server,将以下 <Realm> 元素添加到 <Engine> 标记中。根据需要更改默认值。前面的表对属性进行了介绍。
<Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://localhost:489" userBase="cn=People,dc=sun,dc=com" userSearch="(uid={0})" userSubtree="true" userRoleName="nsroledn" userRoleNamePattern="cn={0},dc=sun,dc=com" roleSubtree="true" /> |
如果使用的是 Active Directory,将以下 <Realm> 元素添加到 <Engine> 标记中。根据需要更改默认值。前面的表对属性进行了介绍。
<Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://localhost:389" userBase="cn=Users,dc=sun,dc=com" userSearch="(cn={0})" userSubtree="true" roleBase="ou=CAPSRoles,dc=sun,dc=com" roleName="cn" roleSearch="(member={0})" roleSubtree="true" /> |
如果使用的是 OpenLDAP Directory Server,将以下 <Realm> 元素添加到 <Engine> 标记中。根据需要更改默认值。前面的表对属性进行了介绍。
<Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldap://localhost:389" userBase="ou=People,dc=sun,dc=com" userSearch="(uid={0})" userSubtree="true" roleBase="ou=CAPSRoles,dc=sun,dc=com" roleName="cn" roleSearch="(uniquemember={0})" roleSubtree="true" /> |
如果您的 LDAP 服务器未配置为允许匿名读取访问,请将 connectionName 属性和 connectionPassword 属性添加到 <Realm> 元素中。将第一个属性设置为 Administrator 用户的 DN。将第二个属性设置为用户的加密密码。请参阅以下示例。
Sun Java System Directory Server:
connectionName="cn=Directory Manager" connectionPassword="E451KDVb0OPcH+GN46OZcg==" |
Active Directory:
connectionName="Administrator@sun.com" connectionPassword="geEiVIbtO+DcH+GN46OZcg==" |
OpenLDAP Directory Server:
connectionName="cn=Manager,dc=sun,dc=com" connectionPassword="l/ZRt1cfNKc=" |
要对密码进行加密,请使用 encrypt 实用程序,该程序位于 JavaCAPS-install-dir/repository/repository/util 目录中。该实用程序的文件扩展名取决于您的平台。该实用程序使用未加密的密码作为参数。例如:
C:\JavaCAPS6\repository\repository\util>encrypt mypwd LCUApSkYpuE |
保存并关闭 server.xml 文件。
启动 LDAP 服务器。
关闭并重新启动系统信息库。
默认情况下,系统信息库和 LDAP 服务器之间的通信没有加密。
要对系统信息库和 LDAP 服务器之间的通信进行加密,请对本主题中先前所介绍的过程进行以下添加和修改。
确保已将 LDAP 服务器配置为使用安全套接字层 (Secure Sockets Layer, SSL)。有关详细信息,请参见随 LDAP 服务器提供的文档。
在准备下一步时,请将 LDAP 服务器的证书导出为文件。
必须将 LDAP 服务器的证书添加到系统信息库的可信证书列表中。该列表位于名为 cacerts 的文件中。
在以下过程中,您将使用 keytool 程序。此程序随 Java SDK 一起提供。
导航至 JDK-install-dir/jre/bin 目录。
使用在安装系统信息库过程中指定的 JDK。
运行以下命令:
keytool -import -trustcacerts -alias alias -file certificate_filename -keystore cacerts_filename |
对于 -alias 选项,您可以指定任何值。
对于 -file 选项,请指定 LDAP 服务器的证书的全限定名称。例如:
C:\mycertificate.cer |
对于 -keystore 选项,请指定 cacerts 文件的全限定名称。cacerts 文件位于 JDK-install-dir/jre/lib/security 目录中。例如:
C:\Java\jdk1.6.0_06\jre\lib\security\cacerts |
出现提示时,请输入密钥库密码。默认密码为 changeit。
出现是否信任此证书的提示时,请输入 yes。
将显示以下消息:
Certificate was added to keystore |
在 server.xml 文件的 <Realm> 元素中,按以下方式修改 LDAP 服务器的 URL:
例如:
<Realm className="org.apache.catalina.realm.JNDIRealm" connectionURL="ldaps://myldapserver:636" ... |