(翻译:http://www-unix.globus.org/toolkit/docs/4.0/security/cas/WS_AA_CAS_Release_Notes.html)
组件概况(Component Overview)
CAS允许一个虚拟组织在分布于几个站点的资源中传递安全策略。一个CAS服务器对虚拟组织的用户发布声明(issues assertions),授予他们对于资源的很细致的访问权限。服务器认可并强调这些声明。CAS是用来对于多服务进行扩展并且现在已经的到GridFTP的支持。
注:现在还没有支持基于CAS授权的Web Services。
特性摘要
l 支持GridFTP的文件层次的访问控制
l 发行SAML授权决定
l 目前不支持MySQL,支持国际化语言。
GT4 CAS Admin Guide
(翻译:http://www-unix.globus.org/toolkit/docs/4.0/security/cas/admin-index.html)
介绍(Introduction)
这个说明包含为使用CAS的系统管理员准备的高级配置信息,提供了系统管理员典型的处理操作信息的参考,包括安装、配置、部署和测试安装等。
注:一般来说每个虚拟组织(Virtual Organization, VO)有一个CAS服务器和若干个客户端。本文包含部署CAS服务器的信息对于CAS客户端的安装来说是不需要的。要安装CAS客户端的话请参考客户端安装说明。
编译与安装(Building and Installing)
CAS服务器和客户端的编译和安装是GT4.0安装的缺省部分。基本的安装要求,请参考GT 4.0 System Administrator’s Guide。本组件没有额外的安装步骤。
配置(Configuring)
配置概况(Configuration overview)
CAS服务器可以和VO的描述一起配置,CAS服务器的服务和声明的最大生命周期被发布。同时,服务还需要配置与其使用的后台数据库相关的信息。任何带有JDBC(Java Driver Bridge Connector)驱动和支持合理SQL(Structure Query Language的数据库都可以使用。这就是说,PostGres可以在开发和测试中使用,并且我们强烈建议使用。CAS服务器schema可以和$GLOBUS_LOCATION/etc/globus_cas_service/casDbSchema/cas_pgsql_database_schema.sql中提供的PostGres一起使用。
其他的,服务的安全设置可以在与CAS服务相关的安全描述中更改。它允许配置服务使用到的信任证书(credential, 注:同proxy,代理证书),认证(authentication)类型和信息保护需求,甚至于认证机制。缺省情况下,如下的安全设置已经安装:
l 信任证书是由容器(container)层的安全描述决定的。如果没有容器层的安全描述或者它没有指定使用什么信任证书,那么将使用默认的信任证书
l 所有的方法都强调认证和信息完整性保护,除了queryResourceProperties和getResourceProperty。这意味着在与CAS服务交互的时候,必须使用GSI传输、GSI安全信息和GSI安全转换
l 标准的认证框架(framework)不能用来认证。相反的,这些服务使用的是后台的数据库来决定访问是否被允许。
注:改变需要的认证和授权方法需要匹配和服务交互的客户端的变化。
注意:如果服务配置成使用GSI安全传输,那么无论指定什么层次的信任证书都必须使用容器证书来进行握手(handshake)。
接口语法(Syntax of the interface)
l 缺省情况下,CAS服务在启动的时候并不被加载。可以通过修改如下所示的$GLOBUS_LOCATION/etc/globus_cas_service/server-config.wsdd中的loadOnStartup属性,解除注释(uncomment)。如果属性是非注释的(uncommented),a) CAS服务已经在启动的时候被加载,b) 数据库连接池被初始化,c) 如果MDS可以注册,该服务自动注册到MDS/Index.
l 修改最大的声明时间和VO描述,设置所需要的值到$GLOBUS_LOCATION/etc/globus_cas_service/jndi-config.xml文件中的maxAssertionLifetime和voDescription属性中
l 修改后台数据库的配置,按照如下表中的方法设置$GLOBUS_LOCATION/etc/globus_cas_service/jndi-config.xml文件中的databaseConfiguration段
表1. 数据库参数
驱动(driver) | 使用的JDBC驱动 |
连接URL(connectionURL) | 连接数据库使用的JDBC连接URL |
用户名(username) | 连接数据库使用的用户名 |
口令(password) | 用户名对应的数据库口令 |
活动连接数(activeConnections) | 任何实例同时活动连接的最大数目 |
耗尽时动作(onExhaustAction) | 当连接池耗尽时的处理方式。如果值是0则失败,1阻塞,2增长连接池(获得更多连接) |
最大等待时间(maxWait) | 连接池等待空闲连接的最大时间,以毫秒计 |
空闲连接数(idleConnections) | 任何时刻的最大的空闲连接数 |
l 修改安全描述符配置参考安全描述符(Security Descriptors)。需要修改的文件是 $GLOBUS_LOCATION/etc/globus_cas_service/security-config.xml
部署(Deploying)
CAS服务的部署是系统的标准组件安装的一部分。具体请参考系统管理员手册(System Administrator’s Guide)。不同于文档上面所述说的步骤,以下的步骤是部署CAS服务所必须。
为CAS服务获得信任证书(Obtaining credentials for the CAS Service)
CAS服务可以用它自己的特定信任证书。获得服务信任证书的步骤可以从这里找到。
默认的发行包中已经包含了标准管理员客户端,使用标识认证来授权他们运行的服务(并且希望CAS服务能够拥有这样的信任证书:拥有服务器所运行的主机FQDN(Fully Qualified Domain Name, 证书域名)和服务器名字“cas”作为证书DN的一部分)。命令行选项可以用来指定CAS服务的标识,如果缺省标识没有被采用。上述网页中提到的命令行可以进行如下修改来获得CAS服务器的信任证书:
casadmin$ grid-cert-request –service cas –host FQDN
证书和私钥一般分别保存在/etc/grid-security/cas-cert.pem和/etc/grid-security/cas-key.pem中。在本文档中,证书和密钥文件的保存位置分别和CAS_CERT_FILE和CAS_KEY_FILE有关。(这些信任证书中的主题名(subject name)一般由CAS客户端所期望。)
数据库安装和配置(Database installation and configuration)
CAS使用后台数据库来保存所有用户的数据。本节简明的描述如何利用CAS后台的schema来安装数据库和创建数据库。
安装数据库(Installing the database)
所有使用JDBC驱动和支持合理SQL语言集的任何数据库都可以使用,我们这里采用PostgreSQL进行开发和测试。其驱动已经包含在分发包中。如果使用其他的数据库,相关的驱动必须加入到$GLOBUS_LOCATION/lib中。
安装数据库(PostGres)的简明要求可在这里找到。更多细节请参考你所安装的数据库的文档。
创建CAS数据库(Creating the CAS database)
创建CAS数据库所需的schema为:
$GLOBUS_LOCATION/etc/globus_cas_service/casDbSchema/cas_pgsql_database_schema.sql
创建一个数据库,例如casDatabase,在安装了PostgreSQL的本地机子上运行如下命令:
casadmin$ createdb casDatabase
casadmin$ psql -U casadmin -d casDatabase -f /
$GLOBUS_LOCATION/etc/globus_cas_service/casDbSchema/cas_pgsql_database_schema.sql
你将在屏幕上看到很多输出。除非其中出现“ERROR”,不然都是正常的输出。
引导CAS数据库(Bootstrapping the CAS database)
CAS数据库需要用CAS特定的数据和一个允许进行引导(bootstrap)CAS操作的超级用户信息进行初始化。可以通过cas-sercer-bootstrap脚步命令行来完成这项工作。
cas-server-bootstrap [ ] -d [ -implicit | -b ]
表2. 命令行选项
-help | 输出帮助信息 |
-debug | 以debug跟踪方式运行脚本 |
-d dbPropertiesFile | 数据库属性的文件名,如下: dbDriver=database driver name dbConnectionURL=database connection URL dbUserName=Username to access database dbPassword=Password for the above username |
-b bootstrapFile | 该选项用来向数据库移入(populates)超级用户数据,并指向一个包含用来引导数据库的数据的文件。模板文件可以在 |
-implicit | 移入以下数据:a) CAS服务器固有数据:这把CAS服务器本身作为一个CAS对象加入,并像注册用户、对象等一样的包含服务/动作;b) 服务/动作和FTP相关的命名空间比如读、写等 |
引导命令示例:
无论是引导固有数据还是用户数据CAS数据库都可以通过以下命令。在运行命令之前,以下的文件必须已经创建并有适当的值。
l $GLOBUS_LOCATION/share/globus_cas_service/casDbProperties
dbDriver=org.postgresql.Driver
dbConnectionURL=jdbc:postgresql://127.0.0.1/casDatabase
dbUsername=tester
dbPassword=foobar
l $GLOBUS_LOCATION/share/globus_cas_service/bootstrapProperties
ta-name=defaultTrustAnchor
ta-authMethod=X509
ta-authData=/C=US/O=Globus/CN=Default CA
user-name=superUser
user-subject=/O=Grid/O=Globus/OU=something/CN=someone
userGroupname=superUserGroup
l 执行的命令行
casadmin$ cd $GLOBUS_LOCATION
casadmin$ bin/cas-server-bootstrap /
-d share/globus_cas_service/casDbProperties /
-implicit -b / share/globus_cas_service/bootstrapProperties
一旦数据已经创建,那么CAS服务就需要按这里所描述的来配置以使用它。
测试(Testing)
CAS有两个测试集,一个用来测试后台数据库的访问模块,另一个用来测试服务本身。为了都进行测试,需要在GLOBUC_LOCATION中使用“GPT FILLME: instructions” 安装CAS测试包(gt4-cas-deletation-test-3.9-src_bundle.tar.gz)。
假设:
l 后台数据库已经安装并且设置好
l CAS服务和测试已经在$GLOBUS_LOCATION中安装好
l 样例命令行假设:
1. 容器在本地启动,端口8443
2. 数据库用户名tester
3. 数据库名casDatabase
4. 数据库在主机foo.bar.gov上,端口默认
测试后台数据库模块(Testing the backend database module)
1. 运行:
cd $GLOBUS_LOCATION
2. 导入文件etc/globus_cas_unit_test/casTestProperties用以下的数据库配置信息:
表3. 测试数据库属性
dbDriver | 使用的JDBC驱动 |
dbConnectionURL | 连接数据库的JDBC连接地址 |
dbUsername | 连接数据库的用户名 |
dbPassword | 用户相关的口令 |
3. 测试数据库时数据库需要是空的,并且数据库的所有入口(entries)会被清空。运行:
ant -f share/globus_cas_unit_test/cas-test-build.xml testDatabase
4. 测试报告被存放在$GLOBUS_LOCATION/share/globus_cas_unit_test/cas_test_reports中。
注意:数据库引导需要重新完成以让服务器可以接受客户端请求。
测试CAS服务模块(Testing the CAS service module)
这些测试可以设置成能够测试多用户情况或者配置成只使用一个标识。第一个测试集用来测试管理的功能并且为第二个用户设置数据库。作为第二个用户,通过测试权限和查询来确认安装已经成功。
所有的测试的配置信息都需要在etc/globus_cas_unit_test/casTestPropertiese文件中设置。数据库部分的属性文件需要按照这里描述的配置。此外,如下的一些属性需要配置才能运行测试:
表4. 测试属性
user1SubjectDN | 运行第一个测试集的用户的DN |
user2SubjectDN | 运行第二个测试集的用户的DN。这个DN和user1SubjectDN的值不同。注意:两个测试可以由同一个用户运行,只要运行测试的所使用的证书的DN和user1SubjectDN的值匹配。在这种情况下,user2SubjectDN的值可以设置为任何字符串。 |
maxAssertionLifetime | 需要和Configuration Information说明的服务配置的值匹配 |
host | CAS服务所运行的主机 |
port | CAS服务所运行的端口 |
securityType | 可选项,表明安全方式。设置:安全信息设置为message;安全会话为conversation;安全传输为transport(缺省设置) |
protType | 可选项,表明保护方式。设置:完整性保护设置为signature(缺省设置);保密设置为encrypt |
测试的步骤:
1. 运行
cd $GLOBUS_LOCATION
2. 执行$GLOBUS_LOCATION/etc/globus-devel-env.sh
或$GLOBUS_LOCATION/etc/globus-devel-env.csh
或$GLOBUS_LOCATION/etc/globus-devel-env.bat来设置环境
3. 在测试属性文件中,设置user2SubjectDN的值为你常用代理证书的subject。以下的命令返回所需的字符串:
casadmin$ java org.globus.tools.CertInfo –subject –globus
4. 用如下命令产生独立的代理证书:
casadmin$ java org.globus.tools.ProxyInit –independent
5. 在测试属性文件中,设置上一步产生的代理证书的标识为user1SubjectDN的值。以下的命令可以返回相关的字符串:
casadmin$ java org.globus.tools.ProxyInfo –subject –globus
6. 按照表4中配置的主机和端口启动容器
7. 自我许可(self permissions)并为拥有subjectDN的用户user2SubjectDN设置数据库,执行如下的命令:
casadmin$ ant –f share/globus_cas_unit_test/cas-test-build.xml user1TestService
8. 测试第二个用户前,需要为用subjectDN标识的第二个用户产生一个代理证书:
casadmin$ java org.globus.tools.ProxyInit
9. 测试数据库时数据库需要是空的,并且数据库的所有入口(entries)会被清空。然后执行:
casadmin$ ant –f share/globus_cas_unit_test/cas-test-build.xml user2TestService
10. 测试报告保存在$GLBOUS_LOCATION/share/globus_cas_unit_test/cas-test-reports中
11. 执行完这些测试,CAS数据库需要清空。下面的命令清空所有的数据库入口:
casadmin$ psql –U casadmin –d casDatabase –f $GLOBUS_LOCATION/share/cas/database_delete.sql
注意:数据库引导需要重新完成以让服务器可以接受客户端请求。
(未完,不续)