安全编程HOWTO:文件

文件
对于所有类Unix系统,最主要的信息存放地点是根为“/”的文件树。文件树是一个目录的分级结构,每个目录都可以保护文件系统对象(FSO)。

Linux中,文件系统对象(FSO)可以是普通文件、目录、符号连接、命名管道(FIFO)、套接字(参见下文说明)、特殊字符(设备)文件或特殊块(设备)文件(在Linux下可以用find(1)命令显示其列表)。其它类Unix系统有同样或相似的一组FSO类型。

文件系统对象由文件系统收集,可以在文件树的目录下安装和卸载。文件系统的类型(如ext2和FAT)是一组管理磁盘上数据以优化速度、可靠性等等的特殊规范集;很多人用“文件系统”作为文件系统类型的同义词。

文件系统对象的属性
不同的类Unix系统支持不同的文件系统类型。文件系统的访问控制属性可以稍有区别,在安装时选择的选项也会影响访问控制。在Linux下,ext2文件系统是目前最常用的文件系统,但Linux还支持大量的文件系统。绝大多数类Unix系统也都支持多个文件系统。

类Unix系统上的绝大多数文件系统至少都包含以下内容:


拥有UID和GID -- 标识文件系统对象的“所有者”。除非另加说明,只有所有者或root可以改变存取控制属性。

许可比特位 -- 每个用户(所有者)、群组及其他人的读、写和执行比特位。对于一般文件,读、写和执行就是相应的典型意义。对于目录,显示目录下内容需要“读”许可,而在实际进入目录以使用其内容时需要的“执行”许可有时被称为“查找”许可。一个目录的“写”许可是允许在目录内对文件进行增加、移动和改名操作;如果只想允许增加文件,设置下面说明的“sticky”比特位。注意,符号连接的许可值没有用;其对应的目录和连接文件的许可值才是真正有效的。

“sticky”比特位 -- 在目录被设置之后,只有root、文件所有者或目录所有者才能在该目录下解除连接(删除)和改变文件名。这是一个很常用的Unix扩展,在Open Group的单一Unix规格版本2中有其定义。老版本的Unix把它叫做“保存程序正文”比特位,并用它来标明需要保留在内存的可执行文件。系统这样做确保了只有root可以设置此比特位。(否则用户可以强制“所有内容”都保存在内存中来使系统崩溃)。在Linux下该比特位对普通文件没有影响,而且普通用户可以修改所拥有文件的该比特位;Linux的虚拟内存管理使这种老用途不再重要。

setuid, setgid -- 在对可执行文件设置后,执行该文件会(相应地)把进程的有效UID或有效GID设为文件拥有UID或GID。所有的类Unix系统都支持这一点。在Linux和System V系统中,在对没有执行权限的文件设置了setgid时,该文件在存取时将被强制锁定(如果安装的文件系统支持强制锁定的话);这种意义重载使很多人诧异,而且在类Unix系统中并不常见。事实上,如果这样的设置没有意义,在Open Group的单一Unix规格版本2中chmod(3)将允许系统忽略打开不可执行文件setgid的请求。在Linux和Solaris中,对目录设置setgid时,该目录下创建的文件会自动把自己的GID设置为目录的GID。这样做的目的是支持“工程目录”:用户可以把文件保存在如此特别设定的目录下,文件的群组所有者就自动改变。但是,对目录设置setgid比特位没有被单一Unix规格[Open Group 1997]之类的标准所定义。

时间戳 -- 保存每个文件系统对象存取和修改的时间。尽管如此,文件系统对象的所有者可以任意设置这些值(参见touch(1)),所以在信任该信息时要小心。所有的类Unix系统都支持这一点。


下面是对ext2文件系统inux独有的属性,虽然很多其它文件系统也有类似的功能:


不可改变的比特位 -- 不允许改变文件系统对象;只有root可以设置或清除该比特位。只有ext2支持它,不能在所有Unix系统中移植(甚至不能在所有Linux文件系统中移植)。

只附加比特位 -- 只允许对文件系统对象进行附加操作;只有root可以设置或清除该比特位。只有ext2支持它,不能在所有Unix系统中移植(甚至不能在所有Linux文件系统中移植)。


其它的常见扩展包括表明“不可删除此文件”的某种比特位。

很多这样的值在安装时会受影响,所以,诸如特定的比特位可以被当做具有某个特定值(无论在媒介上它们的值如何)来处理。参见mount(1)以了解更多的有关信息。有些文件系统不支持其中的某些存取控制值;也可参见mount(1)以了解这些文件系统是如何进行处理的。比较特别的是,很多类Unix系统支持MS-DOS磁盘,其缺省状态只支持其中的很少属性(而且没有标准方法来定义这些属性)。在这种情况下,类Unix系统仿效标准属性(可能通过特殊的磁盘文件来实现),而且这些属性一般会受mount(1)命令影响。

需要特别注意,除非类Unix系统支持更为复杂的规范(如POSIX的ACL),对于增加和移动文件,只有许可比特位和文件所在目录的拥有者确实有意义。除非系统有其它的扩展,而标准Linux 2.2没有扩展,如果所在目录允许,没有被许可比特位授予许可的文件还是可以被移开的。同样,如果上




分页: [1] [2]




  • 上一篇: 内存问题