权限控制模型

权限控制模型

什么是权限控制

在理解权限控制之前,首先要明白与其相关的三个概念:用户、资源和权限。

首先权限限制的主体是什么?是用户。只要有用户参与的系统都要有权限控制,而权限控制实现地是用户访问系统资源的控制。权限控制代表着,按照安全规则或安全策略,控制用户可以访问而且只能访问自己被授权的资源。什么是资源,对于一个系统来说,系统内所有信息都可以理解为这个系统的资源。页面是资源、数据是资源、按钮是资源、图片是资源等等。而权限就是访问某个资源所需要的标识,其依赖于用户而存在。无论系统的权限如何设计,在用户登录时,都可以计算用户所拥有的权限标识集合,也就确定了该用户能访问哪些系统资源。

权限控制的本质是控制登录用户对于系统资源的访问,可以细分为一下几种方式:

  • 登录授权,用户没有登录只能访问登录页面,如果处于登录状态则跳转到当前用户的默认首页;

  • 路由授权,当前登录用户的角色,如果对一个 URL 没有权限访问,则跳转到 403 页面;

  • 数据授权,当访问一个没有权限的API,则跳转到 403 页面;

  • 操作授权,当页面中某个按钮或者区域没有权限访问则在页面中隐藏

在前后端分离设计中,通常的做法是由服务端提供权限数据接口,前端根据接口数据做对应的路由拦截控制和页面数据的渲染。其核心授权策略最终在后端完成。

权限控制模型

权限控制,也可以说访问控制,在用户认证通过后,系统对用户访问资源进行控制,当用户具有资源的访问权限方可访问。访问控制的核心是授权策略。以授权策略来划分,访问控制模型可分为:传统的访问控制模型(DAC\MAC\ACL)、基于角色的访问控制(RBAC) 模型、基于任务和工作流的访问控制(TBAC) 模型、基于任务和角色的访问控制(T-RBAC) 模型、 基于对象的访问控制模型(OBAC)、基于属性的权限验证(ABAC)等。

传统的访问控制模型

访问控制列表ACL

介绍

ACL全称Access Control List。在ACL中,包含用户(User)、资源(Resource)、资源操作(Operation)三个关键要素。通过将资源以及资源操作授权给用户而使用户获取对资源进行操作的权限。ACL是最早也是最基本的一种访问控制机制,它的原理非常简单:每一项资源,都配有一个列表,这个列表记录的就是哪些用户可以对这项资源执行CRUD中的那些操作。

当系统试图访问这项资源时,会首先检查这个列表中是否有关于当前用户的访问权限,从而确定当前用户可否执行相应的操作。总的来说,ACL是一种面向资源的访问控制模型,它的机制是围绕“资源”展开的。

优点
  1. 易用和高效的权限校验。几乎不需要任何基础设施就可以实现访问控制。
缺点
  1. 由于需要维护大量的访问权限列表,ACL在性能上有明显的缺陷
  2. 对于拥有大量用户与众多资源的应用,管理访问控制列表本身就变成非常繁重的工作。
  3. 对权限继承不够支持。

自主访问控制DAC

介绍

DAC全称Discretionary Access Control。自主访问控制是指由用户有权对自身所创建的访问对象(文件、数据表等)进行访问,并可将对这些对象的访问权授予其他用户和从授予权限的用户收回其访问权限。

DAC模型一般采用访问控制矩阵(ACM)和访问控制列表(ACL)来存放不同主体的访问控制信息,从而达到对主体访问权限的限制目的。

优点
  1. 授权的实施主体(1、可以授权的主体;2、管理授权的客体;3、授权组)自主负责赋予和回收其他主体对客体资源的访问权限;

  2. 自主访问控制中,用户可以针对被保护对象制定自己的保护策略:

    • 每个主体拥有一个用户名并属于一个组或具有一个角色
    • 每个客体都拥有一个限定主体对其访问权限的访问控制列表(ACL)
    • 每次访问发生时都会基于访问控制列表检查用户标志以实现对其访问权限的控制
  3. 易于扩展和理解。大多数系统仅基于自主访问控制机制来实现访问控制,如主流操作系统(Windows NT Server, UNIX 系统),防火墙(ACLs)等。

缺点
  1. 权限控制比较分散,不便于管理,比如无法简单地将一组文件设置统一的权限开放给指定的一群用户;

  2. 不能防备特洛伊木马的攻击访问控制表;

  3. 当用户数量多、管理数据量大时,ACL 就会很庞大。不易维护

强制访问控制MAC

介绍

MAC全称Mandatory Access Control。MAC是为了弥补DAC权限控制过于分散的问题而诞生的。在MAC的设计中,每一个对象都有一些权限标识,每个用户同样也会有一些权限标识,而用户能否对该对象进行操作取决于双方的权限标识的关系,这个限制判断通常是由系统硬性限制的。比如在影视作品中我们经常能看到特工在查询机密文件时,屏幕提示需要“无法访问,需要一级安全许可”,这个例子中,文件上就有“一级安全许可”的权限标识,而用户并不具有。

MAC是一种强加给访问主体(即系统强制主体服从访问控制策略)的一种访问方式,它利用上读/下写来保证数据的完整性,利用下读/上写来保证数据的保密性。

MAC非常适合机密机构或者其他等级观念强烈的行业,但对于类似商业服务系统,则因为不够灵活而不能适用。

上读/下写 下读/上写
  1. 向下读(rd,read down):主体安全级别高于客体信息资源的安全级别时允许查阅的读操作;

  2. 向上读(ru,read up):主体安全级别低于客体信息资源的安全级别时允许的读操作;

  3. 向下写(wd,write down):主体安全级别高于客体信息资源的安全级别时允许执行的动作或是写操作;

  4. 向上写(wu,write up):主体安全级别低于客体信息资源的安全级别时允许执行的动作或是写操作。

优点
  1. 通过梯度安全标签实现信息的单向流通;

  2. 可以有效地阻止特洛伊木马的泄露。

缺点

主要在于实现工作量较大,管理不便,不够灵活,而且它过重强调保密性,对系统连续工作能力、授权的可管理性方面考虑不足。

基于角色的访问控制模型RBAC

介绍

RBAC全称Role-Based Access Control. 因为DAC和MAC的诸多限制,于是诞生了RBAC,并且成为了迄今为止最为普及的权限设计模型。

RBAC在用户和权限之间引入了“角色(Role)”的概念。每个用户关联一个或多个角色,每个角色关联一个或多个权限,从而可以实现了非常灵活的权限管理。角色可以根据实际业务需求灵活创建,这样就省去了每新增一个用户就要关联一遍所有权限的麻烦。简单来说RBAC就是:用户关联角色,角色关联权限。另外,RBAC是可以模拟出DAC和MAC的效果的。

优点

  1. 简化了用户与权限的管理,通过对用户进行分类,使得角色与权限关联起来,而用户与权限变成了间接关联,从而解耦,权限控制更加灵活。

  2. RBAC支持公认的安全原则:最小特权原则、责任分离原则和数据抽象原则。

    • 最小特权原则得到支持,是因为在RBAC模型中可以通过限制分配给角色权限的多少和大小来实现,分配给与某用户对应的角色的权限只要不超过该用户完成其任务的需要就可以了。

    • 责任分离原则的实现,是因为在RBAC模型中可以通过在完成敏感任务过程中分配两个责任上互相约束的两个角色来实现,例如在清查账目时,只需要设置财务管理员和会计两个角色参加就可以了。

    • 数据抽象是借助于抽象许可权这样的概念实现的,如在账目管理活动中,可以使用信用、借方等抽象许可权,而不是使用操作系统提供的读、写、执行等具体的许可权。但RBAC并不强迫实现这些原则,安全管理员可以允许配置RBAC模型使它不支持这些原则。因此,RBAC支持数据抽象的程度与RBAC模型的实现细节有关。

