1 FreeBSD 5.0中强制访问控制机制的使用与源代码分析( 二 )


另外,为了支持文件及目录的MAC标记的存储,必须让内核支持扩展文件系统(缺省情况下也不支持) 。要达到这个目的,必须在yxd_kernel中加入如下两个编译选项:
options UFS_EXTATTR options UFS_EXTATTR_AUTOSTART本文稍后会对扩展文件系统有较详细的解释 。
按上述要求配置完成yxd_kernel文件后,使用下面的命令重新编译内核:
cd /usr/src/sys/i386/conf config yxd_kernel这时系统会在/usr/src/sys/i386/compile这个目录下面建立一个与你的配置文件同名的目录,本例中为yxd_kernel 。进入这个目录,输入下面的命令:
make depend make make install至此,编译内核工作完成,整个过程根据你机器的速度可能要花费十几到几十分钟不等 。完成上述编译工作并重新启动系统后,我们就可以使用MAC框架了 。
1.2 配置MLS策略
完成1.1节的工作后,系统只是提供了MAC框架,而并没有为你加载任何安全策略,但有了这个设计非常好的MAC框架以后,加载任何安全策略都会很方便很容易 。下面我们以MLS策略为例,讲述怎样将之加载到系统中以让它对系统进行访问控制 。
MLS策略的源代码在/usr/src/sys/security/mac_mls目录下,为mac_mls.h和mac_mls.c这两个文件,如果对它进行了修改后要编译它,直接进入/usr/src/sys/modules/mac_mls目录,再运行make命令就可以了 。make得到的目标文件是mac_mls.ko文件,它是FreeBSD下的KLD(Kernel Linker Dynamic,动态内核链接机制)模块,可以独立于内核进行编译和加载,非常方便我们调试 。
mac_mls.ko这个模块必须在系统初始化之前加载,而不能等到系统启动后再使用kldload命令手工加载,它是通过一个加载标志保证这一点的(详见MAC框架与MLS策略分析章节) 。为了达到这个目的,我们必须在/boot/loader.conf文件中加入下面一行并重新启动系统:
mac_mls_load = "YES"值得注意的一点是,当我们修改并重新编译了mac_mls.ko这个模块后,必须把它从/usr/src/sys/modules/mac_mls目录拷贝到/boot/kernel目录,因为系统启动的时候是从/boot/kernel目录寻找模块的 。
1.3 配置扩展文件系统
当我们做完1.1和1.2两步后,MLS模块就已经在系统中起作用了,我们可以使用"getfmac 文件/目录名"来得到文件或目录的MAC标记(形如"文件/目录名: mls/low",详细的介绍请参阅1.4节),但此时的标记是一种伪标记,也就是说,这个标记是MLS策略给每个文件的缺省标记,且这个标记在关闭系统的时候并没有被存储 。但是按照我们的需要,我们希望每个文件或目录的MAC标记应该有"非易逝性"的标记,也就是说我们希望这个标记与文件一样被存储在磁盘上 。这就需要引入扩展文件系统,使得每个文件或目录的MAC标记存储在对应文件或目录的扩展属性中 。为了便于理解,下面对FreeBSD中的扩展文件系统进行一点简要的介绍 。
简单地说,扩展文件系统是对现有文件系统的一种扩充 。扩展属性(EA,Extended Attribute)是相对于传统文件系统的inode节点中已存储的文件或目录的标准属性而言的,它可以为inode节点中存储的文件或目录增加额外的信息,这些信息再由系统根据inode结点访问到 。每个文件系统的扩展属性(EA)是一组(name,value)对 。一个inode节点(文件或目录)可能定义了某种属性,也可能没有定义 。如果inode节点定义了某个属性,则它可能包含0个,也可能包含多个字节的这种属性的数据 。这与一般shell的环境变量类似 。这样,扩展属性机制就为TrustedBSD的各种安全特征(ACL、MAC和能力等),提供了存储访问安全信息的简单方法 。一些非安全应用也可以根据需要创建扩展属性,例如文件的校验和、密钥等 。扩展属性可以动态地增加新的扩展属性而不必改变文件系统在磁盘上的存储格式 。

推荐阅读