使用访问控制技术,可以设置用户对系统资源的访问权限,即限定用户只能访问允许访问的资源。访问控制还可以通过设置文件的属性,来保护文件只能被读而不能被修改,或只允许核准的用户对其进行修改等。
1.1 保护域
把一个进程能对某对象执行操作的权利称为访问权,它可以用一个有序对<对象名,权集>
来表示,例如,某进程对文件F1
有执行读和写操作的权利,这时,该进程的访问权可表示为<F1,{RW}>
。
保护域是进程对一组对象访问权的集合,进程只能在指定域内执行操作。因此,保护域规定了进程所能访问的对象和能执行的操作。
不同的保护域可以相交,相交部分表示它们有共同的权限。
补充:
R:读操作
W:写操作
E:执行操作
S:切换操作
实例:
在下图所示的3个域中,它们分别是D1
,D2
和D3
。其中D2
和D3
相交,表明访问权限<O7,{W}>
被D2
和D3
共享,这表示运行在D2
和D3
上的任意一个进程都可以对对象O7
执行写操作。需要注意的是,进程只有在D1
中执行时才能读写对象O1
,另外,仅在域D3
中的进程才能执行对象O6
。
1.2 访问矩阵
保护域机制是实现系统资源保护的一种模型,我们可以利用一个矩阵来描述这种模型,称之为访问矩阵(Access Matrix)。
访问矩阵的行代表域,列代表对象。矩阵的每个条目是一个访问集合。由于列明确定义了对象,可以在访问权限中删除对象名称。条目<i,j>
定义了在域Di
中执行的进程在访问对象Oi
时被允许执行的操作集合。
实例:
在下表所示的访问矩阵中,进程在域D1
中执行时,它可以读文件F2
,写文件F1
和F2
,执行文件F2
和F3
。进程在域D4
中执行时,可以读文件F2
和F3
,写文件F1
。只有在域D2
中执行的进程才可以访问打印机。
对象域 | F1 | F2 | F3 | 打印机 |
---|---|---|---|---|
D1 | W | R, W, E | E | |
D2 | R | W | ||
D3 | E | R | ||
D4 | R, W | R |
如果将域本身也看作一个保护对象,可以把域的切换操作添加到访问控制矩阵,这样即可控制域切换。当需要将一个进程切换到另外一个域时,其实就是在一个对象(域)上执行一个操作(切换)。进程必须能够在域之间进行切换,当且仅当访问权限switch∈access(i,j)
时,才允许从域Di
切换域Dj
。
实例:
在下表中,一个在域D2
中执行的进程可以切换到域D3
。域D4
中的一个进程可以切换到域D1
,而D1
中的进程可以切换到域D2
。
对象域 | F1 | F2 | F3 | 打印机 | D1 | D2 | D3 | D4 |
---|---|---|---|---|---|---|---|---|
D1 | W | R, W, E | E | S | ||||
D2 | R | W | S | |||||
D3 | E | R | S | S | S | |||
D4 | R, W | R | S |
1.3 访问矩阵的实现
访问控制表
把访问矩阵按列向量(对象)划分,为每一列建立一张访问控制表ACL
(Access Control List)。
在该表中,矩阵中属于该列的所有空项已被删除,只剩下有序对<域,权集>
。通常情况下,访问矩阵中的空项远多于非空项,因而使用访问控制表可以显著地减少所占用的存储空间,提高查找速度。
实例:
进程在域D1
中执行时,它可以读、写和执行文件F2
。进程在域D3
中执行时,可以执行文件F2
。由于域D2
和D4
为空,因此,访问控制表中不包含D2
和D4
项,从而节省了存储空间。
对象域 | F2 |
---|---|
D1 | R, W, E |
D3 | E |
访问权限表
把访问矩阵按行(域)划分,为每一行建立一张访问权限表CL
(Capability List)。访问权限表是由一个域对每一个对象可以执行的操作集合所构成的表。访问权限表包括两部分:对象名和访问权。表中的每一项为该域对某对象的访问权限。
实例:
进程在域D1
中执行时,它可以写文件F1
,读、写和执行文件F2
,执行文件F3
。
对象域 | F1 | F2 | F3 |
---|---|---|---|
D1 | W | R, W, E | E |