副标题#e#
引言
漫衍式打点事情组(Distributed Management Task Force,DMTF)是一个领 导开拓和采用打点尺度的行业组织。DMTF 的打点技能对付加强企业内部利用的 多厂商的东西之间的互操纵性起到要害浸染。通过在殽杂系统情况内陈设切合 DMTF 尺度的打点应用,客户可以举办统一打点,有效低落打点的巨大度和本钱 。
DMTF 已经针对差异的打点规模拟定和宣布了一系列打点 Profile。譬喻针对 软件规模的 Software Inventory Profile 等。这些 Profile 运用通用信息模 型(Common Information Model,CIM)来描写打点工具,以面向工具的要领构 建受管工具类,接洽,属性,操纵等。本文示譬喻何把 Role Based Authorization Profile 运用到 IBM i 系统长举办权限打点,并团结 Standards Based Linux Instrumentation for Manageability(SBLIM)开拓东西 包展示如何开拓打点接口。
IBM i 上的用户脚色和权限
IBM i界说了 5 种脚色和 8 个权限,这些脚色和权限之间存在着如表 1 所 示的默认的对应干系。QSECURITY 是一个暗示安详级此外系统值,在差异的安详 级别上脚色对应的权限也有相应的不同。IBM i 支持用户修改默认权限,譬喻, 在 QSECURITY 为 10 的环境下,用户 A 被授予 USER 脚色,那么用户 A 应该 默认拥有 *ALLOBJ 和 *SAVSYS 两个权限,但也答允为用户 A 特别授予 *SECADM 权限,这种权限的定制只范围于当前用户。
表 1. IBM i 脚色和权限对应干系表
Role | Privileges | |
QSECURITY level 10 or 20 | QSECURITY level 30 or above | |
USER | "*ALLOBJ", "*SAVSYS" | |
SYSOPR | "*ALLOBJ", "*SAVSYS", "*JOBCTL" | "*SAVSYS", "*JOBCTL" |
PGMR | "*ALLOBJ", "*SAVSYS", "*JOBCTL" | |
SECADM | "*ALLOBJ", "*SAVSYS", "SECADM", "*JOBCTL" | "*SECADM" |
SECOFR | "*ALLOBJ", "*AUDIT", "*IOSYSCFG", "*JOBCTL", "*SAVSYS", "SECADM", "*SERVICE", "*SPLCTL" | "*ALLOBJ", "*AUDIT", "*IOSYSCFG", "*JOBCTL", "*SAVSYS", "SECADM", "*SERVICE", "*SPLCTL" |
基于脚色授权 Profile
图 1 显示了 DMTF 基于脚色授权 Profile 的类以及他们之间的接洽。个中 类 Role 用来建模脚色,类 Privilege 用来建模权限,这两个类之间利用关联 类 MemberOfCollection 来暗示表 1 中的对应干系。类 Identity 用来暗示账 号,用户可能用户组的安详署理,为用户产生脚色或权限验证等操纵提供安详相 关的信息。在 Identity 和 Role 之间的关联类 MemberOfCollection 用来辅佐 发明一个用户拥有的脚色。类和类之间的干系可分为两种,个中赤色线条代表关 联干系,绿色线条暗示组合或包括干系;类和类存在一对一,一对多和多对多等 环境。
图 1. 基于脚色授权 Profile 的类图
#p#副标题#e#
类 RoleBasedAuthorizationService 声明白 Profile 支持的内部操纵和外 部要领。这些要领为打点应用提供了修改用户权限的手段。从实现者的角度,可 以有选择的支持这些要领。这些要领主要有:
CreateRole(),建设具有非凡权限的新脚色
DeleteRole(),删除一个脚色
ModifyRole(),修改脚色及其具有的权限
AssignRole(),授予用户某个脚色
ShowAccess(),查询用户权限
ShowRoles(),查询用户脚色
以 ModifyRole() 要领为例,该要领需要一个 Role 的实例和若干 Privilege 的实例作为输入参数,这些实例是通过关联类 ServiceAffectsElement 来获得的,ServiceAffectsElement 用来查询支持 RoleBasedAuthorizationService 类上的要领的脚色和权限的荟萃。
作为 Profile 的利用者,如何得知以上要领是否被支持呢?类 RoleBasedManagementCapabilities 中的属性 SupportedMethods 中包括了已经 实现的要领。在挪用 RoleBasedAuthorizationService 中相应的要领前,应该 先查询 RoleBasedManagementCapabilities 的 SupportedMethods 中是否已经 支持了该要领。
用户权限打点
#p#分页标题#e#
由于代表权限的类 Privilege 和代表用户的类 Identity 之间并未存在直接 的接洽,为了发明一个用户的权限,需要通过该用户的脚色,即通过两次 MemberOfCollection 关联干系来获得用户的权限,这也说明权限的组合界说了 脚色。在默认环境下,一个通用的脚色应该拥有牢靠的众所周知的某些权限,例 如表 1 中的 5 种脚色都属于通用的脚色。如果有一个用户 A,我们想赋予他 *ALLOBJ 和 *SAVSYS 权限,那么我们为他指定一个通用的 USER 脚色即可。如 图 2 所示:
图 2. 利用系统通用脚色举办权限打点
但思量以下环境:假如我们同时想授予用户 A 一个 *SECADM 权限,但不幸 的是没有一个通用的脚色同时拥有且只拥有这三个权限,那么基于脚色授权 Profile 是怎么处理惩罚这种环境呢?
方法一:建设新的通用脚色
基于脚色授权 Profile 答允建设拥有客户化权限的新的通用脚色。一个具有 以上三种权限的脚色被建设和指定给用户 A 即可,同时该脚色生存在系统中并 可以指定给其他用户。这样通过 MemberOfCollection,一个 Identity 类的实 例不再关联到通用脚色 USER 而是新建的脚色,通过该新脚色就能获取用户 A 的 3 个权限。遗憾的是在 IBM i 上并不支持建设新脚色,所以这种方法不合用 于 IBM i。
图 3. 通过建设新的通用脚色举办权限打点
方法二:专有的脚色
在这种方法下,用户 A 通过 ConcreteDependency 关联到一个专门用于用户 A 的脚色,这个脚色不能应用到其他用户,该脚色关联 3 个权限。这个专门的 脚色存在的前提是没有通用的脚色可以表达用户的权限。这样客户化的权限可以 单独授予每个用户。请留意专有脚色和 Identity 之间利用的毗连类是 ConcreteDependency 而非 MemberOfCollection 以区分专有脚色和通用脚色。
图 4. 通过专有脚色举办权限打点
在实现进程中,这两种权限打点方法可以同时存在。
基于脚色授权 Profile 的应用示例
基于 Profile 开拓打点应用措施的长处是流程和接口的尺度化。固然在系统 一侧,由于地址平台的差别,结构 Profile 中每个类的实例需要依赖平台相关 的代码,但假如支持了 Profile,那么在构建用户接口即 Console 侧,凭据 Profile 的用例来对这些打点数据的提取和利用,可以省略接口协商进程和做到 平台无关。
下面的代码利用到了 SBLIM 提供的开拓包,SBLIM 是 IBM 提倡的旨在 GNU/Linux 上打点尺度化的一个开源项目。SBLIM CIM Client for Java 是一个 Linux 客户应用框架,也可用于对切合 DMTF 打点尺度的其他平台上的打点应用 实现举办测试。
清单 1. 利用 SBLIM 开拓包构建打点措施实例
import org.sblim.wbem.cim.CIMClass;
import org.sblim.wbem.cim.CIMDataType;
import org.sblim.wbem.cim.CIMException;
import org.sblim.wbem.cim.CIMInstance;
import org.sblim.wbem.cim.CIMObjectPath;
import org.sblim.wbem.cim.CIMNameSpace;
import org.sblim.wbem.cim.CIMProperty;
import org.sblim.wbem.cim.CIMValue;
import org.sblim.wbem.client.CIMClient;
import org.sblim.wbem.client.PasswordCredential;
import org.sblim.wbem.client.UserPrincipal;
……
UserPrincipal cimPrinciple = new UserPrincipal ("JINGLEI");
String password = "password";
PasswordCredential cimCredential = new PasswordCredential (password.toCharArray());
CIMNameSpace cimNamespace =
new CIMNameSpace("http://CD06070C.CN.IBM.COM:5988", "root/cimv2");
CIMClient cimClient =
new CIMClient(cimNamespace, cimPrinciple, cimCredential, CIMClient.CIM_XML);
CIMObjectPath aPath = new CIMObjectPath("CIM_Identity", "root/cimv2");
Enumeration instNames = cimClient.enumerateInstanceNames (aPath);
while(instNames.hasMoreElements())
{
CIMObjectPath eachEnumPath = (CIMObjectPath) instNames.nextElement();
Enumeration assoNames = cimClient.associatorNames (eachEnumPath,
"CIM_ConcreteDependency",null,null,null);
while(assoNames.hasMoreElements())
{
CIMObjectPath retPath = (CIMObjectPath) assoNames.nextElement();
Enumeration assoInsts = cimClient.associatorNames (retPath,
"CIM_MemberOfCollection", null, null, null);
while(assoInsts.hasMoreElements())
{
CIMObjectPath path = (CIMObjectPath) assoInsts.nextElement();
String privilege = path.getKey ("InstanceID").getValue().toString();
}
}
}
……
措施片段阐明 :
#p#分页标题#e#
本措施用来遍历 CD06070C.CN.IBM.COM 呆板上用户及其权限。CIMClient 是 SBLIM 提供的用于和打点应用处事器端举办通信的类,用来向处事一侧请求打点 工具信息。它封装了底层的通信毗连成立 , 动静发送吸收等根基成果。打点对 象的信息利用类 CIMObjectPath 来封装,cimClient.enumerateInstanceNames (aPath) 操纵将获取所有 CIM_Identity 类的实例,而 CIM_Identity 是 DMTF 界说的用来建模系统帐户的类,即该操纵将获取 IBM i 上所有系统帐户的实例 。对付每一个帐户 , 为了获得其对应的权限 , 参照图 4 的权限打点建模方法 , 首先通过关联类 CIM_ConcreteDependency 获得该用户的脚色 CIM_Role 的实 例。cimClient.associatorNames 实现从 CIM_Identity 到 CIM_Role 的映射。 在得到了用户脚色之后,再通过 cimClient.associatorNames 和关联类 CIM_MemberOfCollection 找到这个脚色拥有的权限 , 即 CIM_Privilege 的实 例。权限值放在 InstanceID 属性里 , 可以通过 CIMObjectPath 的 getKey 方 法提取。
竣事语
Profile 的呈现敦促了漫衍式情况下系统打点应用的尺度化历程。今朝, DMTF 已经宣布了几十个打点 Profile,内容设计软件,硬件,网络,虚拟化等 方面。跟着 Profile 的应用不绝深入,单点式的跨平台的系统打点软件将日趋 风行。