操作系统中访问矩阵的实现

2025年8月1日 | 阅读11分钟

在本文中,您将学习如何在操作系统中实现访问矩阵。但在讨论访问矩阵的实现之前,您必须了解操作系统中的访问矩阵。

什么是操作系统中的访问矩阵?

访问矩阵是计算机系统保护状态的一种安全模型。它被描述为一个矩阵。访问矩阵用于指定在每个域中运行的每个进程对每个对象的权限。矩阵的行代表域,而列代表对象。每个矩阵单元格都反映了授予域进程的一组访问权限,即每个条目 (i, j) 描述了域 Di 进程可以在对象 Oj 上调用的操作集。

访问矩阵的组成部分

二维访问矩阵包含三个组成部分

主体: 矩阵的行表示对对象执行某些操作的主体。从操作系统的角度来看,主体通常是用户或进程。

对象: 对象是主体访问以执行某些操作的资源,矩阵列表示对象。对象通常是文件、设备或任何其他系统资源。

权限: 权限是指定主体可以对对象执行的操作或行为。描述执行对象操作的访问权限的矩阵单元格构成主体-对象对;主体可以读取、写入、执行操作等。

访问矩阵的机制(操作系统)

策略和上下文属性的组合定义了访问矩阵的机制。由操作系统设置的策略决定了纳入访问矩阵 (i, j) 条目的权限。然后,用户根据这些策略使用特定元素填充访问矩阵。

访问矩阵实现静态和动态访问权限。静态权限最初与访问关联,而动态权限可能在运行时随进程在域之间切换而改变。进程在访问矩阵的帮助下对对象执行切换操作。

域切换涉及进程从一个域过渡到另一个域,在新域中执行与对象相关的操作。用户定义访问矩阵的元素和每个进程完成的域,如果被授予切换访问权限到 (i, j),则允许进程从域 (Di) 切换到域 (Dj)。当添加新对象时,访问矩阵会包含一个新列,用户为新对象提供适当的条目。

操作系统中访问矩阵的实现

 操作系统中的访问矩阵可能占用大量内存,并且非常稀疏。因此,直接实现访问矩阵进行访问控制的存储效率很低。可以将访问矩阵细分为行或列以降低低效率。为了提高效率,可以通过删除空值来折叠列和行。 使用这些分解方法可以形成四种广泛使用的访问矩阵实现

  1. 全局表
  2. 对象的访问列表
  3. 域的能力列表
  4. 锁-键机制

全局表

这是最基本的访问矩阵实现。在文件中维护一组有序三元组 <域, 对象, 权限集>。当在域 Di 内对对象 Oj 执行操作 M 时,搜索表中是否存在三元组 。如果找到此三元组,则操作可以继续;否则,将出现异常(或错误)条件。这种实现有各种缺点。该表通常很大,不能存储在主内存中,因此需要额外的输入和输出。

对象的访问列表

每个访问矩阵列都可以用作单个对象的访问列表。可以删除空白条目。对于每个对象,生成的列表包含有序对 <域, 权限集>,用于定义该对象的所有域和非空访问权限集。

我们可以先检查默认集,然后找到访问列表。如果找到该项目,我们允许操作;如果找不到,我们验证默认集。如果 M 在默认集中,我们授予访问权限。如果不是这种情况,则拒绝访问,并出现异常情况。

域的能力列表

域的能力列表是对象及其可对其执行的操作的集合。能力是用于定义对象的名称或地址。如果您想对对象 Oj 执行操作 M,进程将运行操作 M,指定对象 Oj 的能力。简单地拥有能力意味着允许访问。

在大多数情况下,能力以两种方式与其它数据分离。每个对象都有一个标签,以指示其作为能力数据的类型。或者,程序的地址空间可以分为两部分。程序可以访问一部分,包括程序的常规指令和数据。另一部分是能力列表,只能由操作系统访问。

锁-键机制

它是访问列表和能力列表之间的折衷。每个对象都有一系列锁,它们是特殊的位模式。另一方面,每个域都有一组键,它们是特殊的位模式。只有当域拥有的键与对象上的一个锁匹配时,基于域的进程才能访问对象。不允许进程修改其键。

