金京犬,楊 憶(.安徽郵電職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)系,合肥 3003;.淮北師范大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 淮北 35000)
基于SELinux用戶角色管理機(jī)制的改進(jìn)探討
金京犬1,楊憶2
(1.安徽郵電職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)系,合肥 230031;2.淮北師范大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 淮北 235000)
針對(duì)SELinux對(duì)用戶身份管理功能存在安全隱患,將Linux組概念作為SELinux身份確定可選項(xiàng),提出了解決不同用戶之間不能靈活分配相同的角色集問(wèn)題、用戶在不同的角色之間設(shè)置轉(zhuǎn)換模式不靈活問(wèn)題及安全隱患問(wèn)題的方法。
SELinux;RBAC;SELinux安全體系結(jié)構(gòu);用戶角色管理
SELinux(Security Enhanced Linux)由美國(guó)國(guó)家安全局(NSA)在2001研發(fā)的一個(gè)增強(qiáng)型安全模塊,當(dāng)時(shí)NSA的主席就建議SELinux加入到Linux2.5內(nèi)核中,由于有很多關(guān)于Linux安全模塊的機(jī)制正在構(gòu)建中,Linux的創(chuàng)始人Linus Torvald并沒(méi)有接受這個(gè)建議,只是決定做一個(gè)“統(tǒng)一可加載安全模塊”。SELinux經(jīng)過(guò)2 a的開(kāi)發(fā),到2003年12月,Linux安全模塊(LSM)真正成為L(zhǎng)inux2.6內(nèi)核標(biāo)準(zhǔn),到2006年為止,只有SELinux依舊遵守LSM所有標(biāo)準(zhǔn),SELinux順利成章的成為了Linux安全機(jī)制的代表。SELinux安全增強(qiáng)機(jī)制實(shí)現(xiàn)了基于用戶角色訪問(wèn)的控制機(jī)制(RBAC)、類型增強(qiáng)模型(TE)和可選的多級(jí)訪問(wèn)控制機(jī)制(MLS)。TE模型為SELinux機(jī)制提供了最小特權(quán)機(jī)制,RBAC模型是在TE模型的基礎(chǔ)上建立起來(lái)的,簡(jiǎn)化了用戶的高層次管理[1-2]。
SELinux是在Linux2.6內(nèi)核中額外加入的一個(gè)系統(tǒng)安全層,其主要目標(biāo)是防止已經(jīng)遭泄露的系統(tǒng)服務(wù)訪問(wèn)用戶數(shù)據(jù)。SELinux采用的安全體系結(jié)構(gòu)是Flask結(jié)構(gòu),如圖1所示,F(xiàn)lask結(jié)構(gòu)由安全服務(wù)器、訪問(wèn)向量緩存(AVC)、對(duì)象管理器3個(gè)部分組成。安全服務(wù)器是一個(gè)獨(dú)立邏輯單元的安全策略和通用接口封裝在一起形成的,對(duì)象管理器是詳細(xì)描述安全策略判定結(jié)果的單元,訪問(wèn)向量緩存位于安全服務(wù)器和對(duì)象管理器中間,主要是把安全服務(wù)器上的一些安全策略提供給對(duì)象管理器應(yīng)用。
SELinux用戶角色控制模型即 RBAC (Role-Based Access Control)模型[3-4],是由美國(guó)Ravis.sandhu教授提出的安全策略模型家族RBAC96,它由基本的RBAC0模型,等級(jí)RBAC1模型,約束RBAC2模型,組合RBAC模型組成?;镜腞BAC模型主要有4個(gè)組成部分:用戶,角色,權(quán)限,會(huì)話。RBAC控制模型如圖2所示。
圖1 Flask安全體系結(jié)構(gòu)
圖2 RBAC模型
RBAC模型的基本思想是授權(quán)用戶的訪問(wèn),通常起到一個(gè)組織中的用戶確定的作用。RBAC授權(quán)授予角色,角色授權(quán)給用戶,用戶不直接與許可關(guān)聯(lián)。RBAC權(quán)限的管理由管理員統(tǒng)一執(zhí)行,RBAC根據(jù)用戶在組織內(nèi)的角色進(jìn)行授權(quán)和訪問(wèn)控制、授權(quán)規(guī)則強(qiáng)加給用戶,用戶無(wú)法自主訪問(wèn)傳遞給其他人,這是一個(gè)非自治的集中訪問(wèn)控制模式。
在RBAC用戶角色控制模型中,當(dāng)每一個(gè)用戶進(jìn)入系統(tǒng)取得操作控制權(quán)時(shí)候,就會(huì)得到一個(gè)會(huì)話用戶和角色之間的關(guān)系,如果用戶想獲得某個(gè)操作權(quán)限就必須通過(guò)會(huì)話機(jī)制激活。
Linux操作系統(tǒng)中的用戶身份有3類,第一類是特權(quán)用戶root,它享有無(wú)限的權(quán)限;第二類是系統(tǒng)用戶,改類系統(tǒng)是不能登錄用來(lái)登錄系統(tǒng)的;第三類就是普通用戶,該類用戶的權(quán)限有被約束。為了保證Linux操作系統(tǒng)的安全,Linux的用戶,密碼和組分別存放在/etc/passwd、/etc/shadow、/etc/group文件中。
在SELinux實(shí)現(xiàn)中,SELinux用戶身份與原有的Linux用戶身份是2個(gè)獨(dú)立的個(gè)體,SELinux訪問(wèn)控制體系與原有的Linux訪問(wèn)控制體系不同,雖然他們共存于同一個(gè)系統(tǒng)中,但是差別也是非常大的,SELinux用戶身份是一種安全上下文中的安全屬性,它主要是對(duì)主體進(jìn)入什么樣的邏輯空間(域)產(chǎn)生影響。主要有3類SELinux的用戶身份類型,第一種是用system_u表示的系統(tǒng)進(jìn)程和客體的身份;第二種是user_u表示的尚未定義的SELinux身份;第三種是用Linux系統(tǒng)本身的用戶名代表Linux 和SELinux對(duì)應(yīng)的用戶身份。
當(dāng)?shù)卿汱inux操作系統(tǒng)的時(shí)候,如果用戶存在,用戶(用戶名)都會(huì)被設(shè)定成一個(gè)SELinux身份,該身份定義了它能使用的角色。根據(jù)角色用戶被賦予默認(rèn)的安全上下文,如果有多個(gè)安全上下文,則有用戶自行確定選擇哪種。如果在安全策略庫(kù)中沒(méi)有與用戶名對(duì)應(yīng)的用戶申明規(guī)則,則使用缺省的SELinux身份(user_u)。SELinux用戶身份屬性確定過(guò)程如圖3所示。
圖3 SELinux身份確定過(guò)程
從現(xiàn)有的SELinux運(yùn)行情況來(lái)看,SELinux用戶身份屬性確定過(guò)程存在一些問(wèn)題
(1)在不同用戶之間不能靈活分配相同的角色集[5]。大型系統(tǒng)中需要用戶和角色數(shù)量非常多,按照目前的SELinux用戶確定過(guò)程來(lái)看,如果不考慮默認(rèn)規(guī)則的話,需要為每一個(gè)用戶申請(qǐng)相應(yīng)的用戶申明規(guī)則,這樣顯得非常繁瑣和麻煩。
(2)用戶在不同的角色之間設(shè)置轉(zhuǎn)換模式不靈活并且有安全隱患。完成一個(gè)工程項(xiàng)目,一個(gè)用戶需要多個(gè)角色集,根據(jù)現(xiàn)有的方式,或在每次重寫(xiě)用戶指定的規(guī)則和重新加載安全策略,或?qū)⒂脩羲械慕巧卸紝?xiě)入用戶申明規(guī)則里。這樣一來(lái)就不能遵循RBAC模型的最小特權(quán)原則,從而導(dǎo)致用戶獲取多余的權(quán)限,致系統(tǒng)不穩(wěn)定不安全。
針對(duì)上述可能存在的2個(gè)問(wèn)題,通過(guò)引入組概念到SELinux身份確認(rèn)過(guò)程,把用戶所在的主組和附屬組捆綁使之成為SELinux身份的選擇項(xiàng),改進(jìn)的SELinux身份確認(rèn)過(guò)程如圖4所示。當(dāng)加入Linux組作為SELinux用戶身份驗(yàn)證時(shí),可以為每個(gè)組指定相應(yīng)的安全策略,即將組名和角色做一個(gè)映射關(guān)系,把相同的角色集集中加入到同一個(gè)組中,而不需要為每一個(gè)用戶指定相應(yīng)的用戶申明規(guī)則,這就解決了在不同用戶之間不能靈活分配相同的角色集問(wèn)題。
圖4 改進(jìn)的SELinux身份確認(rèn)過(guò)程
通過(guò)新建多個(gè)組,同時(shí)為它們把不同角色的用戶申明規(guī)則寫(xiě)入到安全策略上下文中,當(dāng)用戶在不同角色集中切換身份時(shí),不需要為不同角色集重寫(xiě)用戶申明規(guī)則和重加載安全策略,只需要添加用戶到主組或者附屬組就可以了。如果不需要用戶擁有某個(gè)角色集的時(shí)候,只需要從組中把用戶刪除即可。這就解決了用戶在不同的角色之間設(shè)置轉(zhuǎn)換模式不靈活并且有安全隱患的問(wèn)題。
在SELinux的實(shí)現(xiàn)系統(tǒng)中,將用戶名與SELinux用戶身份關(guān)聯(lián)并確定安全上下文的工作主要是由登錄的login進(jìn)程初始化完成的,由SELinux模塊中的pam_selinux.so模塊的pam_sm_open_session()等函數(shù)來(lái)實(shí)現(xiàn)的,并在此基礎(chǔ)上修改進(jìn)和擴(kuò)展該函數(shù)。另外由于把組名作為SELinux身份確定的一個(gè)特點(diǎn),需要新增一個(gè)組名選擇函數(shù)selectAdd_group_context()。該函數(shù)的執(zhí)行過(guò)程是:
第1步:根據(jù)列表*supgrouplist[]第一項(xiàng)的值獲取用戶所屬的主組名。
第2步:詢問(wèn)用戶是否顯示其他的組名,如果是,則進(jìn)入第3步,否則顯示主組名。
第3步:根據(jù)提示選擇組名,并把結(jié)果返回。
pam_sm_open_session函數(shù)偽代碼如下:
pam_sm_open_session()
{
調(diào)用pam_get_item()函數(shù)獲取會(huì)話的函數(shù)指針
{
if是根據(jù)有用戶確定SELinux身份
調(diào)用get_order_context_list()函數(shù),用戶名和安全上下文關(guān)聯(lián)
if根據(jù)組名確定SELinux身份
{
fopen組文件/etc/group,并從中讀取記錄
求用戶的附屬組的個(gè)數(shù);
求對(duì)應(yīng)該用戶的主組名;
}
調(diào)用selectAdd_group_context()函數(shù);
求該組名相對(duì)應(yīng)的安全上下文;
}}
SELinux用戶管理其實(shí)就是SELinux強(qiáng)制訪問(wèn)控制方面的管理,其核心管理就是對(duì)SELinux用戶身份的相關(guān)管理。SELinux支持的RBAC角色轉(zhuǎn)換模型,靈活的實(shí)現(xiàn)了用戶的強(qiáng)制訪問(wèn)機(jī)制,但是在大型企業(yè)用戶和角色的數(shù)量很大的前提條件下,SELinux角色間的關(guān)系是非常復(fù)雜的,傳統(tǒng)的RBAC角色管理模型不能夠滿足。本文在SELinux身份確認(rèn)過(guò)程中引入了linux組的概念,實(shí)驗(yàn)表明,通過(guò)將Linux組名作為SELinux身份確定的可選項(xiàng),解決了不同用戶之間不能靈活分配相同的角色集問(wèn)題以及用戶在不同的角色之間設(shè)置轉(zhuǎn)換模式不靈活并且有安全隱患的問(wèn)題,更好的增進(jìn)了Linux操作系統(tǒng)的安全性。
[1]SMALLEY S,VANCE C,SALMON W.Implementing SELinux as a Linux Security Module[R].NAI Labs Report.2006.
[2]SANDHURS,COYNEEJ,F(xiàn)EINSTEINHL,etal.RoIe-based Access Control Models[J].IEEE Computer,1996,29(2):38-47.
[3]黃易冬,沈廷芝,朱亞平.SELinux安全機(jī)制和安全目的研究[J].微計(jì)算機(jī)信息,2004(7):115-117.
[4]肖永康,紀(jì)翠玲,謝寶恂,等.SELinux的安全機(jī)制和安全模型[J].計(jì)算機(jī)應(yīng)用,29(S1):66-68.
[5]劉巖.SELINUX的研究與改進(jìn)[D].南京:南京航空航天大學(xué),2010.
Discussion on the Improvement of User's Role Management Mechanism Based on SELinux
JIN Jing-quan1,YANG Yi2
(1.Anhui Post and Telecommunication College,Computer Departments,Hefei 230031,China;
2.School of Computer Science and Technology,Huaibei Normal University,Huaibei,Anhui 235000,China)
This paper discusses the security vulnerability in SELinux's role management.Taking the Linux's group concept as options for identification,the author comes up with relevant solutions to the inflexible assignment of role set and conversion modes among different users as well as to the security vulnerability and this paper have certain references.
SELinux;RBAC;SELinux security architecture;user's role management
TP316.81
A
1673-1891(2016)02-0039-04
10.16104/j.issn.1673-1891.2016.02.012
2016-03-22
安徽省高校自然科學(xué)基金項(xiàng)目“企業(yè)Linux服務(wù)器的安全應(yīng)用研究”(KJ2016A382)。
金京犬(1982—),男,安徽安慶人,碩士,講師,研究方向:嵌入式。
西昌學(xué)院學(xué)報(bào)(自然科學(xué)版)2016年2期