分布式操作系统中访问矩阵的实现
如前所述,访问矩阵可能非常稀疏并占用大量内存。因此,直接实现访问矩阵进行访问控制是存储效率低下的。
可以通过将访问矩阵分解为行或列来消除低效率。可以通过删除空值等来折叠行以提高效率。从这些分解方法中可以形成三种被广泛使用的访问矩阵的实现。它们如下:
1. Capabilities
2. Access Control List
3. Lock and Key Method
因此,我们将简要讨论上述实现。
值得记住的是,我们用s表示主语,用O表示宾语,并将它们分别放在列和行上。
- 能力:
该方法是指访问矩阵的行分解。每个 Subject 都分配有一个元组列表(o, M[s, o]),用于允许它访问的所有对象。这个元组被称为能力。如果主体拥有能力 (o, M[s, o]),则允许以 M[s, o] 中描述的方式访问客体 o。一个主体可以访问它拥有能力的任何对象。能力不是用来伪造的。功能包含两个字段:
(i) Object Descriptor, (ii) Access Rights
对象描述符可能包含对象的地址,访问权限可能包含主体对对象的权限,主要是读写、执行。由于对象描述符包含地址,因此它也可以用作寻址机制。
下面是能力的格式。
- 访问控制列表:
该方法指的是访问矩阵的列分解。每个对象 o 都有一个列表,其中包含所有可以访问该对象的主体 s 的元组,如 (s, M[s, o]) 。P[s, o] 表示主体 s 对对象 o 的权限。当主体请求访问时对于对象 o,它按以下方式执行。
- 系统搜索 o 的访问控制列表以找出一个条目 (s, ) 存在于主题 s
- 如果和条目 (s, ) 存在于主题 s 然后系统检查以查看请求的访问是否被允许。(即, )
- 如果请求的访问被允许,则执行请求,否则会引发适当的异常。
下面是对象 o 的访问控制列表的示例实现。
Subjects Access Right ravi Read, Write, Execute rana Read jeffy Write alice Execute ;
访问控制列表的主要功能是轻松撤销和轻松查看访问权限。
- 锁和钥匙方法:
锁和钥匙方法是访问控制列表和能力方法的混合体。在 lock and key 方法中,每个主体都有一个能力列表,其中包含形式为 (o, key) 的元组,表明主体可以使用 key key访问对象 o。对象有一个访问控制列表,其中包含形式(锁定、 ),称为锁条目,表示锁可以被集合中的模式访问 .
当主体以模式请求访问客体 o 时 ,系统按以下方式执行。
- 系统在主题的能力列表中定位元组(o,key)。如果没有找到这样的元组 id,则不允许访问。
- 否则,只有存在锁条目(lock, ) 在对象 o 的访问控制列表中,使得key = lock和
所以这是最常用的访问矩阵的实现。我们已经以简短而紧凑的方式讨论了这些流程。用法、优点和缺点可以在以后的帖子中介绍。