现在,让我们举个例子来理解操作系统中访问矩阵的实现。

示例

Implementation of Access matrix in the operating system

在此示例中,上矩阵中有 4 个域和对象,并且还考虑了 3 个文件(包括 F1、F2 和 F3)和一个打印机。文件 F1 和 F3 可以由在 D1 中运行的进程读取。在域 D4 中运行的进程具有与 D1 相同的权限,但它也可以写入文件。只有一个在域 D2 中运行的进程可以访问打印机。访问矩阵机制由各种策略和语义特征组成。具体来说,我们应该确保在域 Di 中运行的进程只能访问第 i 行中列出的对象。

访问矩阵中的保护策略决定了必须包含在 (i, j) 条目中的权限。我们还应该选择每个进程运行的域。操作系统通常决定此策略。用户决定访问矩阵条目的数据。

域和进程之间的关系可以是静态的也可以是动态的。访问矩阵提供了一种定义此域-进程关联控制的方法。当我们将进程从一个域切换到另一个域时,我们对对象执行切换操作。我们可以通过在访问矩阵对象之间包含域来调节域切换。如果它们有权切换权限,则必须允许进程从一个域 (Di) 切换到另一个域 (Dj)

Implementation of Access matrix in the operating system

根据矩阵,在域 D2 中运行的进程可以切换到域 D3D4。在域 D4 中的进程可以切换到域 D1,在域 D1 中的进程可以切换到域 D2

访问矩阵中的安全模型(操作系统)

定义主体和对象之间访问权限安全级别的基本安全模型

1. Bell-LaPadula (BLP) 模型

BPL 模型侧重于维护计算机系统中的机密性。这些模型设置了规则,以防止信息从高安全级别流向低安全级别。使用此模型,具有安全级别的用户可以读取或写入其级别的文件,不能读取更高级别的文件,也不能写入其更低级别的文件。这些模型根据用户的角色分配不同的安全级别,以维护机密数据的未经授权的流动。BPL 遵循两个基本属性

简单安全属性:在指定安全级别,主体可以读取相同安全级别的对象,并访问较低保护级别的对象。但是,主体限制读取较高安全级别的对象。这种安排旨在保护敏感数据。

星形属性:主体可以写入其相同安全级别的文件,并写入其更高级别的对象,但不能写入其更低安全级别的对象。这些维护机密性。

2. Biba 完整性模型

这些模型通过防止信息的未经授权修改来维护数据完整性。已建立的规则限制任何主体根据完整性级别写入任何对象。主体仅当其完整性级别等于或低于对象的完整性级别时才授予对对象的写入访问权限。建立高、中、低完整性级别可作为防止数据损坏的预防措施。

在这里,具有给定完整性级别的主体可以读取其自身和更高完整性级别的对象,而不是较低完整性级别的对象。具有给定完整性级别的主体可以写入其完整性级别的对象,并写入较低完整性级别的对象,而不是较高完整性级别的对象。

例如,假设有用户可以访问、读取和写入的文件,为这些用户分配“高”、“中”和“低”的指定完整性级别。具有高完整性级别的用户可以读取高完整性级别的文件,并写入高、中和低完整性级别的文件。

具有中完整性级别的用户可以读取中和高完整性级别的文件,并写入中和低完整性级别的文件。

具有低完整性级别的用户可以读取低、中和高完整性级别的文件,并写入低完整性级别的文件。

3. Clark-Wilson 模型

Clark-Wilson 模型通过明确定义的事务确保数据完整性。主体可以执行事务操作,并将对象定义为受约束和不受约束的数据项。此模型确保只有授权事务才能访问数据。授权事务可以修改受约束数据。银行系统广泛使用它。

4. 基于格模型

这些模型的安全策略遵循基于格的架构来表示安全级别。访问权限的确定基于格层次结构,其中级别越高权限越大。主体和对象安全级别的分配根据格结构完成。主体请求访问对象,如果主体访问级别等于或高于任何授予的对象访问级别,则它处理与敏感数据的复杂关系。

实际应用

