程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 使用DMTF標准的Profile管理IBM i用戶權限

使用DMTF標准的Profile管理IBM i用戶權限

編輯:關於JAVA

引言

分布式管理工作組(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 的類圖

類 RoleBasedAuthorizationService 聲明了 Profile 支持的內部操作和外 部方法。這些方法為管理應用提供了修改用戶權限的手段。從實現者的角度,可 以有選擇的支持這些方法。這些方法主要有:

CreateRole(),創建具有特殊權限的新角色

DeleteRole(),刪除一個角色

ModifyRole(),修改角色及其具有的權限

AssignRole(),授予用戶某個角色

ShowAccess(),查詢用戶權限

ShowRoles(),查詢用戶角色

以 ModifyRole() 方法為例,該方法需要一個 Role 的實例和若干 Privilege 的實例作為輸入參數,這些實例是通過關聯類 ServiceAffectsElement 來得到的,ServiceAffectsElement 用來查詢支持 RoleBasedAuthorizationService 類上的方法的角色和權限的集合。

作為 Profile 的使用者,如何得知以上方法是否被支持呢?類 RoleBasedManagementCapabilities 中的屬性 SupportedMethods 中包含了已經 實現的方法。在調用 RoleBasedAuthorizationService 中相應的方法前,應該 先查詢 RoleBasedManagementCapabilities 的 SupportedMethods 中是否已經 支持了該方法。

用戶權限管理

由於代表權限的類 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();
     }
   }
  }
……

程序片斷分析 :

本程序用來遍歷 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 的應用不斷深入,單點式的跨平台的系統管理軟件將日趨 流行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved