Alex_McAvoy

想要成为渔夫的猎手

文件共享与文件保护

【文件共享】

概述

文件共享使多个用户进程共享同一份文件,系统中只需要保留该文件的一份副本即可

若系统不能提供共享功能,那么每个需要使用该文件的用户都要有各自的副本,这会对存储空间造成极大的浪费

目前,文件共享的范围已经从单机系统发展到多机系统,并通过网络扩展到全球,通过分布式文件系统、远程文件系统等实现,允许多个客户通过 C/S 模型共享网络中的服务器文件

硬链接

硬链接又称基于索引结点的共享方式,其常见于树形结构的目录中

在这种共享方式中,文件的物理地址、文件属性等信息,不再存放在目录项中,而是存放在索引结点里,文件目录中只设置文件名及指向相应索引结点的指针

在该方式中,当有两个或多个用户要共享一个子目录或文件时,必须将共享文件或子目录链接到两或多个用户的目录中,以方便找到该文件

因此,在索引结点中,还存在一个链接计数器 count,用于表示链接到该索引结点(该文件)上的用户目录项的数目

当用户 $A$ 创建一个新文件时,其便是该文件的所有者,此时令 count=1,当有用户 $B$ 要共享该文件时,会在用户 $B$ 的目录中增加一个目录项,并设置一个指向该文件索引结点的指针,此时,文件主仍然是用户 $A$,链接计数器 count=2

若用户 $A$ 不再需要该文件,其并不能将该文件直接删除,因为若删除该文件,必然会删除该文件的索引结点,这会导致用户 $B$ 的指针悬空,因此,若 $A$ 不再需要该文件时,只是将该文件的链接计数器 count--,然后删除自己目录中的相应目录项

当某一文件的链接计数器 count=0 时,表示没有用户使用该文件,系统会将删除该文件

软链接

软链接又称利用符号链的共享方式,其是借助操作系统自动创建的 LINK 类型的文件来实现的

在该方式中,若用户 $B$ 想共享用户 $A$ 的一个文件 $F$,那么系统会创建一个也取名为 $F$ 的 LINK 类型的文件,并将文件 $F$ 写入用户 $B$ 的目录中,以实现用户 $B$ 的目录与文件 $F$ 的链接,同时,在新文件中,只包含被链接文件 $F$ 的路径名

新文件中的路径名只被看作符号链,当用户 $B$ 要访问被链接的文件 $F$ 且正要读 LINK 类型的新文件时,操作系统会根据新文件中的路径名去读该文件,从而实现用户 $B$ 对文件 $F$ 的共享

在利用该方法实现文件共享时,只有文件的拥有者才拥有指向其索引结点的指针,共享该文件的其他用户只有该文件的路径名,并不拥有指向其索引结点的指针

当文件拥有者将一个共享文件删除后,其他用户通过符号链再去访问,会出现访问失败的情况,此时会将符号链删除,不会出现错误

但当文件拥有者将一个共享文件删除后,另一用户在同一路径下创建一个具有同样名称的文件,那么符号链将仍然有效,但实际上访问的文件已经改变,则会导致访问的文件并不是实际想要访问的文件

静态共享与动态共享

硬链接和软链接都是文件系统中的静态共享方法,硬链接就是多个指针指向同一索引结点,保证只要还有一个指针指向该索引结点时,索引结点就不会被删除;软链接就是将到达共享文件的路径记录下来,当要访问文件时,就根据路径去寻找文件

但在文件系统中,还存在着其他的共享需求,即两个进程同时对同一文件进行操作,这种共享被称为动态共享

【文件保护】

概述

为防止文件共享可能导致的文件被破坏或未经核准的用户修改文件,文件系统必须控制用户对文件的存取,即解决对文件的读、写、执行的许可问题

为此,在文件系统中,建立了相应的文件保护机制,其通过口令保护加密保护访问控制等方式实现,其中,口令保护和加密保护是为了防止用户文件被他人窃取,访问控制用于控制用户对文件的访问方式

口令保护

口令,是指用户在建立一个文件时要提供口令,系统在为其建立 FCB 时将会附加上该口令,在其他用户请求访问时,必须提供相应口令

该方法的时间、空间开销不大,但口令直接存在于系统内部,不够安全

加密保护

密码,是指用户对文件进行加密,当文件被访问时,需要提供密钥来对加密后的文件解密

该方法保密性强,节省了存储空间,但编码、解码需要花费一定的时间

访问控制

访问控制最常见的方法是根据用户身份进行控制,其为每个文件和目录增加一个访问控制表(Access Control List,ACL),以规定每个用户所允许的访问类型

使用 ACL 可以制定灵活的访问方法,但长度无法预计且可能导致复杂的空间管理

为此,有了精简的访问列表,其只有三种用户类型:

  • 拥有者:创建文件的用户
  • :一组需要共享文件且具有类似访问的用户
  • 其他:系统内的其他用户

这样,只需要使用三个域列出访问表中这三类的访问权限即可

感谢您对我的支持,让我继续努力分享有用的技术与知识点!