基于LAMP架构的Web权限控制组件的设计与实现2012-09《电信工程技术与标准化》
储晨曦1,2,王纯1,2,李炜1,2
(1. 北京邮电大学网络与交换技术国家重点实验室,北京100876)
(2.东信北邮信息技术有限公司 北京100191)
摘要:设计并实现了一种LAMP(Linux、Apache、MySQL、PHP)架构下的权限控制组件,该组件采用基于角色的访问控制模型(RBAC),实现Web应用的权限认证控制。权限控制组件主要包含权限管理模块、角色管理模块和权限认证模块三个主要部分,其中权限认证模块是整个组件的核心,其将权限细分为操作权限和资源权限的方式不仅很好的避免了权限表急剧膨胀的问题,而且使得授权流程更加简单和高效。
关键字:RBAC,权限认证,权限管理,角色管理,LAMP
Design and Implementation of Web Privilege Control Component Based on LAMP
Chu Chenxi1,2,Wang Chun1,2,Li Wei1,2
(1. State Key Laboratory of Networking and Switching Technology,Beijing University of Posts and Telecommunications,Beijing 100876)
(2. EBUPT Information Technology Co. Ltd.,Beijing 100191)
Abstract:This paper designs and realizes an privilege control component based on LAMP(Linux、Apache、MySQL、PHP), which uses Role-Based Access Control (RBAC)model, to realize the privilege authentication control of Web applications. The component includes privilege management module, role management module and privilege authentication module, and the core of the entire component is the privilege authentication module, which devide the privilege into operation privilege and resource privilege. It is not only a good way to avoid the rapid expansion of the permissions table, but also makes the authentication process more simple and efficient.
Key word: RBAC, Privilege Authentication, Privilege Management, Role Management, LAMP
1 引言
21世纪随着互联网和信息技术的不断发展,产生了一系列的Internet应用,用户可访问的数据资源的结构日益复杂,资源规模日益增大,各类Web系统都面临着对数据资源进行有效安全管理的难题,在充分共享资源的同时更要求受保护资源不受侵犯,这就要求系统必须能够进行权限的管理和控制[1]。访问控制作为网络安全防范的和保护的核心策略,它的主要任务是保证网络资源不被非法使用和访问,传统应用系统通过用户名+密码的方式来实现访问控制的策略,由于其没有资源的概念,扩展性和通用性弱,管理效率低下等缺点,在现今的大型系统中越来越难以胜任。基于资源的访问控制在大型的Web系统的设计与开发中占有越来越重要的地位,作为系统底层的技术支撑,访问控制需要满足不同主体对不同资源客体的访问权限控制,现如今大多数的Web应用是基于LAMP(Linux、Apache、MySQL、PHP)架构,在该架构下的权限控制组件越来越成为现实的需要。
2 基础模型
访问控制就是保障信息资源的安全,它是一种通过某些途径控制或者限制访问能力及其访问范围的方法。访问控制是为了限制访问主体对访问客体(需要保护的资源)的访问权限,基本的访问控制策略有自主访问控制(DAC)和强制访问控制(MAC)[2]。
自主访问控制是访问控制中最常见的一种方式,自主访问控制是在确认主体身份以及它们所属的组的基础上,控制主体的活动,实施用户权限管理、访问属性(读、写、执行)管理等。DAC的主要特征体现在主体可以自主地把自己所拥有客体的访问权限授予其它主体或者从其它主体收回所授予的权限,访问通常基于访问控制表(ACL),但是访问控制表的修改异常困难,采用ACL机制管理授权处于一个较低级的层次,管理复杂、代价高以至易于出错。
强制访问控制用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问到那些被标明可以由他访问的信息的一种访问约束机制。通俗的来说,在强制访问控制下,用户(或其他主体)与文件(或其他客体)都被标记了固定的安全属性(如安全级、访问权限等),在每次访问发生时,系统检测安全属性以便确定一个用户是否有权访问该资源。由于强制访问需要为每一条资源添加权限标签,数据冗余十分巨大,对于大量数据的管理也会比较复杂。
基于角色的权限访问控制策略(Role Based Access Control,RBAC) [3]采用权限和角色相关联,用户通过成为适当角色的成员而得到权限的方式极大的简化了权限的管理,如图1所示。
图1 RBAC模型图
在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What(Which)进行How的操作”。
l Who:权限的拥用者或主体(如Principal、User、Group、Role、Actor等等)
l What:权限针对的对象或资源(Resource、Class)。
l How:具体的权限(Privilege,正向授权与负向授权)[4]。
l Operator:操作。表明对What的How操作。也就是Privilege+Resource
l Role:角色,一定数量的权限的集合。权限分配的单位与载体,目的是隔离User与Privilege的逻辑关系.
l Group:用户组,权限分配的单位与载体。权限不考虑分配给特定的用户而给组。组可以包括组(以实现权限的继承),也可以包含用户,组内用户继承组的权限。User与Group是多对多的关系。Group可以层次化,以满足不同层级权限控制的要求[5]。
基于RBAC模型易用和高效的授权方式、简便和高效的授权模型维护等优点本文选取RBAC模型作为主要的实现模型。
3 权限控制组件的设计
3.1 设计思路
现如今的Web应用中资源的数量和类型都成爆炸式增长,如何统一管理和控制这些不同类型资源的访问成为Web应用开发中的一个重要话题,另外现如今Web应用对用户群体进行了细分,这就要求不同用户主体对不同的资源享有不同的操作权限,因此Web应用必须具备一个基于不同用户角色的权限管理组件作为底层支撑。如图2所示:
图2 应用权限控制组件结构图
权限控制组件必须能够针对不同的用户主体进行细分,并能够针对不同的用户主体群配置不同的操作权限集合,在资源层面能够实现针对不同用户主体对不同资源的访问控制,本文就是在此需求的基础上实现一个扩展性高、可移植性强、配置性高的访问控制组件来实现对用户访问请求的权限管理和控制。
3.2 功能模块设计
如图3所示,访问控制组件主要包括三个主要的模块:权限管理模块、角色管理模块和权限验证模块。权限管理模块主要是针对权限进行相应的添加、删除、授予等操作,其中权限授予主要是赋予不同的角色授予不同的操作权限,除此之外权限授予还包括资源范围的指定;角色管理模块主要是针对角色进行添加、删除、授予等操作,其中角色授予是为不同的用户赋予不同的角色,以此角色为关联来赋予不同的用户主体相应的操作权限;权限验证模块则是验证用户主体对于资源客体的操作请求是否具备相应的权限。
图3 访问控制组件功能模块图
3.3 权限控制流程设计
在基于角色的权限控制模型的基础之上本文将权限控制中的权限分为两个方面:基于内容的权限和基于操作的权限。在针对资源内容的操作上,例如对某一资源客体的删除、增添、更新等,由两方面共同决定,只有在用户主体同时拥有该内容权限和操作权限,方可对其进行操作。而不针对资源客体的操作,例如统计管理、组管理等仅由操作权限决定即可。在标准的RABC上对基于内容的权限和基于操作的权限做笛卡尔积[6], 即为即为每一个栏目对应的操作构成一项权限,这样的好处是权限的粒度足够小,但是会使得权限的数量随着资源客体的增加而急剧膨胀,当资源客体过多的时候会使得权限繁杂并且权限的管理变得混乱,所以我们采取内容和操作分开的处理方式,虽然在粒度上稍显粗放,当时很好的避免了权限表急剧膨胀的问题。基于以上分析权限认证的基本流程如图4所示:
图4 权限控制流程图
a) 为了简化权限认证的流程引入了超级用户角色的概念,当发现请求用户主体属于超级用户直接认证通过。
b) 用户主体的请求为对某一资源的操作时,在验证用户所属角色是否具有操作权限的基础上,需要进一步判定该资源是否在用户所辖资源范围内才能认证通过。
c) 对于认证结果的处理上,由于Web应用除了了一般的页面请求,还存在Ajax请求,权限控制组件为了提供统一结果集采用了状态码的方式返回认证结果。
4 权限控制组件的实现
该权限控制组件的数据表ER图如图5所示。根据ER图,该组件的实现分为如下两部分。
a) 操作权限认证的实现
针对用户的请求,提取其具体操作(如增、删、改、查等),从用户表(user)获取用户的角色,并从角色-操作权限表(user2column)中查询角色的相关权限,如果角色的权限集包含该操作则认证通过。
图5 数据表ER图
b) 资源权限认证的实现
当操作权限认证通过以后,查询用户所辖资源范围,具体流程如下:
1) 获取请求资源所属的资源目录(column)。
2) 查询用户-资源目录映射表(user2column),如找到映射关系则验证通过,否则进入第3步。
3) 获取该资源目录的父目录,并回到第2步。如父级目录为空,则认证失败。
5 结束语
本文设计并实现了一种LAMP架构下的权限控制组件,力图为权限认证提供统一化的解决方案。使用该组件只需要通过简单的配置便可实现大多数Web应用对于权限认证控制方面的需要,使得开发者可以投入更多的精力专注于业务逻辑的处理,加快了开发效率。
参考文献
[1] Ping Ni, Jianxin Liao, Chun Wang, Keyan Ren, Web Information Recommendation Based on User Behaviors, CSIE2009, Los Angeles, USA, March 31-April 2, 2009, pp426-430
[2] Sandhu R, Coyne E J, Feinstein H L, et al. Role-based Access Control Models. IEEE Computer, 1996, 29(2) .
[3] BARKLEY J F, CINCOTTA A V, FERRAIOLO D F, et al. Role Based Access Control for the World Wide Web[A]. NIST/NCSC, Proc 20th NIST-NCSC National Information Systems Security Conference[C]. USA: NIST/ NCSC, 1997.
[4] 吴波,王晶. 基于基本RBAC模型的权限管理框架的设计与实现. 计算机应用系统,2011, 20(4):50-54.
[5] 宋善德,刘 伟. 基于任务-角色的访问控制模型[J]. 计算机工程与科学,2005,27 (6):4-9.
[6] 叶锡君,许勇,吴国新. 基于角色访问控制在Web 中的实现技术[J]. 计算机工程,2002,28(1):167 - 169.