1 权限控制模型

这些权限模型都是为了实现有效的访问控制而发展出来的,并在不同的场景和需求下有不同的应用。具体选用哪种权限模型要根据组织的需求、安全性要求和系统架构来决定。

RBAC

RBAC(Role-Based Access Control)是一种常见的权限模型,它基于角色进行访问控制。在RBAC中,将用户分配给不同的角色,每个角色具有特定的权限,用户通过分配的角色来获取相应的权限。

RBAC(Role-Based Access Control)模型适用于以下场景:

组织结构明确的系统:适用于拥有明确定义角色和职责的组织,例如企业内部系统或公司网络。

简单的访问控制需求:适用于相对简单的访问控制需求,其中权限只基于用户的角色。

ABAC

ABAC(Attribute-Based Access Control)是另一种权限模型,它基于属性进行访问控制。在ABAC中,访问决策不仅基于用户角色,还基于其他属性(如用户的属性、环境条件等)。这种模型更加灵活,可以根据更多的属性因素进行访问控制。

ABAC(Attribute-Based Access Control)模型适用于以下场景:

复杂的访问控制需求:适用于需要基于多种属性、策略和环境条件实现访问控制的复杂系统,例如云计算环境、大型组织或跨组织的系统。

动态访问控制:适用于需要动态调整访问权限的系统,根据用户的属性和环境条件进行访问控制。

基于属性的访问控制模型(ABAC: Attribute-Based Access Control),被一些人称为是权限系统设计的未来。
不同于常见的将用户通过某种方式关联到权限的方式,ABAC 则是通过动态计算一个或一组属性是否满足某种条件来进行授权判断(可以编写简单的逻辑)。
用户、资源和环境都有各自的属性。这些属性可以包括用户的身份、角色、部门、资源的类型、敏感级别、时间等。
访问控制策略通过属性的匹配和条件评估来确定是否允许访问。例如,如果用户的角色属性是 “Manager” 且资源的敏感级别属性是 “High”,则允许访问。

举例子:考虑一个企业的文档管理系统,使用 Attribute-Based Access Control (ABAC) 模型来控制对文档的访问。在这个例子中,访问控制的决策基于用户的属性、文档的属性以及其他环境因素。

用户属性:

  • 属性 1:用户角色(Role) - 可能的值包括 “Employee”(员工)和 “Manager”(经理)。
  • 属性 2:用户部门(Department) - 包括 “Sales”(销售部门)和 “Engineering”(工程部门)。

文档属性:

  • 属性 1:文档类型(Document Type) - 包括 “Internal”(内部文档)和 “Confidential”(机密文档)。
  • 属性 2:文档部门(Document Department) - 指定文档所属的部门。

环境属性:

  • 属性 1:访问时间(Access Time) - 确定用户访问文档的时间。

策略定义:

  • 规则 1:如果用户角色是 “Manager” 且文档类型是 “Confidential”,允许访问。
  • 规则 2:如果文档部门是 “Sales” 且访问时间是工作时间,允许员工访问。

访问请求示例:

  • 用户A是 “Manager”,想要访问一个 “Confidential” 类型的文档,由于规则 1 的匹配,允许访问。
  • 用户B是 “Employee”,想要访问一个 “Internal” 类型的文档,在工作时间内,由于规则 2 的匹配,允许访问。

在这个例子中,ABAC 模型通过匹配用户、文档和环境的属性来决定访问权限。管理员可以根据组织的需求定义和更新访问规则,以实现更精细和动态的访问控制。

这种权限设计侧重点, 在于数据属性

PBAC

PBAC(Policy-Based Access Control)是一种基于策略的权限模型,它通过定义策略来管理访问控制。这些策略可以由管理员根据组织的需求进行定制,以决策具体的访问权限。PBAC模型允许更细粒度的控制,并支持动态的访问控制策略。

PBAC(Policy-Based Access Control)模型适用于以下场景:

灵活的访问控制需求:适用于需要根据特定策略和规则管理访问控制的系统,以满足不同用户和场景下的灵活性和可定制性要求。

高度可管理的访问控制:适用于需要集中管理、审计和控制权限策略的系统,以确保访问权限的一致性和安全性。

Policy-Based Access Control (PBAC) 是一种基于策略的访问控制模型,它的核心思想是通过定义和实施一组策略来管理对系统资源的访问。在 PBAC 中,访问控制是通过规则和条件的集合来决定的,这些规则描述了在特定条件下用户能够执行的操作。

