文件的共享和保护
本文内容

1 文件共享
操作系统为用户提供了文件共享功能,可以让多个用户共享地使用同一个文件。
共享 vs 复制
(1) 多个用户共享一个文件,意味着系统中只有一份文件数据。并且只要某个用户修改了文件的数据,其他用户也可以看到文件数据的变化。
(2) 如果是多用户都复制了同一个文件,那么系统中会有多份文件数据。其中一个用户修改了自己的那份文件,对其他用户的文件数据并没有影响。
1.1 基于索引节点的共享方式(硬链接)
上p篇文章说到索引节点是文件目录瘦身策略。由于检索文件时需要用到文件名,因此可以将除文件名之外的其他信息放到索引节点中。这样目录项就包含了文件名、索引节点指针。
在索引节点中设置一个链接计数变量count,用于表示链接到本索引节点上的用户目录项数。
如下图所示,如果count = 2,说明此时有两个用户目录项链接到该索引节点,或者说是有两个用户在共享此文件。

如果此时User1删除该文件,则只是把用户目录中与该文件对应的目录项删除,且索引节点的count值减1。

只要count的值不为0,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
当count=0时系统负责删除文件。
1.2 基于符号链的共享方式(软链接)
假如操作系统中用户1和用户2通过硬链接的方式共享文件1,如果此时用户3想通过软链接的方式来共享这个文件,那么用户3就会创建一个文件,这个文件是一个特殊的link文件,这个文件中存放了文件1的存储路径

当User3访问“ccc”时,操作系统判断文件“ccc”属于Link类型文件(Windows操作系统快捷方式就是.link文件),于是会根据其中记录的路径层层查找目录,最终找到User1的目录表中的“aaa”表项,于是找到了文件1的索引节点,就可以访问文件1。
如果此时用户1和用户2都删除了文件1,那么此时文件1就会被从外存中删除,但是文件1的删除并不会导致文件2的删除,当用户3访问“ccc”时,同样操作系统会根据文件2中存放的路径去查找,此时文件2已经被删除,所以肯定找不到了,所以文件2就失效了,类比于Windows操作系统中快捷方式就是“此快捷方式所指向的路径已经被删除”。
2 文件共享小结

3 文件保护
文件保护有三种方式:口令保护、加密保护、访问控制。
3.1 口令保护
口令保护:为文件设置一个口令,用户请求访问该文件时必须提供口令。
口令一般存放在文件对应的FCB或索引节点中。用户访问文件前需要先输入口令,操作系统会将用户提供的口令和FCB中存储的口令进行对比,如果正确,则允许用户访问文件。
优点:保存口令的空间开销不多,验证口令的时间开销也很小。
缺点:正确的口令存放在系统内部,不够安全。
3.2 加密保护
加密保护:使用某个“密码”对文件加密,在访问文件时需要提供正确的“密码”才能进行正确的解密。
以一个最简单的加密算法——异或加密为例。假设用于加密/解密的“密码”为01001。
假设原始文件的数据如下

用原始数据和密码进行异或运算得到加密的结果。

当使用正确的密码进行解密时,就可以得到正确的文件原始数据。

如果使用了不正确的密码进行解密,得到的就是错误结果。

优点:不需要在系统中存储“密码”,提高了安全性。
缺点:加密/解密(编码/译码)需要花费一定的时间。
3.3 访问控制
访问控制:在每个文件的FCB(或索引节点)中增加一个访问控制表(Acess-Control List,ACL),该表记录了各个用户可以对该文件执行哪些操作。
通常以组为单位,标记各组用户可以对文件执行哪些操作。类比网站游客、用户、VIP用户、管理员有不同的操作权限。假设分为系统管理员、文件主、文件主同伴、其他用户几个分组,当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。

这种方式灵活,可以实现负责的文件保护功能。
4 文件保护小结
