程志羅省賢
(成都理工大學信息科學與技術(shù)學院,四川成都610059)
目前大多數(shù)系統(tǒng)都以專有的方式實現(xiàn)訪問控制和授權(quán),因此不同系統(tǒng)之間很難做到直接交換安全控制信息。而可擴展訪問控制標記語言(XACML)旨在提供一種統(tǒng)一的格式來描述訪問控制信息,能夠很好地解決不同系統(tǒng)之間的交互難題。
XACML是一項由OASIS指導制定的XML規(guī)范,其中定義了一個基于XACML的RBAC框架,但是該框架僅定義了核心RBAC和層次RBAC的策略。由于沒有對受限RBAC進行定義,因此很難在授權(quán)過程中體現(xiàn)最小特權(quán)和責任分離原則。為此,本文通過對XACML的RBAC框架的補充,使之能夠更好地體現(xiàn)RBAC96模型族的特點,并最終在GridSphere門戶中實現(xiàn)了受限RBAC模型。
20世紀90年代期間,大量的專家學者和專門研究單位對RBAC的概念進行了深入研究,先后提出了許多類型的RBAC模型,其中以美國George Mason大學信息安全技術(shù)實驗室(LIST)提出的RBAC96模型最具有系統(tǒng)性,得到普遍的公認。RBAC96是一個模型族,其中包括RBAC0~RBAC3四個概念性模型[1]:
(1)基本模型RBAC0
RBAC0,即核心RBAC,該模型中包括用戶(U)、角色(R)、許可權(quán)(P)和會話集合(S)4類實體集合。
(2)角色分級模型RBAC1
RBAC1,即層次RBAC,該模型中的角色是分級的,不同級別的角色有不同的職責與權(quán)利,角色的級別形成偏序關系。
(3)受限模型RBAC2
RBAC2模型是在RBAC0模型增加限制后形成的,它與RBAC1并不兼容。主要存在兩種限制:互斥角色的限制和角色的基數(shù)限制。
最新的2.0版XACML標準通過定義4種策略集來幫助實現(xiàn)RBAC核心和層次模型[2]:
(1)角色策略集(RPS)
Role<PolicySet>是一個結(jié)合了給定角色的策略集,同時它也包含了對相應角色的權(quán)限策略集(PPS)的引用。
(2)權(quán)限策略集(PPS)
Permission<PolicySet>包含了綁定到某角色的權(quán)限。一個PPS可能包含對其他角色的對應PPS的引用。通過這種方式,可以很方便地實現(xiàn)一個角色對另一個角色的繼承。
(3)角色指派策略集(RAP)
RoleAssignment<PolicySet>定義了對指定的用戶賦予某些指派的角色。
(4)特權(quán)策略集(HPP)
HasPrivilegesOfRole<Policy>表示一個綁定到某角色的用戶具有某種特權(quán)。
受限模型中的互斥角色限制,是指各自權(quán)限可以互相制約的兩個角色。對于這類角色,一個用戶在某一次活動中只能被分配其中的一個角色,不能同時獲得兩角色的使用權(quán),通過該限制可以支持職責分離原則的實現(xiàn)。受限模型中的角色基數(shù)限制是指一個角色可分配的最大用戶數(shù),一旦擁有該角色的用戶數(shù)量超過其角色基數(shù),則不能給申請角色的用戶分配該角色。
在用XACML進行受限模型描述時,將所有的互斥角色寫入到一個互斥角色策略集中,其中一對互斥角色為其策略集中的一個策略;將所有的角色以及其基數(shù)寫入到一個角色基數(shù)策略集中,其中一個策略對應一個角色和其基數(shù)。當用戶請求激活一個角色時,將先訪問角色基數(shù)策略集,根據(jù)角色匹配到某個策略上,如果返回的是permit,則說明該用戶激活角色成功,此時,應將策略中的基數(shù)減1;當用戶請求激活第二個角色時,也要先訪問角色基數(shù)策略集,如果返回的是permit,則還需要查找互斥角色策略集,若返回結(jié)果為deny,則說明用戶的兩個角色跟該策略集中的一個策略相匹配,第二個角色激活失敗。
假設前兩個角色都激活成功,當用戶請求第三個角色時,訪問角色基數(shù)策略集也返回的是permit,則需要將這個角色與前面兩個角色分別組成一對訪問互斥角色策略集,只要兩次返回的都是permit才能激活該角色;后面的角色請求過程以此類推。
以互斥角色策略集和角色基數(shù)策略集為例的XACML描述方法如下:
GridSphere門戶提供了一個基于portlet的功能強大的開源門戶,它是由歐盟提供資金支持的GridLab項目組負責開發(fā)的[3]。GridSphere門戶的體系結(jié)構(gòu)充分體現(xiàn)了服務的思想,其中portlet是以插件的形式運行在該門戶中來向用戶提供不同的服務。
由于GridSphere已經(jīng)對RBAC提供了內(nèi)置的支持,并采用數(shù)據(jù)庫的形式保存了用戶、角色和權(quán)限,但是,以數(shù)據(jù)庫表的形式來描述權(quán)限很難體現(xiàn)一些動態(tài)授權(quán)的要求,且表達能力不強,交互性弱。因此,本文采用XACML進行訪問控制來替代數(shù)據(jù)庫的形式,并將XACML策略存儲在具有分布式特點的LDAP服務器中。
本文重點分析和實現(xiàn)XACML的受限RBAC框架的應用,下面以GridSphere門戶中提供注冊功能的portlet來說明該受限框架的應用實例。
(1)建立角色1和角色2,并用XACML描述該角色為互斥角色且每個角色最多只能擁有2個用戶。
(2)建立用戶A、用戶B和用戶C,當為用戶A同時分配角色1和角色2時,根據(jù)XACML策略文件的描述,由于角色1和角色2為互斥角色,該門戶返回deny,拒絕此次操作,如圖1所示。
圖1 互斥角色授權(quán)控制
(3)給用戶A和用戶B分配角色1后,再為用戶C分配角色1,根據(jù)XACML策略文件的描述,由于角色1最多只能擁有2個用戶,該門戶會返回deny,拒絕此次操作,如圖2所示。
本文通過對比基于XACML的RBAC框架與RBAC96模型,發(fā)現(xiàn)其框架的不足之處,通過給出對互斥角色和角色基數(shù)限制的XACML描述,實現(xiàn)了基于XACML的受限RBAC框架,并最終應用在GridSphere門戶的用戶注冊服務中,達到了在給用戶賦予角色時實現(xiàn)職責分離的原則。
圖2 角色基數(shù)授權(quán)控制
[1]NIST.Role based access control[EB/OL].http://csrc.nist.gov/rbac.
[2]OASIS.XACML v3.0 Core and Hierarchical Role Based Access Control(RBAC)Profile Version 1.0.pdf.2006,8.
[3]陳平.用GridSphere開發(fā)Portlet來部署網(wǎng)格服務[A].第十屆全國青年通信學術(shù)會議論文集[C].2005,8.
[4]Jason Novotny.Portlet Development Guide[EB/OL].http://www.gridsphere.org.