4.5 基于环的访问控制方法
Multics系统产生了一种称为基于环的访问控制的保护机制。内存或磁盘上的一个分段是保护的基本单元。有两类分段:数据和程序。每个分段可以有与之相关的读、写、执行和添加权限。这些权限包含在访问控制列表中,访问控制列表对每个用户的访问进行约束。
Multics系统定义了一系列的保护环,编号为0~43。通过比较主体与对象的数字进行访问控制决策。这些数字对应同心保护环,其中环0位于中心,提供最高级别的保护。环的编号越大,环中分段的特权越低。
根据下面的访问规则,程序可能会穿越环的边界。在某些情况下,穿越环将产生“环穿越错”。此时,gatekeeper机制将检查参数,并访问、执行其他例程以限制环穿越。Gate是一个入口点,它在程序中特别声明,编译器和链接器生成特殊代码,使得这些入口点可以被其他程序使用。
假设在环r中执行的程序打算访问一个数据段,与每一个数据段关联的是一对环编号(a1,a2),称为访问等级,其中a1≤a2。访问数据段的规则如下。
·当r≤a1时,允许访问。
·当a1<r≤a2时,允许r和e访问,拒绝w和a访问。
·当a2<r时,所有访问都拒绝。
假设该程序在环r中执行,打算访问一个程序段。每个程序分段有一个访问等级(a1,a2)和一个调用等级(a2,a3)。访问程序段的规则如下。
·当r<a1时,允许访问,但会发生环穿越错误。
·当a1≤r≤a2时,允许所有访问,且不会发生环穿越错误。
·当a2<r≤a3时,允许从有效的Gate发出的访问请求。
·当a3<r时,拒绝所有的访问。
例4-11 假设一个数据分段具有访问等级(2,4),而John有对该数据分段的读、写权限。如果John的程序在环1中执行,则他对此数据段的读操作将成功。如果John的程序在环3中执行,则任意读操作成功,而写操作失败。如果John的程序在环5中执行,则所有的访问请求都将失败。