文件系统概述
一、概述
操作系统对系统的软件资源(不论是应用软件和系统软件)的管理都以文件方式进行,承担这部分功能的操作系统称为文件系统。
1、文件
计算机系统对系统中软件资源:无论是程序或数据、系统软件或应用软件都以文件方式来管理。文件是存贮在某种介质上的(如磁盘、磁带等)并具有文件名的一组有序信息的集合。 文件名是由字符和数字组成的,例如MS-DOS中文件名由三部分组成,格式如下:[<盘符>] <文件名> [.扩展名]。格式 [ ] 中是可以省略,盘符为存放文件的磁盘驱动器号,如用A:和C:分别 表示软盘和硬盘驱动器;文件名由1∽8个字符组成。扩展名为由“.”开始的1-3个字符组成,如.EXE表示可执行的浮动代码文件,.TXT表示ASCⅡ码文本文件,.LIB表示库文件,.BAT表示批处理文件等。
UNIX 文件系统将文件分成普通文件、目录文件、设备文件(特殊文件)和符号连接文件(Symbolic link)等几类,UNIX把所有I/O设备作为特殊文件,对I/O设备操作模仿为对普通文件的存取,这样将文件与设备的I/O尽可能统一起来。
数据项是描述一个对象的某些属性的字符集,它是数据的基本单位,一个数据项有一个值。记录是一组相关数据项的集合,用于描述一个对象某方面的属性。 文件是具有文件名的一组相关记录的集合。数据库是相关数据的集合。
2、文件系统
文件系统是操作系统中以文件方式管理计算机软件资源的软件和被管理的文件和数据结构(如目录和索引表等)的集合。
从系统角度来看,文件系统是对文件存储器的存储空间进行组织、分配和回收,负责文件的存储、检索、共享和保护。从用户角度来看,文件系统主要是实现“按名存取”,文件系统的用户只要知道所需文件的文件名,就可存取文件中的信息,而无需知道这些文件究竟存放在什么地方。
文件系统的类型:
(1)FAT文件系统(MS-DOS文件系统、msdos)
它是MS-DOS操作系统使用的文件系统,它也能由Windows98/NT、linux、SCO UNIX等操作系统访问。文件地址以FAT表结构存放,文件目录32B,文件名为8个基本名加上一个“.”和3个字符扩展名。
(2)扩展文件表系统(vfat)
它是Windows98使用的扩展的DOS文件系统,它在MS-DOS文件系统基础上增加了对长文件名(最多到256B)支持。
(3)NTFS(NT文件系统)
它是Windows NT操作系统使用的文件系统,它具有很强的安全特性和文件系统恢复功能,可以处理巨大的存储媒体,支持多种文件系统。
(4)ext2(二级扩展文件系统)
它是Linux操作系统使用的高性能磁盘文件系统,它是对Minux操作系统中使用的文件系统扩展(ext)的扩展。它支持256字符的文件名,最大可支持到4TB的文件系统大小。
(5)HPFS(高性能文件系统、hpfs)
它是OS/2操作系统使用的文件系统。
(6)S51K/S52K(sysv)
它是AT&T UNIX S V 操作系统使用的1KB/2KB文件系统。
(7)CD-ROM文件系统(iso9660)
它是符合ISO9660标准的支持CD-ROM的文件系统,它有High sierra CD-ROM和Rock Ridge CD-ROM二种类型。
(8)UDF通用磁盘格式文件系统
UDF(Universal Disk Format)文件系统是依据光学储存技术协会(Optical Storage Technology Association, OSTA)的通用磁盘格式文件系统规格1.02版所制定的。它提供了对 UDF格式媒体的只读访问(例如DVD光盘)。Windows98提供对UDF文件系统支持。
现代操作系统(如Windows 2000/XP、Linux、UNIX等)提供了对多种文件系统的支持。
(1)Windows 2000/XP
Windows 2000/XP支持FAT文件系统、NTFS、HPFS、CD-ROM文件系统等多种文件系统。 Windows 2000执行体内I/O系统分成I/O管理程序、文件系统驱动程序和盘驱动程序三层,不同的文件系统采用不同的文件系统驱动程序,系统用动态连接库对这些文件系统进行装入和卸出并适宜于将来的扩展。
(2)Linux
Linux支持ext、ext2、msdos、vfat、iso9660、hpfs等多种文件系统。Linux采用虚拟文件系统VFS支持许多不同类型的文件系统,VFS是物理系统与服务之间的一个接口层,它屏蔽各类文件系统的差异,给用户和程序提供一个统一的接口。使用命令mkfs创建各类文件系统。
二、文件的组织
文件的组织是指文件的构造方式,从用户观点出发观察到的文件组织结构称为文件的逻辑结构;而文件在外存上的存储组织形式称为文件的物理结构,又称文件的存储结构。
1、文件的逻辑结构和存取方法
从用户观点出发观察到的文件组织结构称为文件的逻辑结构,逻辑结构的文件称逻辑文件。逻辑文件从结构上分成二种形式,一种是无结构的流式文件,另一种是有结构的记录式文件。
流式文件是指对文件内信息不再划分单位,它是依次的一串字符流构成的文件。记录式文件是用户把文件内的信息按逻辑上独立的含义划分信息单位,每个单位称为一个逻辑记录(简称记录)。所有记录通常都是描述一个实体集的,有着相同或不同数目的数据项,记录的长度可分为定长和不定长记录两类。
记录文件有顺序、索引、索引顺序、直接、分区和堆文件几种。
堆(The Pile)文件(累积文件)
堆文件是最简单的记录文件,它是串结构的顺序文件。数据按先来后到的次序组织,每个记录所包含的数据项是自我标识的,数据项的长度可以明确指定或使用界定符区分。在堆文件中访问所需要的记录需穷尽搜索,这种文件组织不适合大多数应用。
顺序文件(Sequential File)
顺序文件的记录定长,记录中的数据项的类型长度与次序固定,一般还有一个可以唯一标识记录的数据项,称为键(key),记录按键值的约定次序组织。顺序文件常用于批处理应用,对于查询或更新某个记录的请求的处理性能不佳。
索引文件(Indexed File)
索引文件对主文件中的记录按需要的数据项(一个或几个)建索引表。这时记录可为不定长的,它为每个记录设置一个表项。索引文件本身是顺序文件组织。
索引顺序文件(Indexed Sequential File)
索引顺序文件是基于键的约定次序组织的,为之建立一张索引表,为每个不同键值的记录组的第一个记录设置一个表项,为该组的其它记录设置了溢出区域,在溢出区域内记录按顺序文件方式组织。它是顺序文件和索引文件的结合。索引顺序文件既适用于交互方式应用,也适用于批处理方式应用。
直接文件/哈希文件(The Direct/Hashed File)
检索时给出记录编号,通过哈希函数计算出该记录在文件中的相对位置。它可以对记录在直接访问存储设备上的物理地址直接(随机)访问。直接文件常用于需要高速访问文件而且每次访问一条记录的应用中。
用户通过对文件的存取来完成对文件的修改、追加和搜索等操作。常用的存取方法有顺序存取法、随机存取法(直接存取法)和按键存取法三种。
顺序存取法是按照文件的逻辑地址顺序存取,在记录式文件中,这反映为按记录的排列顺序来存取,在无结构的字符流文件中,顺序存取反映当前读写指针的变化。
随机存取法允许用户根据记录的编号来存取文件的任一记录,或者是根据存取命令把读写指针移到欲读写处来读写。
按键存取法是一种用在复杂文件系统,特别是数据库管理系统中的存取方法,文件的存取是根据给定的键或记录名进行的。
UNIX、Linux和Windows等操作系统都采用顺序存取和随机存取两种方法。
2、文件的物理结构
文件在存储介质上的组织方式称为文件的存储结构或称文件的物理结构、物理文件。
外存分配方法有连续分配、链接分配、索引分配,相应物理文件有:顺序文件、链接文件、索引文件。
连续分配—顺序文件
把逻辑文件中连续的信息存储到磁盘连续的物理盘块中所形成的文件称为顺序文件。这种文件保证了逻辑文件中逻辑记录(流式文件为逻辑块、页)顺序和存储器中文件占用盘块顺序的一致性。为使系统能查找文件中任一记录,在文件控制块FCB(或在目录)中存放文件第一个记录所存放的盘块号ADRR和文件总的盘块数N。
优点是管理简单,顺序存取速度快。缺点是增删记录相当困难,磁盘存储空间的利用率不高,有外零头。所以顺序文件只适用于长度不变的只读文件。
链接分配 —链接文件
在将逻辑文件存储到外存上时,不要求为整个文件分配连续的空间,而是可以装入到离散的多个盘块中,只在每个盘块最后一个单元设置链接指针(这称为隐式链接) ,然后用链接指针将这些离散的盘块链接成一个队列,这样形成的物理文件称为链接文件。管理链接文件只需在文件控制块FCB中设二项,一是存储文件头块信息的盘块号,另一是存储文件尾块信息的盘块号。
链接文件的优点是盘存储空间利用率高,文件增删改记录方便。缺点是在随机存取某一个记录前需要化多次盘I/O操作读该记录前的文件信息以取得该记录的盘块号,才能存取该记录。如要读取逻辑块号第3块的信息,就要先进行3次盘I/O操作以读取存放第3块逻辑块信息的盘块号,所以链接文件只适用于顺序存取文件。
索引分配 —索引文件
索引文件是实现非连续存储的另一种方法,系统为加快记录的检索过程,为每个文件建立了一张索引表,每个逻辑块在索引表中占有一个表项,登记存放该逻辑块的盘块号。在FCB中放置了索引表指针,它指向索引表始址,索引表存放在盘块中。
当索引表很大时,需要用多个盘块。管理有多个盘块的索引表有二种方法:
一种方法是将存放索引表的盘块用链接指针链接起来称为链接索引。链接索引可以顺序地读取索引表各索引表项,但读取后面的索引表项类同链接文件需要化费多次盘I/O操作。
另一种方法是采用多级索引,即为索引表本身建立索引表,从而形成了两级索引,如所形成的两级索引表还不能存放在一个盘块中,则需要为二级索引表建索引表,而形成三级索引。
索引文件由于它既适合顺序存取记录又适合按任意次序随意存取记录,也便于增删文件的记录,所以索引结构文件应用范围较广。索引文件的缺点是当文件很大时索引表很庞大,占用了许多盘空间,而在文件很小时,多级索引级别又不变,带来索引块的另头和存取速度减慢。
UNIX/Linux直接间接混合寻址方式
由于80%以上文件是小文件,为了解决能高速存取小文件和管理大文件的矛盾,UNIX将直接寻址、一级索引、二级索引和三级索引结合起来,形成了混合寻址方式。
3、VFAT表结构
MS-DOS文件系统的文件物理结构采用FAT表结构。该结构为了克服链接文件随机读取任一逻辑块需要化费多次盘I/O操作的不足,将各盘块中的链接指针集中存放在盘的开始部分,构成一张表,称为FAT表。(这称为显式链接)FAT表每一项存放链接指针(下一个簇号),每个FAT表项占12位或16位,称为FAT12或FAT16。对于软盘因为容量小,簇数也少,采用12位FAT表,对于硬盘则采用16位FAT表。
FAT表文件系统原为小硬盘的目录结构而设计,由于簇的数目最多只能用16位表示,即最多只能有64K个簇,要用FAT表管理大的磁盘分区,只能采取增大每簇所包含的扇区数,一般根据磁盘的类型和容量大小来决定簇的大小。
三、文件的目录和管理
1、文件控制块FCB
为了实现“按名存取”,系统必须为每个文件设置用于描述和控制文件的数据结构,它至少要包括文件名和存放文件的盘物理地址,这个数据结构称为文件控制块FCB,文件控制块的有序集合称为文件目录,即一个文件控制块FCB就是一个文件目录项。文件控制块FCB中包含的信息有以下三类:
基本信息类
文件名:标识一个文件的符号名,在每个系统中文件必须具有唯一的名字。
文件的物理地址:这由于文件的物理结构不同而不同。对于连续文件就是文件的起始块号和文件总块数;对于MS-DOS是文件的起始簇号和文件总字节数;对于UNIX S V是文件所在设备的设备号、13个地址项、文件长度和文件块数等。
存取控制信息类
文件的存取权限,象UNIX用户分成文件主、同组用户和一般用户三类,这三类用户的读写执行(RWX)的权限。
使用信息类
文件建立日期、最后一次修改日期、最后一次访问的日期;当前使用的信息:打开文件的进程数,在文件上的等待队列等。文件控制块的信息因OS而不同。
2、多级目录
目录结构的组织关系到文件系统的存取速度,关系到文件共享性和安全性,因此组织好文件的目录是设计文件系统的重要环节。
单级目录结构
最简单的目录结构是在整个文件系统中只建立一张目录表,每个文件占一个表目,这称为单级目录。单级目录结构简单,能实现目录管理的基本功能–按名存取,但存在查找速度慢,不允许重名和不便于实现文件共享等缺点,因此它只适用于单用户环境。
多级目录结构
为了解决以上问题,在多道程序设计系统中常采用多级目录结构,MS-DOS和UNIX等操作系统都采用多级目录结构。这种目录结构象一棵倒置的有根树,该树根向下,每一个节点是一个目录,最末一个结点是文件,下图为UNIX树形多级目录结构。在多级目录中要访问一个文件时,必须指出文件所在的路径名,路径名从根目录开始到该文件的通路上所有各级目录名拼起来得到,各目录名之间与文件名之间可用分隔符隔开。在MS-DOS中分隔符为“\”,在UNIX中分隔符为“/”。例如下图中访问命令文件man的路径名为/usr/lib/man,这也称为文件全名。
在多级目录中存取一个文件需要用文件全名,这就允许用户在自己的目录中使用与其它用户文件相同的文件名,由于各用户使用不同的目录,虽二者使用了相同的文件名,但它们的文件全名仍不相同,这就解决了重名问题。
采用多级目录结构也提高了检索目录的速度:如采用单级目录则查找一个文件最多需查遍系统所有文件名,平均也要查一半文件名。而多级目录查找一个文件最多只要查遍文件路径上各目录的子目录和文件,例如上图中要查找文件man,只要查遍root目录、usr目录和lib目录所在子目录和文件就可以。
每访问一个文件都要使用从根目录开始搜索直到树叶的数据文件为止,包含各中间子目录的全路径名是相当麻烦的,同时由于一个进程运行时访问的文件大多局限在某个范围,基于这一点,可为每个用户(或每个进程)设置一个“当前目录”,又称“工作目录”。进程对各文件的访问都相对于“工作目录”而设置路径,这称为相对路径名。相应地,从根目录开始的路径名称为绝对路径名(absolute path name)。用相对路径可缩短搜索路径,提高搜索速度。例:文件mbox的绝对路径名为/usr/ast/mbox,如设置一个“当前目录”为/usr,则文件mbox的相对路径名为ast/mbox。
3、UNIX/Linux树型目录结构
UNIX为了加快目录的寻找速度,UNIX将文件控制块FCB中文件名和文件说明分开。文件说明为索引节点,各文件索引节点集中存放在索引节点区,索引节点按索引节点号排序。而文件名与索引节点号构成目录项,UNIX S V 操作系统的文件名14个字节,索引节点2个字节,共16个字节构成目录项。同一级目录项构成目录文件,在文件区存放。
Linux目录文件中的目录项会变长,以保证系统支持文件名长度可变,最长达255个字符。目录项的前三项是定长的,包含以下信息:(1)索引节点号(4B);(2)目录项长度(2B);(3)文件名长度(2B)。目录项最后是文件名,目录项不能跨越二个块 。
每个文件有一个存放在磁盘索引节点区的索引节点,称为磁盘索引节点,它包括以下内容:(1)文件主标识符和同组用户标识符;(2)文件类型:是普通文件、目录文件、符号连接文件或特别文件(又分块设备文件或字符设备文件);(3)文件主,同组用户和其它人对文件存取权限(读R、写W、执行X);(4)文件的物理地址(5)文件长度(字节数);(6)文件链接数(7)文件最近存取和修改时间等。
4、文件别名(文件共享)
文件共享是指不同的用户使用不同的文件名来使用同一文件。在用一般共享目录结构时,一用户增加文件的内容,只改变自己的文件目录,其它用户不知改变。
基于索引节点(index node)的共享方式
实现文件共享的一种有效方法是基本文件目录法。该方法把所有目录的内容分为文件名和文件说明两部分。一部分称为符号文件目录(SDF),它包含文件符号名和由系统赋予唯一的内部标识符ID组成。另一部分称为基本文件目录(BDF),它包含目录项中除文件符号名外的所有其它信息,并加上与符号目录相一致的内部标识符ID。标识符ID是各文件在基本文件目录中表目的排序号。UNIX/Linux采用了基本文件目录法目录结构。
采用文件名和文件说明分离的目录结构有利于实现文件共享,这里的文件共享是指不同的用户对同一文件可取不同的文件名,即给文件取别名。文件共享是通过在二个不同子目录下取了不同的文件名,但它们具有相同的索引节点号的方法来实现,UNIX/Linux这种目录结构称为树形带勾连的目录结构。
利用符号连接(symbolic link, shortcut)
文件硬连接不利于文件主删除它拥有的文件,因为文件主要删除它拥有的共享文件,必须首先删除(关闭)所有的硬连接,否则就会造成共享该文件的用户的目录表目指针悬空。为此又提出另一种连接方法:符号连接。系统为共享的用户创建一个link类型的新文件,将这新文件登录在该用户共享目录项中,这个link型文件包含连接文件的路径名。该类文件在用ls命令长列表显示时,文件类型为l。当用户要访问共享文件且正要读link型新文件时,操作系统根据link文件类型性质将文件读出的内容作为路径名去访问真正的共享文件。在UNIX中也是使用ln来建立符号连接的共享文件。
采用符号连接可以跨越文件系统,甚至可以通过计算机网络连接到世界上任何地方的机器中的文件,此时只需提供该文件所在的地址,以及在该机器中的文件路径。
符号连接的缺点:其它用户读取符号连接的共享文件比读取硬连接的共享文件需要增多读盘操作。因为其它用户去读符号连接的共享文件时,系统中根据给定的文件路径名,逐个分量地去查找目录,通过多次读盘操作才能找到该文件的索引节点,而用硬连接的共享文件的目录文件表目中已包括了共享文件的索引节点号。
Windows 2000的NTFS,支持文件别名的符号链接方式。
5、内存目录管理
目录查询技术
为了实现用户对文件的按名存取,系统必须首先利用用户提供的文件名,对文件目录进行查询,找出该文件的文件控制块FCB,对UNIX系统即要找出该文件的索引节点。然后根据找到的FCB中所记录的文件物理地址,并根据文件物理组织方式找出文件的盘块号,进而换算出文件在磁盘上的物理位置(柱面号、磁头号、扇区号),最后启动磁盘驱动程序,将所需文件读入内存。对目录查询的技术有两种:线性检索法和Hash法。
内存的目录管理表
目录查询必须通过在磁盘上反复搜索来完成,这要化费不少次的盘块I/O,这样大大浪费了CPU处理时间,降低了处理速度。为了减轻盘I/O负担,采用把当前使用的文件目录表目复制到内存,建立内存的目录管理表。这样只要第一次使用某个目录表目时需要盘I/O来完成读入内存,以后使用该目录表目只要在内存目录管理表中进行,不需再进行盘块I/O,提高了处理速度,由于只把正在使用的目录复制到内存而不是全部目录读入内存,所以内存目录所占容量也不大。
文件操作与目录管理关系
为了让用户灵活方便和有效地使用文件,文件系统提供许多有关文件的系统调用,即文件操作供用户使用。文件系统提供的常用系统调用有“建立”(create)文件、“打开”(open)文件、“写”(write)文件、“读”(read)文件、“关闭”(close)文件、“删除”(delete)文件等。这些操作与目录管理的数据结构关系密切,下面以UNIX为例说明。
(1)建立文件
当用户提出在某个路径或目录下建立文件时,系统首先检查在该目录下有否相同名的文件,如没有的话则在磁盘目录中登记此文件,对UNIX系统则需给它分配索引节点,以保存文件存放的盘块号,同时在该目录文件中增加一个表目,记录文件名和相应的索引节点号。
(2)打开文件
用户使用文件前必须使用“打开”命令打开文件,“打开”命令的任务是磁盘目录中找到该文件的FCB,拷贝到内存,建立内存的目录管理表。对UNIX系统是找到此文件所在的目录文件的表目和磁盘索引节点,然后将它们拷贝到内存,建立系统打开文件表和活动索引节点表有关表目,同时在PCB的用户打开文件表中增加表目,并建立如前图一样的三个表间的联系。
(3)读/写文件
用户(或进程)要读写文件时,利用PCB中用户打开文件表的fP指针可以从三表关系中找到所需读/写的文件所的盘块,在系统打开文件表的表目中设置读写指针f_offset[2]分别记录了进程读/写文件的位置。如在写文件时增加或减少文件所用的磁盘块数,则要修改活动索引节点表的表目中的13个地址项i_addr[13].
(4)关闭文件
当对文件操作完成后,或暂时不用,均需及时使用“关闭”命令关闭文件,将已修改的内存文件目录信息及时写回到磁盘目录中,并释放文件的内存目录表目空间供其它进程使用。对UNIX子系统,关闭文件,将文件在系统打开文件表和活动索引表的表目内容分别写回到磁盘的相应目录文件和索引节点表区,并删除相应表目供它用,同时进程打开文件表中相应表目也删除,以免进程打开文件数超过定值。如用户打开文件并进行读写后未关闭文件就退出,或者发生断电情况,这样都可能会造成这次读写修改信息的丢失。
(5)删除文件
如文件不需要则要用“删除”命令删除文件,根据用户提出的在某目录下的文件名,命令将该文件在目录文件中的表项和相应的索引节点内容删除,释放供它用。
四、文件存储空间的管理
1、磁盘组织
磁盘是常用的存储设备,它具有容量大,存取速度快,可以实现随机存取等优点,是现代操作系统的必需存储设备,也是实现虚拟存储器所必需的硬件。
一个物理磁盘在逻辑上可分为几个区域,分区信息存放在主引导块分区表中。分区表中保存磁盘各种分区起始和终止的磁头、柱面、扇区、总的扇区数等信息。在主引导块中有三种类型分区:主分区、扩展区和逻辑分区。主分区是常用的,加载一个操作系统所需文件安装其上,操作系统必须从主分区上引导,一个硬盘上只能有四个主分区。为了突破四个分区的限制,就要在四个分区中创建立一个扩展分区。扩展分区其实是一个逻辑盘,它不能格式化,也不能分配盘符。但可在扩展分区中创建一个或多个逻辑分区,(或称逻辑驱动器),每个逻辑分区分配一个盘符,可以格式化成一个特定的文件系统,MS-DOS、Windows98和WindowsNT可用fdisk命令将硬盘分区。
2、磁盘空闲块管理和磁盘碎片整理
为了实现存储空间的分配和回收,系统应为存储空间设置相应的结构以记住存储空间的使用情况,并配以相应算法方便地对存储空间进行分配和回收,下面介绍几种常用的文件存储空间管理方法。
空闲表法
空闲表法属于连读分配方法,它为外存上所有空闲区建立一张空闲表,每个空闲区对应一个空闲表项,其中包括序号、该空闲区的第一盘块号,该区的空闲盘块数等信息,再将所有空闲区按起始盘块号递增的次序排列。 UNIX S V操作系统盘对换区空间管理采用空闲表法,它与内存系统页表管理采用同样的数据结构和分配回收算法。空闲表法的缺点是需要专用盘区来存放空闲表,在文件系统中较少采用连续分配。
位示图法
位示图是利用二进制的一位来表示磁盘中一个块的作用情况,当其值为0时表示对应盘块空闲;值为1时盘块已分配。磁盘上所有盘块都有一个二进制位与之对应,这样,由所有盘块所对应的位形成了一个集合称为位示图,位示图用磁盘块存放,称为位图块。
空闲块链接法
空闲块链接法是将磁盘上所有空闲盘区链接在一个队列中,称为空闲块链。请求分配时从链头依次摘下适当数目的空闲盘块来分配,回收时将回收空闲盘块链入空闲块链尾部。空闲块链接法的优点是不需专用块存放管理信息,它的缺点是连续分配回收多块空闲块时需增加盘I/O操作。
成组链接法
UNIX S V操作系统采用成组链接法管理磁盘空闲块,该方法是空闲表法和空闲块链接法的结合,具备分配回收方便,不需专用块来存放分配表等优点。成组链接法将磁盘空闲块分成若干组,如将每100个盘块作为一组,该组空闲块总数和各空闲块块号存入下一组的第一个空闲块中。最后不满100块的那组空闲块总数和各空闲块块号记入磁盘区专用管理块的空闲块管理的数据结构:s_nfree和s_free[100]中。
五、安全和保护
影响文件安全性的主要因素,第一是人为因素,即由于人们有意或无意的行为,而使文件系统中的数据遭到破坏或丢失;第二是系统因素,即由于系统的某部分出现异常情况,而造成对数据的破坏或丢失,特别是作为数据存储介质的磁盘,在出现故障或损坏时,会对文件系统的安全性造成影响;第三是自然因素,即存放在磁盘上的数据,随着时间的推移将可能发生溢出或逐渐消失。
为了确保文件系统的安全性,可针对上述原因而采取以下措施:
(1)通过存取控制机制来防止由人为因素所造成的文件不安全性。
(2)通过磁盘容错技术,来防止由磁盘部分的故障所造成的文件不安全性。
(3)通过“后备系统”来防止由自然因素所造成的不安全性。
1、文件的存取控制
文件系统对文件的保护常采用存取控制方式进行,所谓文件的存取控制就是不同的用户对文件的访问规定不同的权限,以防止文件被未经文件主同意的用户访问。
存取控制矩阵
理论上存取控制方法可用存取控制矩阵,它是一个二维矩阵,一维列出计算机的全部用户,另一维列出系统中的全部文件,矩阵中每个元素Aij是表示第i个用户对第j个文件的存取权限。
存取控制矩阵在概念上是简单清楚的,但实现上却有困难。当一个系统用户数和文件数很大时,二维矩阵要占很大的存储空间,验证过程也费时。
存取控制表
存取控制矩阵由于太大而往往无法实现。一个改进的办法是按用户对文件的访问权力的差别对用户进行分类,由于某一文件往往只与少数几个用户有关,所以这种分类方法可使存取控制表大为简化。UNIX系统就是使用这种存取控制表方法。它把用户分成三类:文件主、同组用户和其它用户,每类用户的存取权限为可读、可写、可执行以及它们的组合。
用户权限表
改进存取控制矩阵的另一种方法是以用户或用户组为单位将用户可存取的文件各集中起来存入一表,这称为用户权限表,表中每个表目表示该用户对应文件的存取权限,如下表所示。这相当于存取控制矩阵一行的简化。
2、分级安全管理
随着计算机应用范围扩大,在所有稍具规模的系统中,都从多个级别上来保证系统的安全性。
系统级安全管理
系统级安全管理的主要任务是不允许未经核准的用户进入系统,从而也防止了他人非法使用系统中各类资源(包括文件)。
用户级安全管理
用户级安全管理是通过对不同的用户对不同文件设置不同的存取权限来实现。
目录级安全管理
目录级安全管理,是为了保护系统中各种目录而设计的,它与用户权限无关。为保证目录的安全规定只有系统核心才具有写目录的权利。
用户对目录的读、写和执行与一般文件的读、写和执行的含义有所不同,对于目录的读权限意味着允许打开并读该目录的信息,例如UNIX系统使用ls命令可列出该目录的子目录和文件名。
对于目录的写权限意味着可以在此目录中创建或删除文件,禁止对于某个目录的写权限并不意味着在该目录中的文件不能修改,只有在一个文件上的写权限才真正地控制修改文件的能力。对于一个目录的执行权限意味着系统在分析一个文件时可检索此目录。禁止一个目录的执行权限可真正地防止用户使用该目录中的文件,用户不能使用cd命令来进入此目录。
文件级安全管理
文件级安全管理,是通过系统管理员或文件主对文件属性的设置来控制用户对文件的访问。用户对文件的访问,将由用户访问权、目录访问权限及文件属性三者的权限所确定。或者说是有效权限和文件属性的交集。例如对于只读文件,尽管用户的有效权限是读/写,但都不能对只读文件进行修改、更名和删除。对于一个非共享文件,将禁止在同一时间内由多个用户对它们进行访问。通过上述四级文件保护措施,可有效地对文件的保护。
3、备份和恢复
文件系统中不论硬件和软件都会因电源中断和变化,用户粗野和不慎的操作而发生损坏和错误,所以为使至关重要的文件系统万无一失,应对保存在辅存中的文件采取一些保险措施,这些措施中最简便方法是“定期转储”,使一些重要的文件有多个副本。