免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2370 | 回复: 2

使用IBM Java Toolbox for i 管理IBM i权限 (转载) [复制链接]

论坛徽章:
0
发表于 2012-12-29 16:17 |显示全部楼层
本帖最后由 double_life 于 2012-12-29 17:12 编辑

使用IBM Java Toolbox for i 管理IBM i权限(转载自IBM i 中国开发团队 Blog
从安全性的角度,IBM i提供了三个级别的安全保护机制,分别为:物理安全性、登录安全性、以及资源安全性。物理安全性是从硬件的角度,主要涉及的是IBM i数据存储介质的保护;登录安全性则以用户为中心,限制哪些用户访问IBM i以及登录后可执行哪些操作;资源安全性是围绕IBM i对象与文件等资源,保护文件、对象以及对象中数据避免非法访问。另一方面,作为一组Java应用程序编程接口,IBM Java Toolbox for i主要用于访问IBMi的数据与资源。有关IBM Java Toolbox for i的基础知识,请参见另一篇技术文档“Toolbox for Java 和 JTOpen”。本文的主要目标是:从程序设计的角度,指导读者如何使用IBM Java Toolbox for i从登录安全性与资源安全性的角度,实现针对用户、对象以及文件的权限管理。物理安全性不属于本文的讨论范围。

从结构上,本文主要分为3部分。第一部分主要从用户权限的角度,介绍IBM Java Toolbox for i针对IBMi的登录安全性的编程支持;在第二部分中,我们将分别从对象权限与IFS文件权限的角度,介绍IBM Java Toolbox for i针对IBMi的资源安全性的编程支持。最后一部分是总结。
为便于读者理解,本文给出样例,其说明如表1所示:

1. 样例说明

样例


说明


用户Admin


IBM i管理员用户(*SECOFR)。样例程序将列出它的特殊权限(以下称Special Authority)


用户 User1


普通用户(*USER),属于用户组User2,无任何Special Authority。样例程序将创建文件/home/user1.policy


用户 User2


组用户,同时也是管理员用户。样例程序将列出它的成员。


用户 User3


普通用户(*USER)。样例程序将删除该用户。


对象CUSTINFO


QSYS.LIB/CUSTINFO.PGM作为RPG程序,提供客户信息查询功能。样例程序将打印用户针对该对象的权限。


文件/home/user1.policy


user1.policy功能是管理用户User1对应的安全策略。


论坛徽章:
0
发表于 2012-12-29 16:33 |显示全部楼层
本帖最后由 double_life 于 2012-12-29 17:09 编辑

IBM Java Toolboxfor i实现IBM i的登录安全性

作为IBM i提供的三个安全保护级别之一,登录安全性的主体是用户。在IBM i中,描述用户的对象是用户概要(以下称User Profile)。因此,这里我们围绕用户概要,讨论IBM Java Toolbox for i关于IBM i登录安全性的相关支持。

作为IBM i系统中的一种特殊对象,User ProfileIBM i系统安全性的起点,对应的对象类型为*USRPRFUser Profile中定义了许多与安全性相关的属性,列举如下:

  • 用户拥有哪些对象。
  • 针对拥有部分所有权的对象,该用户拥有哪些权限。
  • 用户拥有哪些Special Authority。
  • 用户是否属于某组用户(以下称Group Profile)及一系列子组用户(Supplemental Group Profile)

使用CL命令Work User Profile (WRKUSRPRF)可以查看User Profile对应的所有属性。其中,当使用CL命令Delete User Profile(DLTUSRPRF)删除某一用户时,针对用户拥有的对象与拥有部分所有权的对象,两者关于用户的权限引用也一并删除。与此同时,对于用户曾经拥有的对象而言,要么易主,更换所有者,要么选择一并删除。对于拥有部分所有权的对象,其用户权限也会随用户一起被删除。

从面向对象程序设计的角度,我们可以使用IBM Java Toolbox for i提供的CommandCall对象封装并远程执行CL命令的方式,完成删除用户的操作,如清单1所示:

清单 1. IBM Java Toolboxfor i删除用户User3
//构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400sys = new AS400(system, usr, pwd);
//构造CommandCall,准备远程调用CL命令删除用户。
CommandCall cc = new CommandCall(sys);
//删除用户。
if(cc.run("DLTUSRPRF User3")){
   //删除用户的操作成功。
   System.out.println("User3 was deleted successfully");
} else {
   // 如果调用失败,则将错误消息封装成相关Java类AS400Message。
   AS400Message[] messageList =pgm.getMessageList();
   // ... 处理消息列表
}
//作为好的编程习惯,释放连接
sys.disconnectService(AS400.COMMAND);

刚才,我们介绍了User Profile关于对象与权限相关的两个属性。从中可以看出,用户,对象,权限三者的关联程度。 接下来介绍的是User Profile的另一重要属性——Special Authority。简单地说,用户的Special Authority的目标是控制用户访问某一对象或完成某一任务的特殊能力。通过CL命令DisplayUser Profile (DSPUSRPRF)可查看用户相关的Special Authority,如图1所示:

1. 管理员Admin对应的Special Authority
12-29-2012 4-24-35 PM.jpg

1列出管理员Admin拥有的众多SpecialAuthority列表。其中,最值得一提的是*ALLOBJ*SAVSYS这两种。*ALLOBJ权限最大,相当于IBMi的管理员,其操作不受任何限制。而*SAVSYS则允许用户将任意IBM i对象保存为Save File,即使用户对该对象没有权限。

从面向对象的角度,我们可以使用IBM Java Toolbox for i提供的User对象获取UserProfile的相关属性,包括Special Authority,如清单2所示:

清单 2. IBM JavaToolbox for i获取用户Admin的特殊权限
//构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400sys = new AS400(system, usr, pwd);
//构造User对象,指定目标用户。
User user = new User(sys, "ADMIN");
//获取用户特殊权限列表并打印。
String[] returnValue = user.getSpecialAuthority();
System.out.println("ADMIN Special Authority List:");
for (int i = 0; i < returnValue.length; ++i){
  System.out.println(returnValue);
}
//作为好的编程习惯,释放连接
sys.disconnectAllServices();

在介绍User Profile的前三个重要属性之后,我们看一下最后一个属性——Group ProfileSupplemental Group Profile

我们知道,与UnixWindows等操作系统一样,IBMi平台也支持用户与组的概念。所不同的是,UnixWindows将用户与组视为两个不同的概念。而在IBM i中,组与用户是同一个概念,对象类型均为*USRPRF。从这个角度而言,Group Profile本身也是一个User Profile,所不同的是,当一个用户的GIDGroup ID)属性被赋值或者说另一个*USRPRF对象被加入时,该User Profile就变成了一个GroupProfile。而被加入的User Profile则成为成员用户(Member)。

