概述
我们需要对存储在计算机中的信息进行保护。这种保护包含两个方面:
- 避免物理损坏(可靠性的问题,简单的来说是磁盘损坏,文件丢失)
- 非法访问(保护的问题,简单的来说就是用户没有该文件对应的访问权限,但做了相关的操作。)
访问类型
通过对文件的访问类型加以控制可以实现文件的保护,下面我们就看看常见文件的访问类型有哪些
- 读: 从文件中读取
- 写: 写或重写文件
- 执行: 加载文件到内存中并执行它
- 附加: 在文件末尾写入新的信息
- 删除: 删除文件并释放空间以便重复利用。
- 列表: 列出文件的名称和属性。
其他文件的操作。例如:重命名、复制、编辑。也可以加以控制,通过利用低级的系统调用,来实现这些高级功能。例如:复制,用户只要有读的权限,就可以实现文件的复制。
访问控制
保护最常见方法是,根据用户身份进行控制。基于身份最普通的实现方法是:为每个文件或目录关联一个访问控制列表(ACL), 如下图所示。在ACL中指定每个用户的名称及其允许的访问类型。当用户请求访问该文件时,操作系统去查询该文件所关联的ACL,从ACL中得到用户这次请求的访问类型是否被允许,如果允许则正常操作,否则,操作系统会拒绝用户访问该文件。
(下面的列表0代表不允许 1代表允许)
读 | 写 | 执行 | 附加 | 删除 | 列表 | |
---|---|---|---|---|---|---|
用户A | 1 | 1 | 1 | 1 | 1 | 1 |
用户B | 1 | 0 | 1 | 0 | 0 | 0 |
… | … | … | … | … | … | … |
上面采用ACL能够进行复杂的访问控制,但是ACL的主要问题是他们的长度,这种技术有两个不可取的后果:
- 构建访问控制列表是个冗长乏味的任务。
- 目录条目的大小是可变的,会导致更复杂的空间管理。
通过采用精简的访问列表,可以解决这些问题。精简的访问控制列表,主要把用户分为了3大类:
- 所有者: 创建该文件的用户。
- 组: 共享文件并且需要类似访问的一组用户。
- 其他: 系统内的其他文件。
通过把用户分成3大类,上面的访问控制列表。变成如下:
读 | 写 | 执行 | 附加 | 删除 | 列表 | |
---|---|---|---|---|---|---|
所有者 | 1 | 1 | 1 | 1 | 1 | 1 |
组 | 1 | 1 | 1 | 0 | 0 | 0 |
其他 | 1 | 0 | 0 | 0 | 0 | 0 |
当我们新增一个用户的时候,采用复杂的ACL,需要向ACL中添加一行;但是采用精简的ACL,访问控制列表不需要变动,我们可以把新增的用户放入组或者其他中,实现了这个用户对该文件的访问控制。
3. 其他的保护方式
另一个保护的方式是:为每个文件加密码。但是随着文件的增加,记住每个文件的密码将变得极为困难。如果用户将所有密码设置成一样,将失去对文件的保护,因为我们可以通过该密码去访问别的文件。
有些系统允许用户将密码和子目录相关联来解决这个问题。