缺点

由于权限是以角色为载体分配的,如果某一角色下的个别用户需要进行特别的权限定制,如同加入一些其他角色的小部分权限或去除当前角色的一些权限时,RBAC就无能为力了,只能再重新创建角色,因为RBAC对权限的分配是角色为单位的。

基于任务和工作流的访问控制模型TBAC

介绍

所谓任务(或活动) ,就是要进行的一个个操作的统称。TBAC 模型是一种基于任务、采用动态授权的主动安全模型

基本思想

  1. 将访问权限与任务相结合,每个任务的执行都被看作是主体使用相关访问权限访问客体的过程。在任务执行过程中, 权限被消耗,当权限用完时,主体就不能再访问客体了;

  2. 系统授予给用户的访问权限,不仅仅与主体、客体有关,还与主体当前执行的任务、任务的状态有关。客体的访问控制权限并不是静止不变的, 而是随着执行任务的上下文环境的变化而变化。

缺点

TBAC 中并没有将角色与任务清楚地分离开来, 也不支持角色的层次等级;另外,TBAC并不支持被动访问控制, 需要与RBAC结合使用 。

基于任务和角色的访问控制模型T-RBAC

T-RBAC 模型把任务和角色置于同等重要的地位, 它们是两个独立而又相互关联的重要概念。任务是RBAC 和TBAC能结合的基础。

T-RBAC 模型中是先将访问权限分配给任务,再将任务分配给角色,角色通过任务与权限关联,任务是角色和权限交换信息的桥梁。

在T-RBAC模型中, 任务具有权限,角色只有在执行任务时才具有权限, 当角色不执行任务时不具有权限;权限的分配和回收是动态进行的,任务根据流程动态到达角色, 权限随之赋予角色,当任务完成时,角色的权限也随之收回;角色在工作流中不需要赋予权限。这样, 不仅使角色的操作、维护和任务的管理变得简单方便, 也使得系统变得更为安全。

基于对象的访问控制模型

控制策略和控制规则是OBAC访问控制系统的核心所在,在基于受控对象的访问控制模型中,将访问控制列表与受控对象或受控对象的属性相关联,并将访问控制选项设计成为用户、组或角色及其对应权限的集合;同时允许对策略和规则进行重用、继承和派生操作。这样,不仅可以对受控对象本身进行访问控制,受控对象的属性也可以进行访问控制,而且派生对象可以继承父对象的访问控制设置,这对于信息量巨大、信息内容更新变化频繁的管理信息系统非常有益,可以减轻由于信息资源的派生、演化和重组等带来的分配、设定角色权限等的工作量。

OBAC从信息系统的数据差异变化和用户需求出发,有效地解决了信息数据量大、数据种类繁多、数据更新变化频繁的大型管理信息系统的安全管理。OBAC从受控对象的角度出发,将访问主体的访问权限直接与受控对象相关联,一方面定义对象的访问控制列表,增、删、修改访问控制项易于操作,另一方面,当受控对象的属性发生改变,或者受控对象发生继承和派生行为时,无须更新访问主体的权限,只需要修改受控对象的相应访问控制项即可,从而减少了访问主体的权限管理,降低了授权数据管理的复杂性。

基于属性的访问控制(ABAC)

ABAC是一种为解决行业分布式应用可信关系访问控制模型,它利用相关实体(如主体、客体、环境)的属性作为授权的基础来研究如何进行访问控制。基于这样的目的,可将实体的属性分为主体属性、实体属性和环境属性,这与传统的基于身份的访问控制(IBAC)不同。在基于属性的访问控制中,访问判定是基于请求者和资源具有的属性,请求者和资源在ABAC 中通过特性来标识,而不像IBAC那样只通过ID来标识,这使得ABAC具有足够的灵活性和可扩展性,同时使得安全的匿名访问成为可能,这在大型分布式环境下是十分重要的。