IBM i中,支持一个UserProfile可以同时属于最多16个组,并且只有1个组能成为Group Profile,余下的则为SupplementalGroup Profile
UnixWindows等操作系统一样,GroupProfile能起到简化管理用户的功效。需要指出的是,IBM i并不支持组与组之间的递归嵌套关系。换句话说,Group Profile并不允许成为其它UserProfile的成员用户。

从面向对象的角度,要知道一个Group Profile究竟包含多少个普通的User Profile,我们可以使用IBM Java Toolbox for i提供的UserList对象列出某用户组对应的成员,如清单3所示:

清单 3. IBM JavaToolbox for i获取组用户User2的成员
//构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400sys = new AS400(system, usr, pwd);
//构造UserList对象,返回指定组的成员用户列表。
UserList userList = new UserList(sys);
userList.setUserInfo(UserList.MEMBER);
userList.setGroupInfo("User2");
//打印成员用户列表。
System.out.println("The Member List of group User2:");
Enumeration enum = userList.getUsers();
while (en.hasMoreElements()) {
   User u = (User) en.nextElement();
   System.out.println ("User name: " + u.getName());
   System.out.println ("Description: " + u.getDescription ());
}
//作为好的编程习惯,释放连接
sys.disconnectAllServices();

至此,我们围绕用户权限,讨论了IBM Java Toolbox for i针对IBM i登录安全性的相关支持。接下来,我们继续讨论IBM Java Toolbox for i针对IBM i资源安全性的相关支持。

论坛徽章:
0
发表于 2012-12-29 17:03 |显示全部楼层
本帖最后由 double_life 于 2012-12-29 17:13 编辑

IBM Java Toolbox for i实现IBM i的资源安全性
作为IBM i提供的另一安全保护级别,资源安全性讨论的范畴是对象权限与文件权限。一方面,不同于文件系统为中心的WindowsUnixIBMi是一种面向对象的操作系统。另一方面,为与WindowsUnix兼容,IBM i支持基于POSIX标准的IFS文件系统。本节部分主要讨论如何利用IBM Java Toolbox for i实现对基于对象权限与基于IFS文件权限的两种管理方式。

IBM Java Toolbox for i针对对象权限的支持
首先,我们讨论IBM Java Toolbox for i针对对象权限的支持。前面提到过,IBM i是一种面向对象的操作系统。因此对象的权限实际上包含两部分:对象权限与数据权限。

  • 对象权限指的是允许针对对象进行哪些操作。
  • 数据权限指的是允许针对对象内容进行哪些操作。

这里,只列出常见的对象权限与数据权限对应的值及其说明,分别如表2与表3所示。有关对象权限与数据权限更多详细内容,请参见IBMi 信息中心

