赞
踩
访问控制模型包括三个要素,即:
主体、客体,控制策略三者需要满足的基本安全策略:
“UGO”经常作为“User(Owner),Group,and Other”的缩写来使用,中文表示:“用户、组和其他”。
UGO是Linux中对于资源进行权限管理的访问模型。Linux中一切资源都是文件,每个文件都可以设置三种角色的访问权限(文件所有者,文件创建者所在组,其他人)。
访问控制列表 ACL(Access Control List)是由一条或多条规则组成的集合。
简单来说就是,每个资源都配置有一个列表,这个列表记录哪些用户可以对这项资源进行操作。当系统试图访问这项资源的时候,会首先检查这个列表中是否有关于当前用户的访问权限,从而确定这个用户是否有权限访问当前资源。
在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。
RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为Who、What、How的问题,Who、What、How构成了访问权限三元组。
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。
他的核心逻辑为:
RBAC0是基础,很多产品只需基于RBAC0就可以搭建权限模型了。在这个模型中,我们把权限赋予角色,再把角色赋予用户。用户和角色,角色和权限都是多对多的关系。用户拥有的权限等于他所有的角色持有权限之和。
RBAC1建立在RBAC0基础之上,在角色中引入了继承的概念。简单理解就是,给角色可以分成几个等级,每个等级权限不同,从而实现更细粒度的权限管理。
RBAC2同样建立在RBAC0基础之上,仅是对用户、角色和权限三者之间增加了一些限制。这些限制可以分成两类,即静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。
RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。
基于RBAC模型,还可以适当延展,使其更适合我们的产品。譬如增加用户组概念,直接给用户组分配角色,再把用户加入用户组。这样用户除了拥有自身的权限外,还拥有了所属用户组的所有权限。
**RBAC 的流行很重要很大程度上是贴近现实生活,方便大家理解与使用,对于管理人员来说,只是修改不同的 role 对应的权限而已。**RBAC 在很多时候是管用的。
比如我们的系统是面向销售公司或者学校这种组织架构很严整的地方,但是在复杂场景下,RBAC 渐渐就不够用了,它会产生很多虚无的 role 而且在管理和控制上更难。
一般来说,在 RBAC 中滥用 role 所带来的问题被称为 “role explosion”,跟“曹操”与“曹操小时候”这个笑话很类似,但的确我们的访问控制系统中存在很多这样的 role。
ABAC 基于属性的访问控制 (Attribute Based Access Control) 是一种灵活的授权模型。,限验证模式是用属性来标记资源权限的。
通过实体的属性、操作类型、相关的环境来控制是否有对操作对象的权限。
传统的 RBAC 与 ACL 等访问控制机制中,可以认为是 ABAC 的子集,对于 RBAC,只是我们的访问机制的实现只是基于属性 role 而已,ACL 则是基于属性是 identity 的 AC。
简单来说,对于 ABAC 我们判断一个用户是否能访问某项资源,是对其很多不同属性的计算而得到的。
例如:
ABAC授权模型理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。从使用场景来说比较适用于用户数量多并且授权比较复杂的场景。简单的场景也是可以使用ABAC的,但是使用基础的ACL或者RBAC也能满足需求。
在属性的组合比较多,需要更细粒度地划分角色的情况下。RBAC需要建立大量的角色。ABAC授权模型会更加灵活。
我们可以很容易的为不同的用户设计 attribute。
ABAC 能做到细粒度的授权管理。
在 policy 中,我们的准许访问的判断是可以写的很灵活的,我们甚至可以判断请求中的某个属性是否满足于一个正则表达式,或者字符串相等(这个很常见,特别是在使用 AWS IAM 做最小权限原则时),我们也可以使用逻辑与、逻辑或的关系自由组合很多不同的访问规则。你可以使用之前提到的 Specification Pattern 很轻松的实现灵活的 policy,解析 JSON 或者 XML 去动态的创建规则,而这些含有规则的 JSON 或 XML,则是可以被编程实现的(可编程的 policy 是动态的授权验权的前提)。
ABAC 对系统管理员是友好的。管理员的管理对象会缩减到 policy,也就是只处理访问控制。在 RBAC 的时代,如果我需要实现细粒度的资源管理或者经常 subject 与 object 的对应关系经常变动,那么管理员难以操作的,也很容易出现问题,其中常常被采用的解决方案就是创建那些本不应该存在的 role。
Environment conditions 也能够提供统一的系统级别的控制,比如威胁等级或者按照区域划分安全级别,不同的区域使用 ABAC 时,可能环境上会有变化。
Environment conditions 可以提供“拉闸”这样的功能,而且它也是可以动态调整的。
RBAC(Role-Based Access Control)和ABAC(Attribute-Based Access Control)都是常见的权限模型,它们之间有以下区别:
**对于哪种权限模型更好,这取决于具体的应用场景和需求。**RBAC模型更适用于大型组织的权限管理,可以简化权限管理流程;而ABAC模型更适用于动态权限分配的场景,可以灵活地控制用户的访问权限。
在选择权限模型时,应该根据具体的应用场景和需求来进行选择。如果需要简化权限管理流程,则可以使用RBAC模型;如果需要灵活地控制用户的访问权限,则可以使用ABAC模型。
自主访问控制模型(DAC,Discretionary Access Control)是根据自主访问控制策略建立的一种模型,允许合法用户以用户或用户组的身份访问策略规定的客体,同时阻止非授权用户访问客体。拥有客体权限的用户,可以将该客体的权限分配给其他用户。例如没有文件File1访问权限的用户可以从有访问权限的B用户那里得到访问权限。
自主访问控制机制允许对象的属主来制定针对该对象的保护策略。通常DAC通过授权列表(或访问控制列表)来限定哪些主体针对哪些客体可以执行什么操作。
强制访问控制和自主访问控制有时会结合使用。例如,系统可能首先执行强制访问控制来检查用户是否有权限访问一个文件组(这种保护是强制的,也就是说:这些策略不能被用户更改),然后再针对该组中的各个文件制定相关的访问控制列表(自主访问控制策略)
DAC常见于文件系统,LINUX,UNIX、WindowsNT版本的操作系统都提供DAC的支持。在实现上,先对用户鉴权,然后根据控制列表决定用户能否访问资源。用户控制权限的修改通常由特权用户或者管理员组实现。DAC最大缺陷就是对权限控制比较分散,比如无法简单地将一组文件设置统一的权限开放给指定的一群用户。主体的权限太大,无意间就可能泄露信息。
强制访问控制模型(MAC, Mandatory Access Control),是为了弥补DAC权限控制过于分散的问题而诞生的。
用来保护系统确定的对象,对此对象用户不能进行更改。也就是说,系统独立于用户行为强制执行访问控制,用户不能改变他们的安全级别或对象的安全属性。这样的访问控制规则通常对数据和用户按照安全等级划分标签,访问控制机制通过比较安全标签来确定的授予还是拒绝用户对资源的访问。强制访问控制进行了很强的等级划分,所以经常用于军事用途。
在强制访问控制系统中,所有主体(用户,进程)和客体(文件,数据)都被分配了安全标签,安全标签标识一个安全等级。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。