跟 ABAC 是同属于一个级别的权限控制模型, 只是侧重点不同, PBAC 更加侧重于: 重定义和实施访问控制策略。这些策略是由一组规则组成,这些规则描述了在特定条件下用户能够执行的操作。

举例子:

考虑一个企业的文件管理系统,管理员使用 Policy-Based Access Control (PBAC) 来定义访问控制策略,以确保对文件的访问仅限于授权用户和特定条件下的访问。

用户和角色定义:

  • 角色 1:Employee(普通员工)
  • 角色 2:Manager(经理)
  • 角色 3:Admin(管理员)

资源定义:

  • 资源 1:Project Documents(项目文件夹)
  • 资源 2:Financial Reports(财务报告文件夹)

策略定义:

  • 策略 1:如果用户是经理,允许访问项目文件夹。
  • 策略 2:如果用户是管理员,允许访问财务报告文件夹。
  • 策略 3:如果访问时间在工作时间内,允许访问项目文件夹和财务报告文件夹。
  • 策略 4:如果用户是普通员工,仅在工作时间内允许访问项目文件夹。

这些策略和规则的组合允许管理员定义对文件的访问控制。例如,一个经理在工作时间内可以访问项目文件夹,而管理员可以在任何时间访问财务报告文件夹。这个例子展示了 PBAC 模型如何通过灵活的策略定义,实现对资源访问的细粒度控制。管理员可以根据企业需求调整和更新这些策略,以适应不同的访问控制需求。

TBAC

TBAC(Task-Based Access Control)是一种基于任务的权限模型,它根据用户当前的任务或角色来授予相应的权限。用户只能在特定任务或角色下获得特定的权限,以完成特定的任务。

TBAC(Task-Based Access Control)模型适用于以下场景:

任务导向的系统:适用于以任务为中心的系统,其中用户的权限是基于其当前执行的任务或角色。

临时权限需求:适用于需要根据特定任务或临时角色授予用户临时权限的系统,以确保权限仅在需要时才可用。

需要根据具体的系统需求、环境和安全性要求来选择合适的权限模型。有时也可以结合多个模型来实现更全面的访问控制策略。

2 权限模型的实现

权限中有几个关键概念

用户:授权对象

用户组:授权对象的集合,方便快速进行多个用户的授权。

权限:被授权的内容。可以使水平权限、垂直权限。

角色(权限组):被授权对象的集合,方便快速进行一组权限的授权。

垂直权限:功能相关的权限,应用开发阶段确认的。一般会定义角色,作为一组垂直权限的集合进行统一授权。

水平权限:业务数据的权限,随着业务的变化而动态变化。一般会定义租户,作为垂直权限的集合进行统一授权。

最佳实践

  1. 对于垂直权限,一般的授权逻辑是先找到用户或者用户组,添加某个角色或者角色组。对于垂直权限,习惯上首先找到需要授权的水平资源,添加某个用户或者用户组。
  2. 授权对象的本质是建立授权对象和被授权对象的关系。垂直权限和水平权限无法进行分别控制。你再某个水平资源下具有的水平权限,在另外一个水平资源下可能没有。
  3. 权限控制有两种表现:
    1. 可见性控制:对于没有权限的资源直接不可见。
    2. 可访问性:对于没有权限的资源可见但是无法访问。

四级权限结构

一般情况下只需要前两级别的鉴权即可满足要求。如果需要更细粒度的鉴权,则需要添加3、4级别的权限控制。

  1. 租户鉴权:也称为作用域鉴权,水平鉴权,是基本的鉴权条件,实现水平资源的数据隔离,进行可见性控制。用户加入租户(水平资源组)
  2. 接口鉴权:垂直鉴权,用户是否具有该租户下某个功能(接口)的权限。用户赋予该租户下的某个角色(垂直权限组)
  3. 数据项鉴权:用户是否能够访问和修改某个数据项,进行可访问性控制。数据添加某个用户
  4. 数据项访问鉴权:用户是否具有该数据项的查看、编辑、执行或者任何自定义功能的权限。数据项设置某个用户的访问级别。

Linux的权限控制

对于Linux来说,1级权限就是不同的/home/?下不同的用户目录,实现了可见性的隔离。

对于Linux文件鉴权来说,用到了3、4级别的鉴权。

所有者、所在组、组外用户是三种不同的用户组。授权该文件(3级水平资源),是否具有读写执行(4级数据项读写执行权限)。因为对于Linux来说没有垂直权限。一切皆文件。所以不需要2级授权,因为2级授权就是4级授权的执行全向。