2. 对象权限

对象权限值


说明


*ALL


用户可以执行除了对象权限列表(*AUTL)所控操作外的所有操作。


*CHANGE


用户可对对象更改和执行基本功能。


*EXCLUDE


用户不能存取对象。


*USE


用户具有对象操作权限、读取权限和执行权限。


这里需要说明的是,对象权限列表(*AUTL)实际上是一种容器对象,目标是方便管理具有相同安全设置的一组对象。从这个角度而言,对象权限列表与组用户(Group Profile)的概念非常类似。

3. 数据权限

数据权限值


说明


Add


可以向对象添加数据。


Delete


可以从对象删除数据。


Execute


可以使用对象。


Read


可以读取但不更改数据。


Update


可以读取、更改并保存数据。


默认情况下,对象权限与数据权限存在一定的映射关系,如表4所示:

4. 对象权限与数据权限的默认映射关系
  
对应关系
  

Add


Delete


Execute


Read


Update


*ALL


X


X


X


X


X


*CHANGE


X


X


X


X


X


*EXCLUDE












*USE






X


X




用户可以根据业务需求,可以使用CL命令Edit Object Authority(EDTOBJAUT)更改这一映射关系规则,如图2所示。

2. 编辑CUSTINFO.PGM的对象权限
12-29-2012 4-25-52 PM.jpg

从面向对象程序设计的角度,IBM Java Toolbox for i使用QSYSPermission对象获取对象权限,如清单4所示:


清单
4. IBM JavaToolbox for i打印CUSTINFO.PGM的对象权限
//构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400sys = new AS400(system, usr, pwd);
//指定对象,构造Permission对象。
Permission objectInQSYS= new Permission(sys, "/QSYS.LIB/CUSTINFO.PGM");
//打印对象权限。
System.out.println("The Object Authority List:");
Enumeration en = objectInQSYS.getUserPermissions();
   while (en.hasMoreElements()) {
      QSYSPermission qsysPerm = (QSYSPermission)en.nextElement();
      System.out.println(qsysPerm.getUserID() +": " + qsysPerm.getObjectAuthority());
}
//作为好的编程习惯,释放连接
sys.disconnectAllServices();

至此,我们已从IBM i作为面向对象的系统的角度,介绍了如何使用IBM Java Toolbox for i提供对象权限的相关支持。接下来,我们从IFS文件系统的角度,介绍如何使用IBM Java Toolbox for i提供文件权限的相关支持。

IBM Java Toolbox for i针对IFS文件权限的支持
前面提到过,IBM i设计IFS的目的是效仿WindowsUnix文件系统。从面向对象的角度看,IFS的类型主要有两种,分别是对象类型为*DIR的文件夹与对象类型为*STMF的文件。
要查看文件的权限,最直接的方式是采用QShellls命令,如图3所示:

3. QShell查看/home/user1.policy的文件权限
12-29-2012 4-25-09 PM.jpg

我们看到,文件user1.policy的所有者、用户组,以及其它用户对应的权限均为RW,没有执行权限。另一种查看文件权限的方式是执行CL命令Work with Authority (WRKAUT),如图4所示:

4. CL查看/home/user1.policy的文件权限
12-29-2012 4-25-32 PM.jpg

从面向对象程序设计的角度,IBM Java Toolbox for i使用QSYSPermission类表示对象权限。要获取针对指定对象的用户对象权限,如清单5所示:

清单 5. IBM Java Toolbox for i打印/home/user1.policy的文件权限
//构造AS400对象,建立Java应用程序与IBM i服务器的连接。
AS400sys = new AS400(system, usr, pwd);
//指定文件路径,构造Permission对象。
Permission objectInRoot= new Permission(sys, "/home/user1.policy");
//打印文件权限。
System.out.println("The IFS File Authority List:");
Enumeration en = objectInRoot.getUserPermissions();
   while (en.hasMoreElements()) {
   RootPermission rootPerm =(RootPermission)en.nextElement();
   System.out.println(rootPerm.getUserID()+":"+rootPerm.getDataAuthority());
}
//作为好的编程习惯,释放连接
sys.disconnectAllServices();
至此,我们从面向对象程序设计的角度,分别介绍了IBM Java Toolbox for i针对登录安全性与资源安全性的相关IBM i安全支持。

总结
安全性对于IBM i而言是一个相对复杂的话题。本文分别以用户,对象,文件这三个角度,重点介绍了IBM i的相关权限概念,并结合样例指导读者如何使用IBM Java Toolbox for i实现相关的IBM i安全支持工作。

参考资源
·       参看文章“Toolboxfor Java 和 JTOpen” ,了解IBMJava Toolbox for i的概要信息。
·       参考“IBM i 信息中心对象权限章节”,了解更多有关IBM i对象权限的内容。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP