7.5 文件保护
L45
学习目标
文件保护通过访问矩阵和访问控制确保文件不被非法访问和修改。
- 保护域(Protection Domain):定义进程可访问的资源集合,进程在域中执行操作。
- 访问矩阵:行代表域,列代表对象,矩阵元素为允许的操作(读/写/执行)。
- 访问矩阵的实现:访问控制表(按列存储,每个对象的访问权限)和访问权限表(按行存储,每个域的权限)。
原理 · 深入理解
7.5 文件保护
本节概览:先建立「文件保护」的框架,再依次展开下列小节。
- 保护域(Protection Domain)
- 访问矩阵
- 访问矩阵的修改
- 访问矩阵的实现
7.5.1 保护域(Protection Domain)
为对资源进行保护而引入保护域(简称「域」)的概念:域是进程对一组对象访问权的集合,进程只能在指定域内执行操作。这样,域就规定了进程所能访问的对象和能执行的操作。
进程和域间的动态联系方式:进程在运行过程中可从一个域切换到另一个域,从而按需改变访问权集合,实现最小权限原则。
切换不是任意的,必须作为一种权力加以控制:只有当进程具备切换权时,才允许从当前域切换到目标域。
为对系统中的对象加以保护,应由系统控制进程对对象的访问。对象可以是硬件对象(如磁盘驱动器、打印机),也可以是软件对象(如文件、程序);对对象施加的操作也不同,如对文件可读、写或执行。
把一个进程能对某对象执行操作的权力称为访问权(Access right)。
进程和域之间可以一一对应,即一个进程只联系一个域,称为「静态域」。进程运行的全过程都限于同一域,这会使赋予进程的访问权超过实际需要。
进程和域之间也可以是一对多关系:将进程运行分为若干阶段,每个阶段联系一个域,从而可按运行实际需要规定每个阶段所能访问的对象。
7.5.2 访问矩阵
可用一个矩阵描述系统的访问控制,称为访问矩阵(Access Matrix)。行代表域,列代表对象,矩阵中每一项由一组访问权组成。
由于对象已由列显式定义,可只写访问权而不必写出对哪个对象的访问权。每一项 access(i, j) 定义了在域 Di 中执行的进程能对对象 Qj 所施加的操作集。
为实现进程和域间的动态联系,应能让进程从一个保护域切换到另一个保护域。切换也作为一种权力加以控制,仅当进程有切换权时才能进行。
为此,在访问矩阵中又增加几个对象,分别把它们作为访问矩阵中的几个域;当且仅当 switch ∈ access(i, j) 时,才允许进程从域 i 切换到域 j。
7.5.3 访问矩阵的修改
拷贝权和所有权都用于改变矩阵内同一列(同一对象在不同域中)的访问权;控制权(Control Right)则用于改变矩阵内同一行(同一域对不同对象)的访问权。
若 access(i, j) 中包含控制权,则在域 Di 中运行的进程可以删除在域 Dj 中运行的进程对各对象的任何访问权。
拷贝权(Copy Right):用于将在某个域中所拥有的访问权 access(i, j) 扩展到同一列的其它域中,即给进程在其它域中也赋予对同一对象的访问权 access(k, j)。
所有权(Owner Right):不仅要求能将已有访问权有控制地扩散,还要能增加或删除某种访问权。利用所有权 (O) 可实现这些操作——拥有者可自由增删对自己对象的各种访问权。
7.5.4 访问矩阵的实现
访问控制表(Access Control List,ACL):对访问矩阵按列(对象)划分,为每一列建立一张 ACL。表中把矩阵中属于该列的所有空项删除,由有序对(域,权集)组成。
由于大多数情况下矩阵中空项远多于非空项,使用 ACL 可显著减少所占存储空间,并提高查找速度。
访问权限表(Capabilities):把访问矩阵按行(域)划分,每一行构成一张访问权限表,即一个域对每个对象可执行的一组操作所构成的表。
表中每一项即该域对某对象的访问权限。当域为用户(进程)、对象为文件时,访问权限表可描述一个用户对每个文件所能执行的一组操作。
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
文件保护
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能举出嵌入式简化保护的一种做法。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
延伸思考
- 多租户物联网网关为何又要细粒度 ACL?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?