1 摘要
在WebSphere Application Server V6.0.x的环境中,其管理服务缺省是未启用安全性的。在生产环境中,这样的缺省设置一定要注意。其带来的直接影响就是:WAS的管理控制台并不要求验证用户名密码就能登陆,进行所有的管理操作。鉴于生产环境的重要性,保护WAS的管理服务,是一定要采取的必要行动。
WAS的许多文章都讨论了如何启用安全性,如何利用各种用户注册表来进行安全性验证。由于在ND的环境中,SWAM(简单WebSphere认证机制)是不支持的,因此"LTPA(轻量级第三方认证) + LDAP(轻量级目录访问协议)用户注册表"是我们保护WAS的首选方式。本文本着实用的目的,介绍在WebSphere Application Server Network Deployment V6.0.x的环境中如何结合IBM Tivoli Directory Server V5.2保护WAS的管理服务器。
回页首
2 引言
本文讨论如何启用WebSphere Application Server Network Deployment V6.0.x的全局安全性,并使用IBM Tivoli Directory Server V5.2作为管理用户的注册表。这种情况适用于配置了集群的WAS ND环境。本文只简单讨论了WAS全局安全性的启用,并未深入讨论其对部署在WAS中应用的影响。如果相要进一步了解这方面的内容,请参看WAS的在线文档:InfoCenter。
因此本文适用于应用的安全性是自行开发实现,并没有使用J2EE和WAS安全框架的情况。
本文的示例基于AIX操作系统,供大家参考。
回页首
3 如何保护WAS及其相关的环境
3.1 WAS ND 安装拓扑:
下图显示了用于 WebSphere Application Server Network Deployment 安装的典型集群多层企业计算环境。
当启用了WAS的全局安全性后,登陆WAS的管理控制台会启用SSL,而在WAS中HTTPS 端口配置缺省使用的是自签署证书: DummyServerKeyFile.jks 和 DummyServerTrustFile.jks。
但使用这样的虚密钥和信任文件证书不安全,并且会在一定时间后过期,在生产环境,您必须生成自己的证书,以立即替换虚密钥。
3.2 全局和管理安全性:
WebSphere Application Server 内部通信通过 CSIv2 和安全认证服务(SAS)安全协议以及 HTTP 和 HTTPS 协议彼此交互。
启用 WebSphere Application Server 全局安全性时,可以同时配置相关的协议以使用安全套接字层(SSL)。启用全局安全性后,每台服务器中的 WebSphere Application Server 管理子系统在进行配置和同步时,所采用的SOAP JMX 连接器会使用 HTTPS 协议。因此建议您启用全局安全性并启用 SSL 以保护您的配置数据。
启用全局安全性后,可以通过去掉"全局安全性"页面上的"启用全局安全性"选项来禁用每个应用程序服务器上的应用程序安全性。请从管理控制台,单击"安全性 > 全局安全性"访问"全局安全性"页面。
3.3 基于角色的安全性:
WebSphere Application Server的管理系统定义了四个管理安全性角色:
1. 监控员角色
监控员可以查看配置信息和状态,但是不能进行任何更改。
2. 操作员角色
操作员可以更改运行时状态(例如启动应用程序服务器或停止应用程序),但是不能进行配置更改。
3. 配置者角色
配置者可以修改配置信息,但是不能更改运行时的状态。
4. 管理员角色
管理员上述三种角色的权力,可以修改安全配置和安全策略(例如,设置服务器标识和密码)、启用或禁用全局安全性和 Java 2 安全性,以及将用户和组映射到管理员角色。
回页首
4 管理控制台用户注册表
WebSphere Application Server 提供几种安全用户实现方式,目前一般采用三种方式来安全认证访问用户:
1. 本地操作系统用户(Local OS)
采用本机操作系统用户验证登录。
2. LDAP
需要安装LDAP服务器,比如IBM Directory Server、Lotus Domino LDAP 服务器、SunONE 或 iPlanet Directory Server、Microsoft Active Directory Server等。
3. 定制注册表(Custom Register)
当用户信息存放于非第一或者第二中注册表中时,您可以通过实现 UserRegistry 接口使用产品环境中存放用户信息使用的任何注册表。
在当前用户和组的信息以某些其他格式(例如,数据库)存放并且无法移到本地操作系统用户或 LDAP 的情况下,请实现WAS的 UserRegistry 接口,这样 WebSphere Application Server 就可以将现有注册表用于所有与安全性相关的操作。
注意:尽管 WebSphere Application Server 支持不同类型的用户注册表,但只能有一个用户注册表是活动的。
在本文讨论的安全策略中,由于本地操作系统的用户本身就需要考虑安全保密的问题,而且密码会经常更改,因此不适宜用于管理控制台安全性设置。定制注册表的方式又太过复杂。因此本方案建议采用LDAP的方式进行用户管理注册。
4.1 轻量级目录访问协议(LDAP)
轻量级目录访问协议(LDAP)是我们推荐使用的用户注册表,它利用 LDAP 绑定执行认证。
WebSphere Application Server 安全性能够支持多数主流 LDAP 目录服务器产品。要将 LDAP 用作用户注册表,您需要知道有效的用户名(标识)、用户密码、服务器主机和端口、基本专有名称(DN)。
当在WAS中启用安全性时,服务启动需要输入LDAP服务器的标识和密码并由LDAP注册表认证。如果认证失败,服务器无法启动。因此,选择不会到期或不经常更改的标识和密码是很重要的。如果需要在LDAP注册表中更改WAS管理控制台的用户标识或密码,确保一定要在所有WAS服务启动并正在运行时执行更改,否则WAS将会无法正常启动。
如果LDAP注册表中更改了用户标识、密码和其他配置信息,则在WAS管理控制台上也要做相关的更改,然后保存、停止并重新启动所有WAS相关服务器,以使产品使用新的标识或密码。最妥善的办法是,在更改LDAP注册表中信息之前,在WAS的管理控制台上禁用"全局安全性",等LDAP的信息修改完成,再修改WAS管理控制台和其相关的信息,然后启用安全性,再重启WAS。
4.2 使用 IBM Tivoli Directory Server 作为 LDAP 服务器
在WebSphere Application Server产品包中包括了一个专业的目录服务器IBM Tivoli Directory Server(以前的 IBM Directory Server)。IBM Tivoli Directory Server是IBM公司的LDAP目录服务器产品。该目录服务器是目前使用得最为广泛的目录服务器之一。该目录服务器为具有大量用户信息管理的企业提供用户管理的基础服务。
在本例中,由于IBM Tivoli Directory Server中存放的信息只用于管理控制台的安全性,应用并未使用,因此,只存放了少量的用于管理控制台的用户信息。另外,IBM Tivoli Directory Server启动与否只影响WebSphere Application Server进程的启停和管理控制台的登录,并不影响应用的运行。
重要: 建议您不要在安装 WebSphere Application Server V6.x 的同一机器上安装 IBM Tivoli Directory Server V5.2。 如果 IBM Tivoli Directory Server V5.2 和 WebSphere Application Server V6.x 安装在同一机器上,您可能遇到端口冲突。
在本文讨论"管理LDAP"的章节,会谈到如果 IBM Tivoli Directory Server V5.2 和 WebSphere Application Server V6.x 安装在同一机器上,需要做哪些更改以解决这些端口冲突。
IBM Tivoli Directory Server的安装比较简单,通过图形安装界面的向导即可。请参见其安装文档。
Tivoli Directory Server需要DB2存放数据。DB2可以从IBM Tivoli Directory Server的安装包中一起安装。本文为了简单起见,在安装IBM Tivoli Directory Server之前,请先确定已经安装了DB2 Version 8.1 FixPak 2。
在AIX操作系统上安装,请从安装介质的根目录中输入:./setup
4.3 配置管理Tivoli Directory Server
4.3.1 准备数据库用户
以AIX系统为例,如果Tivoli Directory Server的底层DB2数据库未事先安装,而是在Tivoli Directory Server安装时一起安装的,请执行下列操作系统的命令。如果已经实现安装配置了DB2,请跳过此节,参看下一节。
1. 创建组db2iadm1:
mkgroup db2iadm1
|
2. 创建用户db2inst1,该用户是组db2iadm1 和idsldap(或者ldap)的成员:
mkuser pgrp=db2iadm1 groups=db2iadm1,idsldap home=/home/db2inst1 db2inst1
|
如果上述命令执行不成功,可以用下面这句:
mkuser pgrp=db2iadm1 groups=db2iadm1,ldap home=/home/db2inst1 db2inst1
|
3. 为db2inst1设置password:
passwd db2inst1
|
4. 将root 用户加入组 db2iadm1:
/usr/bin/chgrpmem -m + root db2iadm1
|
4.3.2 配置LDAP:
1. 执行/usr/ldap/bin/ldapxcfg,启动LDAP的图形化配置界面。
2. 设置LDAP的管理员 DN/password,这里密码设为"password":
3. 配置LDAP的底层数据库,请按照如下步骤和截图上的信息输入:
a) 步骤一
b) 步骤二
c) 步骤三
d) 步骤四
e) 步骤五:选择数据库文件所在的路径。
注意,如果没有root用户权限,则请把该数据库文件的路径放在/home/db2inst1下,而不是下图中示意的路径:
f) 步骤六
g) 配置成功:
4. 管理后缀:
该步骤是为WAS的管理用户创建一个新的后缀(也就是WAS的管理用户信息的根。在本例中,WAS管理用户信息在LDAP中的子树的根为o=test)。该示例为:o=test
4.3.3 管理LDAP
1. 启动和停止管理守护程序
缺省情况下,LDAP安装好后,管理守护程序就自动启动了。如果要手工启动和停止,参看下列方法:
a) 启动Tivoli Directory Server目录管理守护程序,请执行该命令:
Ibmdiradm
|
b) 停止Tivoli Directory Server目录管理守护程序,请执行该命令:
ibmdirctl -D <adminDN> -w <adminPW> admstop
|
(注意,在本例中,<adminDN>为cn=root, <adminPW>为password) 或者使用:
ps -ef | grep ibmdiradm
kill -p <pid obtained by previous command>
|
2. LDAP管理
a) 解决开始管理之前的端口冲突:
本文一开始介绍过,建议IBM Tivoli Directory Server V5.2 和 WebSphere Application Server V6.x 不要安装在同一机器上。如果您是这种情况,请跳过该步骤,从步骤b)开始。
本步骤针对LDAP服务器和WAS ND服务器同在一台服务器的情况。
TDS采用WebSphere Application Server - Express实现管理服务,会和WAS ND产生端口冲突。因此在开始前请一定更改WebSphere Application Server - Express的缺省端口号。
WebSphere Application Server - Express 使用6个缺省端口设置
i. Http 传输端口1:9080
ii. Http 传输端口2:9443
iii. Bootstrap/rmi 端口:2809
iv. Soap 联接器端口:8880
v. 管理端口9090,和AIX的服务冲突
vi. 管理端口的加密端口9043
在TDS中,WebSphere Application Server - Express 的安装目录是"/usr/ldap/appsrv",请在如下目录的三个文件中,找到上述6个端口号,更改为不会和其它服务冲突的端口:
在AIX上执行如下命令,找到6个没有被占用的端口号:
将上述三个文件做好备份,然后做如下更改:
b) 请转至如下目录并启动TDS里带的WAS-Express:
<IDSinstalldir>/ldap/appsrv/bin/startServer.sh server1
|
c) 登录Tivoli Directory Server管理控制台:
http://localhost:9080/IDSWebApp/IDSjsp/Login.jsp
|
输入缺省用户名:superadmin
密码:secret
注意,上述密码是缺省的,可以在登录后更改。
d) 配置一个受管理的LDAP服务器:
e) 退出到管理控制带的登录界面,从下拉菜单中选择服务器的LDAP主机名,输入该服务器的DN(例如"cn=root")和密码。
f) 启动/停止LDAP服务器的界面:
4.3.4 为WAS的管理添加用户(录入数据):
1. 登录Tivoli Directory Server管理控制台(从下拉菜单中选择服务器的LDAP主机名,输入该服务器的DN(例如"cn=root")和密码。):http://localhost:9080/IDSWebApp/IDSjsp/Login.jsp
2. 创建o=test子树的根:
a) 按照下图所示,点击"添加"
b) 按照下图所示,选择"organization"
c) 在添加辅助对象类的界面上保持缺省,点击下一步。
d) 注意下面界面中红色方框中的值,父DN中内容一定要为空
e) 点击确定,然后按下图选择,然后点击"添加"。
f) 选择organizationalPerson:
g) 在"选择辅助对象类"的界面上选择"ePerson",点击"添加"
h) 点击"下一步"开始建用户。
i) 以"admin2"用户为例,在"必需属性"页面上,输入如下信息。
j) 选中"其它属性"页面,在"uid"和"userPassword"两栏输入如下信息。注意,对于"admin2"用户来说,uid这一属性很关键。
k) 在页面底部点击"完成"。
l) 按照上述方法,在LDAP服务器中可以加入多个类似用户(注意,大小写敏感)。
4.4 Tivoli Directory Server中的数据备份和恢复
存放于Tivoli Directory Server中的用户信息设置完毕之后,强烈建议立即进行数据备份。备份和恢复的方法都很简单:
4.4.1 数据备份:
数据备份有两种方式:图形界面方式和命令行方式。
图形界面方式如图:执行/usr/ldap/bin/ldapxcfg,启动LDAP的图形化配置界面,如图:
命令行方式:
db2ldif -o <outputfile> [-f <configfile>]
[[-s <subtree DN>[-x]] | [-p on|off] [-l]] [-j] | [-?]
|
注意:可在任何时候运行此实用程序而无需停止服务器。所有选项都区分大小写。
示例,要导出本例中的数据,可以用以下命令即可:
db2ldif -o /temp/ldapbackup.ldif -s o=test -j
|
注释:导出的ldif文件中,密码是加密的,不用担心密码明码泄露。
4.4.2 数据恢复(导入):
当重新安装了TDS(LDAP),或者因为其它原因需要重新录入这些用户数据时,可以采用此方法恢复数据。
数据恢复也有两种方式:图形界面方式和命令行方式。
图形界面方式如图:
命令行方式:
ldif2db -i <inputfile> [-f <configurationfile>] [-r yes|no] | -?
|
注意:在使用服务器导入实用程序之前,必须停止服务器。 确保应用程序未连接到目录数据库。如果有应用程序连接到目录数据库,则服务器实用程序将不运行
示例,要导出本例中的数据,可以用以下命令即可:
ldif2db -i /temp/ldapbackup.ldif
|
4.4.3 Tivoli Directory Server的重新安装
当发生最极端的情况(或者因为特殊的原因)需要重新安装Tivoli Directory Server时,WebSphere Application Server的运行、配置以及其中的应用都不会受影响。 在Tivoli Directory Server重新安装后,请按照第2章中的2.3.2节步骤,重新配置LDAP,然后按照上一节的方法,将以前备份好的LDAP数据恢复到Tivoli Directory Server中即可。 在下一节中提到的双机冷备方案中,备份服务器的安装也可以采用这种方式,即把主服务器的数据备份出来,再恢复到备份服务器中就可以很好的保持数据一致了。
4.5 Tivoli Directory Server的高可用实施方案
在本文讨论的安全策略中,IBM Tivoli Directory Server中存放的信息只用于管理控制台的安全性,应用并未使用,因此,Tivoli Directory Server只存放了少量的用于管理控制台的用户信息。另外,IBM Tivoli Directory Server启动与否只影响WebSphere Application Server进程的启动、停止和管理控制台的登录,并不影响应用的运行。
也就是说,Tivoli Directory Server失效或者宕机,WebSphere Application Server的进程和应用的运行完全不受其影响,可以照常运行。但是WebSphere Application Server就无法正常启动和停止(WebSphere Application Server的停止可以通过杀掉Java进程的方法实现),并无法登录管理控制台。
基于上述考虑,应该为Tivoli Directory Server实施高可用方案。 Tivoli Directory Server的高可用实施方案和数据库类似,最常用的方式为双机热备,即利用IT环境中现有的数据库双机热备来实现。 但以客户常见的实际情况来讲,目前有两种方案建议。
方案一:利用现有设备进行双机热备
目前大多数应用的两台数据库服务器已经实现了双机热备。因此可以利用这两台服务器和已有的设备,将Tivoli Directory Server安装于这两台服务器上。Tivoli Directory Server的实际数据存放于其自带的DB2数据库中,或者利用客户已有的DB2数据库,因此实现双机热备的方法和应用数据库几乎完全一样。
但是这种方案的缺点在于,两台数据库服务器上都是非常重要的业务数据,从经验上来看,不应该在这两台服务器上安装别的软件,以免受到不必要的影响。
如果能够有另外两台服务器和存储专门用来做Tivoli Directory Server的双机热备固然很理想,但是出于成本和必要性的考虑,实际上Tivoli Directory Server完全不用双机热备。因此可以考虑方案二。
方案二:双机冷备
鉴于方案一中数据库服务器的重要性,再结合前面提到的因素:Tivoli Directory Server失效或者宕机并不影响生产系统正常运行,因此双机冷备也是可以考虑的一种比较经济实用的方式。
考虑到Tivoli Directory Server中存放的数据非常少,因此对选用的服务器性能要求不高,可以是非常小型的服务器,或者PC服务器(1G内存的服务器即可)均可。
在该方案中,做备份的服务器和主服务器配置成一样的IP地址和主机名,存放完全一样的数据(实现方式为:在主服务器中录入用户数据后,从主服务器中导出数据,再在备份服务器中导入数据。方法详见上一节)。平时不启用,当主服务器发生问题时,停止主服务器,人工启用备份服务器即可。
回页首
5 WAS全局安全性
注意:启用安全性后,WebSphere Application Server中和WAS安全框架相关的应用性能会降低 10-20%。不过本文讨论的情况不涉及客户应用的安全性,故应用性能不受此影响。
5.1 配置全局安全性
1. 在启动 WebSphere Application Server 后,从地址 http://yourhost:9060/ibm/console 启动 WebSphere Application Server 管理控制台。如果当前并为启用安全性,则可使用任何用户标识登录。如果当前已经启用安全性,则使用预定义的管理标识和密码(这通常是您在配置用户注册表时指定的服务器用户标识)登录。
2. 点击"安全性 > 全局安全性",请在右边出现的页面上选择:"用户注册表' LDAP"
3. 配置用户注册表。
请以下图为例输入信息(注意:cn=wasadmin这一用户已经在LDAP里配好了。配置方法请见前面的章节,和配置admin2用户的方法完全一样):
4. 单击安全性 > 全局安全性,在页面的右侧点击"认证机制 > LTPA":
设置LTPA的密码为"password",点击"确定":
5. 回到"全局安全性"页面,选择"启用全局安全性":
6. 添加控制台用户:
注意:在"用户"一栏,可以像本例一样写全该用户的DN,也可以用短名,例如只填写"admin1"。在这里是否能使用短名,还是象下图一样必须写完整的用户名,取决于WAS中的LDAP用户过滤规则。详细说明请参见后面的章节"8.1 如何在WAS中使用短用户名?"
管理控制台定义了四个管理角色,来提供从管理控制台或从命令行执行某些 WebSphere Application Server 管理功能所需的权限级别。仅当启用全局安全性时才执行授权策略。四个管理安全角色在下列表中定义:
管理角色 角色 |
描述 |
---|---|
监控员 | 用户可以查看 WebSphere Application Server 配置和当前状态,是权限最小的用户角色。 |
配置程序 | 监控员权限 + 更改 WebSphere Application Server 配置的能力。 |
操作员 | 监控员权限 + 更改运行时状态的能力,例如启动或停止服务 |
管理员 | 操作员 + 配置特权和访问敏感数据(包括服务器密码、LTPA 密码、LTPA 和密钥等)必需的权限。 |
当启用全局安全性时,如果您没有添加控制台用户并指定角色,则可以利用上述第三步中配置用户注册表的用户(本例中是wasadmin)登陆WAS的管理控制台。该用户缺省就具有管理员权限。
添加控制台用户并指定角色时,要注意这些用户必须提前在LDAP服务器中配置好。这些用户和组的验证取决于LDAP用户注册表。
6. 在"安全性 > 全局安全性"面板上单击确定或应用,并且没有验证问题,则此操作完成。保存配置并重新启动服务器(DM)。
7. 在 WebSphere Application Server Deployment Manager 启动后,通过输入 http://yourhost:9060/ibm/console 启动 WebSphere Application Server 管理控制台。使用预定义的管理标识和密码(这通常是您在配置用户注册表时指定的服务器用户标识)登录。 例如本例中,即可用admin1登录。
回页首
6 更改缺省安全套接字层(SSL)配置表密钥文件
缺省安全套接字层(SSL)配置表在启用全局安全性时用于内部 Java 进程间的安全通信。由于WAS缺省的密钥文件只用于sample环境,会在一段时间后过期,强烈建议在生产系统生成新的密钥文件。