1. 简介:
Tuxedo提供了多种安全机制,包括基于用户身份和口令的认证授权管理,基于传输数据的签名和加密等等,本文主要关注基于身份口令的管理部分安全配置,数据传输时的签名、加密,密钥等不再此文范围。
2. Tuxedo基于安全的配置
Tuxedo的安全配置主要在ubbconfig文件中实现,包括以下几种:
1、无安全设置。这是默认的配置,采用的是Unix操作系统的权限控制。在这种级别下,客户端可以无障碍的访问所有的服务端服务。
这种情形下,在配置文件UBBCONFIG中不需要增加任何处理。当然,也可指定如下的参数进行更具体的设置:
在RESOURCE中指定SECURITY的值为NONE;指定UID、PID、PERM来代替操作系统的缺省设置。如:
SECURITY NONE
2、密码认证。这是基于整个应用系统的认证,要访问该应用系统都必须提供一个相同的密码。
使用该级别的方法如下:
在UBBCONFIG的RESOURCE部分指定认证级别:
SECURITY APP_PW
当调用tmloadcf时,tuxedo会提示输入一个密码。该密码可以在tmadmin中使用passwd命令进行修改。
图1. tmloadcf 编译时提示输入密码
Client程序要加入应用,必须使用tpalloc分配一个TPINIT结构,在该结构中的passwd域填入tmloadcf时输入的密码,然后调用tpinit()才会成功。
...
TPINIT *tpinfo;
char *passwd;
tpinfo = (TPINIT*) tpalloc(“TPINIT”, NULL, TPINITNEED(0));
strcpy(tpinfo -> passwd, passwd);
tpinit(tpinfo);
...
3、User-Level Auth(认证Server)。通过配置认证server,由用户实现一个用于认证的service,该service决定具体的认证方法和实现。
使用该级别认证的方法如下:
在UBBCONFIG的RESOURCE部分指定认证级别和认证的service:
SECURITY USER_AUTH
AUTHSVC MYSVC
同时,在SERVER部分指定包含认证service的相应server:
MYAUTHSVR SRVID=100 CLOPT=“-A” SRVGRP=GROUP1
使用User_auth安全方式时,可以使用TUXEDO产品自带的一个AUTHSVR(位于$TUXDIR/bin目录),来进行用户认证和检查。AUTHSVR提供的Service名称是“..AUTHSVC”。
当然,也可以自己实现一个用户认证Server,来进行用户的认证和检查,流程是检查判断客户端送递过来的tpinit结构的中的username、cltname、passwd、data等字段是否满足访问权限,并通过tpreturn返回TPFAIL和TPSUCCESS来表示认证通过或认证失败。
需要注意的是:USER_AUTH是在APP_PW的安全特性上的增强。即,APP_PW安全特性继续生效。在tmloadcf时,需要输入密码;在客户端程序调用服务时,要设置tpinit的passwd字段,填入tmloadcf时的密码。
一个自己编写的根据IP认证的Server相关内容如下:
图2. 客户端程序填充TPINIT结构
图3. 认证Server实现,通过IP过滤进行权限控制
图4. UBB配置
3、ACL/MANDATORY ACL(访问控制列表)。ACL(Access-Control-List) 是Tuxedo提供的一套基于组(Group)管理的安全控制机制。该机制通过用户、组以及对Tuxedo提供的资源(service、event等)的相应存取权限组成。
使用该级别认证的方法是在RESOURCE部分定义:
SECURITY ACL 或 MANDATORY_ACL
AUTHSVC “..AUTHSVC”
*SERVERS
AUTHSVR SRVID=100 SRVGRP=AdminGroup RESTART=Y CLOPT=”-A”
ACL和ACL或MANDATORY_ACL的主要区别是:若当前要访问的对象(Service)没有定义存取规则,则ACL方式允许访问,而MANDATORY_ACL方式不允许访问。
注意: 使用ACL或MANDATORY时,必须使用Tuxedo自带的认证AUTHSVR。若使用第三方的认证Server或自开发的认证Server,ACL功能需自己实现。
使用ACL时,需要使用tpusradd/tpgrpadd/tpacladd等TUXEDO提供的ACL相关命令,来创建文件tpusr、tpgrp和tpacl。这几个文件需放置在在$APPDIR目录下。
举例如下:
#tpgrpadd -g 100 DemoGroup -- 创建DemoGroup组,ID为100
#tpgrpadd -g 101 DemoGroup1 -- 创建DemoGroup1组,ID为101
#tpusradd -g DemoGroup -c Sunribo_clt Sun --在DemoGroup组创建usrname为Sun的用户,Cltname名称是Sunribo_clt
#tpusradd -g DemoGroup1 -c Sunribo1_clt Sun1 --在DemoGroup1组创建usrname为Sun1的用户,Cltname名称是Sunribo1_clt
#tpacladd -g DemoGroup -t SERVICE TOUPPER –增加DemoGroup组访问TOUPPER的权限
#tpacladd -g DemoGroup1 -t SERVICE TOLOWER –增加DemoGroup1组访问TOLOWER的权限
需要注意:
1、 在使用tpusradd时,会提示输入用户的密码(password)。Tpusradd所涉及的usrname, cltname,与程序中的TPINIT结构中字段相对应;用户的password对应TPINIT的data字段。
2、 ACL/MANDATORY ACL是在APP_PW的安全特性上的增强。即,APP_PW安全特性继续生效。在tmloadcf时,需要输入密码;在客户端程序调用服务时,要设置tpinit的passwd字段,填入tmloadcf时的密码。同时,需要将用户的相关信息填入到TPINIT对应的字段,譬如usrname, cltname, data(存放tpusradd时输入的密码),可参考图2程序代码。
3. 其他
上述的安全配置,如果客户端通过DOMAIN-DOMAIN之间的调用时,也受此安全限制。