Chinaunix首页 | 论坛 | 博客
  • 博客访问: 176693
  • 博文数量: 77
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 990
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-21 18:13
文章分类

全部博文(77)

文章存档

2011年(1)

2009年(76)

我的朋友

分类:

2009-07-08 21:14:35

       TUXEDO在其系统框架中集成了进程间通讯安全功能。在商业应用中可以由用户决定安全级别。

       本节中,我们将讨论TUXEDO提供的不同的安全保障能力和应用实现的必要步骤。

 

 

l       概念

l       管理文件和命令

l       ubbconfig

l       API使用说明

l       代码范例

 

 

TUXEDO系统在第一次ATMI调用时——tpinit()就进行安全工作。

       安全级别信息先传入tpinit(),在公告牌上进行校验,然后用AUTHSVR进行二次检查。如果验证通过,tpinit()允许客户端连上TUXEDO系统。

       TUXEDO API tpchkauth()用来决定应用的安全级别。下表是各安全级别认证需要的资源。

tpchkauth()的返回值

管理文件设置

UBBCONFIG的设置

TPNOAUTH

 

 

TPSYSAUTH

 

SECURITY APP_PW

TPAPPAUTH

tpusr

tpgrp

tpacl

SECURITY USERAUTH

ACL

MANDATORY_ACL

AUTHSVC AUTHSVC

 

 

 

 

 

 

组命令

tpgrpadd –g GID groupname

tpgrpdel groupname

tpgrpmod –g GID –n new_groupname groupname

入口在$APPDIR/tpgrp

用户命令

tpusradd –u UID –g GID –c clntname usrname

tpusrdel –c clntname

tpusrmod –u UID –g GID –c clntname –l newlogin –n newclntname –p usrname

入口在$APPDIR/tpusr

ACL命令

tpacladd –g GID entity_name

tpacldel entity_name

tpaclmod –g GID entity_name

入口在$APPDIR/tpacl

简要说明

       以上管理命令维护AUTHSVR的安全入口。只有安全级别要求到ACL(Access Control List)时,这些操作过程才是必须的。

       AUTHSVR对每一个用户进行认证。当客户端进程调用tpinit()去连接应用时,发生以下过程:

AUTHSVR校验用户名,客户端名和密码

当成功,AUTHSVR提供一不可伪造的应用key

每次交易请求时,客户端都要提交此应用key


 

 

有关安全的部分

*RESOURCES

AUTHSVC  “..AUTHSVC”

SECURITY  “ACL”

*SERVERS

AUTHSVR  SVRGRP=”AUTHGRP” SRVID=100

                     RESTART=Y MAXGEN=2 GRACE=0

                     CLOPT=”-A”

AUTHSVR提供的交易名字叫“..AUTHSVC

SECURITY设置了安全的级别


 

 

#include “atmi.h”

int   ConnectToTuxedo()

{

       FBFR    *f;

       TPINIT   *tpinfo;

       char              *passwd2=”penquin”;

       int   do_auth = 0,no_auth = 0;

       do_auth = tpchkauth();

       switch(do_auth)

       {

       case      -1:

              printf(“tpchkauth()err:%s”,tpstrerrno(tperrno));

              return(-1);

       case      TPNOAUTH:

              no_auth = 1;

              break;

       case      TPSYSAUTH:

              tpinfo = (TPINIT *)tpalloc(“TPINIT”, NULL, 0);

              if (tpinfo ==NULL)

              {

                     printf(“tpchkauth()err:%s”,tpstrerrno(tperrno));

                     return(-1);

              }

              break;

       case      TPAPPAUTH:

              tpinfo = (TPINIT *)tpalloc(“TPINIT”, NULL, TPINITNEED(15));

              if (tpinfo ==NULL)

              {

                     printf(“tpchkauth()err:%s”,tpstrerrno(tperrno));

                     return(-1);

              }

              tpinfo->datalen=strlen(passwd)+1;

              memcpy((char *)&tpinfo->data, passwd2, tpinfo->datalen);

              break;

       default:

              printf(“Invalid security setting %d\n”,do_auth);

              return(-1);

       }

       if (!no_auth)

       {

              strcpy(tpinfo->usrname,”tuxedo”);

              strcpy(tpinfo->passwd,”hello”);

              strcpy(tpinfo->grpname,” “);

       }

       if ((tpinit(TPINIT *)tpinfo))==-1

       {

              printf(“Failed to join application\n”);

              return(-1);

       }

}

tpchkauth()返回TPNOAUTH,TPSYSAUTH,TPAPPAUTH或错误用以决定加密强度。

tpalloc()将分配一个TPINIT结构,存储与公告牌对比的密码。

Struct TPINIT {

char      usrname[MAXTIDENT+2];
char      cltname[MAXTIDENT+2];
char      passwd[MAXTIDENT+2];
char      grpname[MAXTIDENT+2];
long      flags;
long      datalen;
long      data;

}

 

       tpalloc()还将根据TPINITNEED()分配一段空间存储用户密码。

       tpinit()TUXEDO连接。

 

阅读(1269) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~