在CISSP的成长之路的上一篇文章《分布式访问控制方法》,J0ker给大家介绍了用于控制用户资源访问的几种分布式访问控制方法。在实际的应用中,我们往往还需要对数据和信息进行更为细致的访问控制,比如,企业需要允许财务部门访问今年上半年的企业详细财务报告,但同时应该拒绝其他部门访问,之前介绍过的集中式或分布式访问控制方法就不太合适应用在这种场景中,这时候,我们就要用到下面提到的几种数据访问控制方法。
在CISSP的CBK中介绍了目前最为常用的5种数据访问控制方法:自主式访问控制(Discretionary Access Control, DAC)、强制访问控制(Mandatory Access Control, MAC)、基于角色的访问控制(Role Based Access Control, RBAC)、基于内容的访问控制(Content Based Access Control, CBAC)和固定界面访问控制(Constrained Interface Access Control, CIAC)。J0ker将在本文和下一个文章中逐个介绍这些数据访问控制方法:
自主式访问控制:自主式访问控制是一种根据用户标识和/或用户所属的组别,对文件及其他系统资源访问进行控制的访问控制方法,由于它主要进行访问控制操作的标准主要基于用户标识和权限分配,此外用户权限的分配是由数据的所有者实施的,因此通常我们也认为DAC也是一种基于访问策略的访问控制方法,这点也是DAC与下面将要提到的MAC最大的区别。在实践中,自主式访问控制通常是通过访问控制矩阵(Access Control Matrix,ACM)和访问控制列表(Access Control List, ACL)来实现的:
我们知道,在计算机和网络系统中,数据和信息的组织形式最多的还是基于文件结构(File Structure)形式,也即数据和信息存储在文件中,而文件则根据一定的分类规则来分到不同的文件夹(目录)中。数据和信息的这种组织形式,使得我们能够很方便的决定某个用户对某个集合(文件或文件夹)的信息有什么样的访问权限,与此同时,其他的用户对这个信息集合有什么样的访问权限,在大多数的操作系统和网络系统中,常常设置以下几种数据访问权限:
表1: 常见的数据访问权限设置
权限描述
无权限或空(Null)该权限的用户无法对指定的文件和资源进行任何类型的访问
读(Read,r)用户可以对指定的文件和资源进行读操作,但不能进行变更操作
写(Write,w)用户可以对指定的文件和资源进行写操作,如进行编辑等
执行(Execute, x)用户可以执行指定的程序
删除(Delete, d)用户可以删除指定的文件和资源
变更(Change,c)用户可以对指定的文件和资源进行读、写和删除操作,但不能改变它的访问权限设置
完全控制(Full Control, f)用户对指定的文件和资源有完全的权限,可以读、写、删除、执行和改变该资源的访问权限设置
自主式访问控制最为重要的特征是资源所有制(Resource Ownership),在某些操作系统中,数据的创建者默认就是数据的所有者。数据的所有者除了拥有该数据的完全控制权限外,还能够对数据的访问控制权限进行设置,如果某个用户不是指定数据的所有者,那他就最多只能操作该数据对象,而不能修改该数据对象的访问控制设置。在一些组织中,系统管理员被默认为所有文件的所有者,系统管理员统一为组织中的用户分配访问权限,这种策略的缺陷主要在于系统管理员可能拥有太大的权限,了解太多他本来不应该了解的信息,因此,提供访问权限的共享控制能够在一定程度上提高数据的安全性。
自主式访问控制在操作系统和网络系统中的表现形式就是访问控制矩阵和访问控制列表,每个用户和每个访问目标之间的关系通过一个矩阵列出,用户为行、访问目标为列,每一行列的交点就是该用户对访问目标的权限,下图是一个简单的访问控制矩阵示例:
表2: 访问控制矩阵示例
Mary的文件夹Bob的文件夹Bruce的文件夹打印机01
Mary完全控制写写执行
Bob读完全控制写执行
Bruce无权限写完全控制执行
Sally无权限无权限无权限无权限
如果是用户和数据的数量非常多,系统需要维护一个巨大的访问控制矩阵,在多个用户同时发起访问请求的时候,将会对系统造成资源的很大开销。因为自主式访问控制是根据访问用户的标识进行的判断的,所以,我们可以设定某些用户允许访问某个数据,并要求系统只在该数据被访问到的时候根据用户允许列表来判读用户是否有权限,这便是访问控制列表的原理。访问控制列表可以看作是访问控制矩阵的简化版,提供了一个控制一个或一组用户对特定数据访问的更简便方法。
强制访问控制:强制访问控制是一种用在处理高敏感性数据的系统中的访问控制方法,和自主式访问控制一样,强制访问控制也属于基于策略的访问控制方法。强制访问控制的最显著特征是,要求对系统中的所有访问者(用户、程序等)和所有资源(文件、数据和设备等)都分配一个安全标识,在访问者要求访问资源时,系统会比较访问者和资源各自的安全等级,在符合安全策略规定的前提下,访问者才能访问资源。安全等级的划分和安全度的控制在强制访问控制实现的设计文档中规定。下图是强制访问控制实现的一个简单示例:
图1:强制访问控制的简单示例
我们来分析一下强制访问控制的特性,它使用安全标签来确定访问者是否可以访问某个资源,因为组织的安全策略规定了安全标签是如何定义的,因此,组织的系统管理员和信息的所有者共同维护强制访问控制的部署,系统管理员部署并维护强制访问控制措施,而信息的所有者负责对信息分配安全标签,并对能够访问该资源的用户进行授权。和自主式访问控制一样,用户要访问某个资源,必须经过该资源所有者的授权(为资源标记合适的安全标签),但强制访问控制还要求用户通过系统基于用户标签的控制这一额外控制措施,从这点上来说,强制访问控制的安全性要比自主式访问控制好。
我们用一个简单的例子来说明强制访问控制是如何运作的:在某个组织中,安全等级从低到高分为3级,公开、雇员、经理。如果一个名为 Report.doc的文件的安全等级为雇员,组织中所有标记为雇员和经理的用户都能够访问这个文件,而组织的客人(标记为公共)则不能访问该文件。这个文件即使是由经理级的用户提交,只要该用户将文件授权为雇员级别就能访问,只要是雇员以上级别的用户就能访问,这也体现了强制访问控制的信息所有者授权这一特性。
强制访问控制的另外一个重要用途是控制信息从其他系统输入或输出到其他系统中,由于信息的输入输出操作往往可能造成未授权的访问,例如一份标记为秘密的文档在一个不安全的打印机上输出。因此,处理高敏感性信息的信息系统往往会使用强制访问控制,来限制信息是如何输入和输出的。