安全访问 - 第3章 RBAC模型
3.1 概念
Role-Based Access Control (基于角色的访问控制),简称RBAC。是一种基于角色并使用角色中预先定义的策略(Policy)对主体操作对象进行验证的访问控制方式。NIST于1992年发表论文对RBAC标准进行了定义。
什么是角色?在企业中访问控制的范围通常取决于员工所扮演的角色,角色中包含企业已确认的职责、责任和资格的规范,例如:软件公司中的角色包括工程师、设计师、商务人员 等,每一种角色根据其包含的职责通常有不同的访问范围。
主体是指用户或组织。
对象是系统资源,如⽂件、设备、程序、网络等。
操作是主体请求对对象执⾏的功能。例如文件操作,包括对文件的读、写、编辑、删除、复制、执⾏和修改等。
策略(Policy)是一组访问规则。用于定义角色对对象可以执行某种操作。例如策略:允许商务人员对文件"客户资料.xlsx"执行读操作,这里商务人员是一个角色,"客户资料.xlsx"是对象,读是操作。
3.2 工作原理
下图展示了基于RBAC访问控制机制下,主体(小明)访问对象的工作原理:

-
主体请求访问对象。
-
RBAC访问控制机制首先获取主体的角色,然后根据角色中的策略对该请求进行授权验证。
-
如果验证通过,则可以访问对象。
在现实世界的例子:
”我作为一名管理员,希望授权小明(商务人员),读取文件“客户资料.xlsx”。
访问主体是“小明”,主体的角色是商务人员。
对象是 “客户资料.xlsx”。
实现方式
-
新建一个角色为“商务人员”。
-
假如角色的策略定义格式为:allow {角色} {对象} {操作},则定义以下策略:
allow {商务人员} {客户资料.xlsx} {读取} -
设置“小明”的角色为“商务人员角色”。
在满足以上条件后,当“小明” 读取文件“客户资料.xlsx”时,RBAC访问控制机制就可以根据主体角色,使用管理员预先定义的策略(Policy)对这次访问进行验证,如果验证结果通过,就可以读取。对于其他新增商务人员的授权也只需要设置角色为“商务人员”即可访问商务人员对应的文件,如果有人员离职,也只需要将离职人员移除角色即可,这样就通过角色实现了人员和访问资源的解耦,提高了权限配置的效率。
3.2 数学描述
为了阐明概念,我们对RBAC给出⼀个简单的数学描述。这里的主体s指“用户”,例如"小明"。事务t是指操作+对象,例如:读取文件“客户资料.xlsx”。
主体s的活动角色,活动角色是主体当前正在使用的角色:
主体s的授权角色,每个主体可以授权多个角色:
每个⻆⾊都可以被授权执⾏⼀个或多个事务:
主体执⾏事务,当且仅当主体(if and only if)主体s可以在当前时间执⾏事务t ,函数exec(s,t)为真,否则为假:
三个基本原则
数学符号解释
∀ 任意,相当于every。当∀后面跟有以x为变量的公式时,写作(∀x),读作“任意x”。例如,(∀a)a≥6表示所有的a都不小于6。
⇒ 推出,A⇒B意味着如果A为真,则B也为真;如果A为假,则对B没有任何影响。
≠ 不等于。
Ø[fai] 空集, 指不含任何元素的集合。
⊆ 包含于,表示一个集合中的元素全部是另一个集合里的元素。
-
⻆⾊分配:只有当主体选择或分配了⻆⾊时,主体才能执⾏事务。系统上的所有其他⽤⼾活动都是通过事务进⾏的,因此所有活跃⽤⼾都需要有⼀些活跃的⻆⾊。
公式解释:执行事务成功 only if 活动角色不为空。
-
⻆⾊授权:⼀个主体的活动⻆⾊一定是已授权的角色:
公式解释:活动角色是已授权角色的子集。
-
事务授权:只有当事务被授权为主体的活动⻆⾊时,主体才能执⾏该事务:
公式解释:执行事务成功 only if 事务包含已授权的活动角色。
对于 (1) 和 (2)确保⽤⼾只能执⾏他们被授权的事务。请注意,因为条件是“only if”,所以允许对事务执⾏施加额外限制的可能性。也就是说,不能仅仅因为它在TA(AR(s))中就保证事务是可执⾏的,TA(AR(s))是主体的活动⻆⾊可以执⾏的事务。例如,主管⻆⾊的实习⽣可能被分配“主管”⻆⾊,但对其⽤⼾⻆⾊施加了限制,将可访问的事务限制为主管⻆⾊通常允许的事务的⼦集。
-
强制控制⽤⼾必须通过某种验证函数访问对象的模式:
公式解释:执行事务成功 only if access(AR(s),f,o, x)
access(AR(s),f,o, x) 表示是否允许活动⻆⾊中的主体使⽤函数f对对象o执行x操作 ,其中x指某些模式集,例如:读r、写w、执行x。
例如,在医院环境中,使⽤这条策略可能是合适的。可以为医⽣提供对处⽅⽂件的读/写权限,⽽药剂师只有读权限。 (回想⼀下,单独使⽤前4个原则需要绑定事务中的f和o,并且只控制对事务的访问。) 使⽤ (4)可能有助于强制执⾏机密性要求。
RBAC 的另⼀个⽤途是⽀持完整性。完整性已以多种⽅式定义,但完整性的⼀个⽅⾯要求数据和流程只能由授权⽤⼾以授权⽅式进⾏修改。对于许多实际系统来说,这似乎是⼀个合理的安全⽬标,并且 RBAC 应该适⽤于此类系统。
通常,确定数据是否仅以授权⽅式修改的问题可能与进⾏修改的事务⼀样复杂。出于这个原 因,实际的⽅法是对事务进⾏认证和信任。如果必须信任事务,则可以将访问控制直接合并到每个事务中。
要求系统通过 (4) 中使⽤的访问函数来控制事务程序对对象的访问可能是⼀种有⽤的冗余形式,但它可能会涉及⼤量开销,从⽽在执⾏完整性要求时获得有限的好处。
因此,在 RBAC 中包含对对象访问控制功能的事务将在某些应⽤程序中有⽤。
3.2 与DAC比较
在多数企业中,员工通常并不拥有其允许访问文件的“所有权”,而是仅拥有基于自己的角色的文件的“访问控制权”。
DAC模型允许系统用户访问拥有权限的任意文件,并能够将其现有的访问权限直接(或者间接)传递给任何其他用户,而无需系统管理员干预,这是不安全的。
RBAC模型的系统⽤⼾不能⾃⾏决定将权限传递给其他⽤⼾,这是 RBAC 和 DAC 之间的根本区别。