1) RBAC - 基于角色的访问控制是公司管理中广泛使用的流程。其工作方法论非常简单。例如:一家公司有许多员工分布在不同的部门,如 IT、人力资源、财务、物流、维护等。现在,RBAC 负责根据员工的角色允许或拒绝他们访问特定文件。这样做使公司很容易避免未经授权的人员进入受限文件。例如,财务人员将有权访问包含财务数据的文件,并且不允许进入 IT 部门数据。

2) DBMS 中的访问矩阵 - DBMS 是一种数据库管理系统,用于存储组织的数据。组织将当今的数据视为其最重要且高度安全的资产。访问矩阵允许用户根据指定的权限履行其角色。并非公司中的每个人都可以访问数据库的每个部分。有些人只允许查看数据,而另一些人则允许写入或执行数据操作。访问矩阵有助于数据库访问每个用户的职责,保护组织的宝贵数据并维护安全受控的环境。

3) 生产 管理 - 在制造公司中,不同材料每天都在生产,访问矩阵发挥着重要作用。制造过程是全自动的,操作员操作机器系统。集中系统有一个矩阵图表,其中存储了所有有关员工详细信息、机器详细信息和产品详细信息的信息。当员工尝试操作机器时,系统会要求验证。员工(操作员)向系统提供其身份识别,系统将身份与矩阵匹配以找出与提交的身份链接的角色和工作配置文件。在此系统中,决定是否允许或拒绝相应的员工对产品使用机器执行操作的权限。

4) 应用程序 权限 - 访问矩阵在智能手机中很有用,系统对新安装的应用程序可以访问智能手机的内容有默认设置。通常,新安装的应用程序,例如照片库、相机、文件等,被拒绝访问系统的应用程序。每当我们从 Play 商店下载一个新应用程序时,安装后我们都会收到一条通知,询问是否允许该应用程序与手机的不同部分进行交互。因此,如果我们设置应用程序的权限以访问其他系统应用程序,那么访问矩阵会相应地更改其设置,以便应用程序无需每次都请求权限。仅当应用程序中有与早期权限标准不匹配的特定更新时才请求权限

优点和缺点

优点-

1)细粒度访问控制:假设您有一个系统,其中有多个用户(主体)和他们可以使用的不同文件或进程(对象)。访问矩阵允许系统管理员(Sysadmin)非常具体地规定每个主体可以对对象执行的操作。可以应用最小特权原则,这不会给主体在与对象交互时自由发挥的余地。

2)灵活性: 可以访问系统管理的指定人员有权根据安全协议更改访问矩阵。出于安全原因,对于某些用户来说,可能需要拒绝访问特定对象。访问矩阵允许他们进行此类更改。同样,我们需要给特定主体比访问矩阵允许的更多访问权限,以执行此类操作。

3)集中管理: 访问矩阵有一个图表,显示哪些主体可以与哪些对象交互。集中系统保留这些规则,允许指定人员在必要时查找和进行更改。

4)可伸缩性: 修改访问矩阵以处理大量主体和对象而不会饱和和不堪重负。当多个设备积极分布主体和对象时,此功能非常方便。

缺点-

1)稀疏矩阵图: 在某些情况下,用户可能只填充矩阵图的一些单元格,这意味着他们需要访问权限,从而导致矩阵存储过程的效率低下。

2)复杂性:当主体和对象的数量增加时,通过矩阵处理复杂性,但在提供访问权限时会出现错误。

3)系统存储: 由于管理大量主体和对象,访问矩阵占用系统大量内存,影响其效率。

4)安全漏洞: 访问矩阵的实现应由专业人员谨慎处理,否则可能导致严重的安全漏洞并允许主体获得额外特权。

常见问题解答:-

直接将访问矩阵实现为数据结构会带来哪些挑战?

直接将访问矩阵实现为二维表在时间和空间上效率低下,因为大多数实际系统都是稀疏的,这意味着矩阵中的大多数单元格都是空的(即未定义访问)。管理和搜索这样的矩阵会导致高内存使用率和慢速性能,尤其是当用户和资源数量增加时。

访问控制列表 (ACL) 如何优化访问矩阵的存储?

访问控制列表表示访问矩阵的列式分解,其中每个对象维护一个主体及其允许操作的列表。这种优化通过仅存储非空条目来减少存储要求,使其适用于由许多主体访问对象的系统。