Chinaunix
标题: 使用IBM Java Toolbox for i 管理IBM i权限 (转载) [打印本页]
作者: double_life 时间: 2012-12-29 16:17
标题: 使用IBM Java Toolbox for i 管理IBM i权限 (转载)
本帖最后由 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对应的安全策略。
|
作者: double_life 时间: 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 Profile是IBM i系统安全性的起点,对应的对象类型为*USRPRF。User 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
图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 Profile与Supplemental Group Profile。
我们知道,与Unix,Windows等操作系统一样,IBMi平台也支持用户与组的概念。所不同的是,Unix与Windows将用户与组视为两个不同的概念。而在IBM i中,组与用户是同一个概念,对象类型均为*USRPRF。从这个角度而言,Group Profile本身也是一个User Profile,所不同的是,当一个用户的GID(Group ID)属性被赋值或者说另一个*USRPRF对象被加入时,该User Profile就变成了一个GroupProfile。而被加入的User Profile则成为成员用户(Member)。
在IBM i中,支持一个UserProfile可以同时属于最多16个组,并且只有1个组能成为Group Profile,余下的则为SupplementalGroup Profile。
与Unix,Windows等操作系统一样,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资源安全性的相关支持。
作者: double_life 时间: 2012-12-29 17:03
本帖最后由 double_life 于 2012-12-29 17:13 编辑
IBM Java Toolbox for i实现IBM i的资源安全性作为IBM i提供的另一安全保护级别,资源安全性讨论的范畴是对象权限与文件权限。一方面,不同于文件系统为中心的Windows与Unix,IBMi是一种面向对象的操作系统。另一方面,为与Windows与Unix兼容,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的对象权限
从面向对象程序设计的角度,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的目的是效仿Windows,Unix文件系统。从面向对象的角度看,IFS的类型主要有两种,分别是对象类型为*DIR的文件夹与对象类型为*STMF的文件。
要查看文件的权限,最直接的方式是采用QShell的ls命令,如图3所示:
图 3. QShell查看/home/user1.policy的文件权限
我们看到,文件user1.policy的所有者、用户组,以及其它用户对应的权限均为RW,没有执行权限。另一种查看文件权限的方式是执行CL命令Work with Authority (WRKAUT),如图4所示:
图 4. CL查看/home/user1.policy的文件权限
从面向对象程序设计的角度,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安全支持工作。
参考资源
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) |
Powered by Discuz! X3.2 |