文章目录
- 0. 前言
- 14.1 保护目标
- 14.2 保护原则
- 14.3 保护域
- 14.3.1 域结构
- 14.3.2 实例:UNIX
- 14.3.3 实例:MUTICS
- 14.4 访问矩阵
- 14.5 访问矩阵的实现
- 14.5.1 全局表
- 14.5.2 对象的访问列表
- 14.5.3 域的能力(权限)列表
- 14.5.4 锁-钥匙机制*
- 14.5.5 比较*
- 14.6 访问控制
- 14.7 访问权限的撤回
0. 前言
对操作系统的进程必须加以保护,以便免受其他进程活动的干扰。为了提供这种保护,我们可以采用多种机制来确保只有获得操作系统恰当授权的进程才能操作文件、内存段、CPU和其他系统资源。
保护作为一种机制,用于控制程序、进程或用户访问计算机系统定义的资源。这种机制必须提供手段,来指定是假的控制以及采取的强制方式。安全有别于保护,安全是保留系统和数据的完整性的信心度量。本章专注于保护。安全保障是个更加广泛的的话题,第15章会讨论。
本章目标:
- 讨论现代计算机系统的保护目的与原则
- 解释保护域或访问矩阵如何用与指定进程可以访问的资源
- 分析基于能力的和基于语言的保护系统
保护(protection),是从资源访问权限(授权)这个角度去考虑的,是指一种控制程序、进程或用户对计算机系统资源进行访问的控制。
安全:防范人主动进行攻击,从攻击这个角度。完整性,保密性,身份认证。抗否认。
14.1 保护目标
- 防止用户有意的、恶意的违反访问约束。
- 需要确保系统当中活动的程序组件只以与规定的策略一致的方式使用资源。
保护在计算机中扮演的角色是:
为实施资源使用的控制策略提供一种机制。可以通过各种途径建立这些策略。一个保护系统需要有一定的灵活性,从而能实现多种策略。
14.2 保护原则
一个经过时间检验的关键保护指导原则是最小特权原则(principle of least privilege):用户,程序和系统只被定义了能做什么,其余的都是不能做的。
这使得部件的出错/危害最小化
14.3 保护域
一个计算机系统是进程和对象的集合。对象分为硬件对象和软件对象,每个对象都有唯一的名字与其他对象区分。
要求: 用户只能通过定义好的、有意义的操作来访问对象。
为了方便研究最小特权原则这个策略,定义了保护域(protection domain),假定一个进程只在一个保护域内操作。
14.3.1 域结构
一个域是一个访问权限的集合,每一个访问权限是一个有序对 <对象名,权限集>
在一个对象上执行一个操作的权限是一种访问权限(access )。
域之间是允许存在交集的,它们可以共享访问权限。但要注意,一个进程一个时间只能处于一个域中。
一个域和一个进程之间的关联可以是静态的,也可以是动态的。一个进程的资源集合在进程的生命期固定不变,那么这种关联是静态的,否则则是动态的。
如果关联是动态的,则必须提供一个允许进程在域之间切换的域切换(domain switching)。
标准双模式(监控-用户模式)模型
当一个进程在监控模式下执行时,它可以执行特权指令并完全控制计算机系统。另一方面,如果进程在用户模式下执行时,它只能调用非特权指令。
这两种模式保护了操作系统(在监控域执行),使其免受用户进程(在用户域执行)的干扰。
14.3.2 实例:UNIX
在UNIX系统中,域和用户是关联的。域切换会配合用户身份的临时切换。
这个变动由文件系统完成。
每个文件都有一个所有者身份表示和一个域位(设置用户ID位)与它相关联。当设置用户ID位打开,用户执行文件,用户ID被设置为文件的所有者;而当设置用户ID位关闭时,用户ID 不改变。
如:当用户A(用户ID=A)开始执行一个属于B的文件时,如果此时B的关联域位是关闭的,那么该进程的用户ID会被设置成A;
如果这个设置用户ID位是开启的,那么该进程的用户ID应该设置为文件的所有者B。
如果进程退出,这个临时的用户ID的变动就随之结束。
14.3.3 实例:MUTICS
MULTICS系统将保护域组织成一个环状层次结构。
每个环对应一个单独的域。这些环按顺序用数字0~7编号。Di和Dj(0<=i,j<=7)为任意的两个域,如果j<i,那么Di是Dj的一个子集。也就是说,在Dj中运行的进程比在Di中运行的进程拥有更多特权。一个在D0中执行的进程拥有最多特权。
如果只存在两个环,那么这个策略就等价于监控-用户执行模式,监控模式对应D0,而用户模式对应D1
14.4 访问矩阵
访问矩阵(access matrix) 是访问模型的一种抽象,其中行代表域,列代表对象。
由于列明确定义了对象,可以在访问权限中删除对象名称。
访问条目**access(i,j)**定义了域Di中执行的进程在调用对象Oj时被允许执行的操作的集合。
访问矩阵策略提供了一个指定多样化策略的机制,其包括:
- 实现访问矩阵
- 确保维持在提纲中提及的语义属性,即必须确保在域Di中执行的进程只能访问在行i中指定的对象
通常由用户决定访问矩阵条目的内容。当用户创建一个新的对象Oj时,列Oj就被添加到访问矩阵,并恰当的初始化条目(添加权限)
访问矩阵为进程和域之间的静态和动态关联提供了一种定义和实现严格控制的机制。当需要将一个进程从一个域切换到另一个域时,其实是在一个对象(域)上执行一个操作(切换)。
进程必须能够在域之间进行切换。而当进程需要切换域时,可以将域添加到访问矩阵。也可以更改矩阵的内容。
另外访问矩阵还需要三个额外的操作:
- 复制
- 所有者
- 控制
有关这些操作的具体内容,参考P467
14.5 访问矩阵的实现
为了有效的实现访问矩阵,需要一种数据结构。
由于保护的特殊性,不适合使用稀疏矩阵的数据结构。
14.5.1 全局表
采用有序三元集合**<域,对象,权限>** 构成一个表。
缺点:
- 表通常很大,无法将整张表放在内存中,因此需要额外的IO开销。(通常会使用虚拟内存技术来管理这个表)
- 很难利用对象和域的特殊的分组方式
14.5.2 对象的访问列表
可以抛弃空的条目,每个对象的列表由有序对**<域,权限集>** 组成。
当用户想在域Di 中对对象Oj执行操作M时,系统开始在访问权限列表中为对象Oj查找条目<Di,Rk>,查找条件是M∈Rk,如果查找成功,那么操作可以继续。
D1 = read,write
D2 = read
...//操作系统概念第十章文件系统接口
对象的访问列表方法可以做一些扩充:定义一个列表和一个默认的访问权限集合。如果在访问权限列表中查找失败,则可以在默认集合中查找。
也可以先查找默认集合,再查找访问列表。
14.5.3 域的能力(权限)列表
将每个行关联到域。域的权限列表由对象以及允许作用在这些对象上的权限组成。一个对象通常用自己的物理名称或地址标识,被称为权限。
O1 = read
O2 = excute
... //[TODO]P469
用户是域的具体实现[TODO]
14.5.4 锁-钥匙机制*
14.5.5 比较*
访问控制
Solaris10通过使用基于角色的访问控制显式地增加了最小特权原则。
此方法以特权为主要内容。特权可赋与进程,限制它们只访问完成其工作所需要的内容。
另外,也可以将特权和程序分配给角色(role),角色可以分配给用户,用户也可以根据角色密码来获取角色。
特权是执行系统调用的权利或使用该系统调用一个选项的权利(如用写访问打开一个文件)
14.6 访问控制
14.7 访问权限的撤回
采用访问列表策略的撤回
在访问列表中搜索要撤回的访问权限,然后从列表中删除这些权限。而且灵活性很强
采用权限列表策略的撤回
对于权限来说,撤回要麻烦很多,撤回权限有以下几种方式:
重新获得
折回指针
间接
钥匙
详细解释参考P471