FreeBSD 5.0中强制访问控制机制的使用与源代码分析 (1)
|
本文主要讲述FreeBSD 5.0操作系统中新增的重要安全机制,即强制访问控制机制(MAC)的使用与源代码分析,主要包括强制访问控制框架及多级安全(MLS)策略两部分内容。这一部分讲述要将MAC框架与MLS策略用起来,应该做的一些工作,以及如何有效使用它们的问题。 强制访问控制(英文缩写MAC)是实现操作系统安全的一个重要的方法,现在几乎所有的安全操作系统都采用强制访问控制作为其核心安全机制之一。强制访问控制是对操作系统的各种客体(如文件、socket、系统FIFO、SCD、IPC等)进行细粒度的访问控制,即当用户或用户程序访问系统的某个客体时,强制访问控制机制对这种访问的安全性进行检查。与自主访问控制不同,强制访问控制对用户及用户程序的行为进行限制,从而达到更高的安全级别。 强制访问控制是一种机制,它对用户与用户程序对客体的访问进行检查,但什么样的访问是安全的呢?这就需要引入安全策略的概念。安全策略可以认为是一组检查条件,它为每次访问的主体(用户或用户程序)和被访问的客体(如文件等)定义一个安全标记,再根据主体和客体的安全标记来决定这次访问是否安全。目前已经开发出多种安全策略,其中MLS用得最多。MLS是多级安全的意思,它最早用于军事领域。它的基本思想是定义一些安全级,如从低到高分普通、机密、绝密等安全级,要求高安全级别的信息不能泄露给低安全级别的用户,这样就要求低安全级的主体不能读高安全级的客体,同时高安全级的主体不能写低安全级的客体。详情请参见有关资料。 与Linux一样,FreeBSD系统是开放源代码的操作系统,而且FreeBSD的结构清晰,安全性好,所以使用也很广泛。从5.0RC2版开始,FreeBSD内核开始引入强制访问控制机制。它在内核中实现了一个灵活通用MAC框架,这个框架对FreeBSD内核中几乎所有的核心对象进行了访问控制,并且这个框架设计合理、接口简洁,使得我们可以很方便地开发各种安全策略模块并将之挂接到系统,从而按我们自己的策略对系统进行安全控制。另外,系统还提供了包括MLS策略模块在内的多个策略模块供我们选用。 本文从使用与源代码的分析这两方面详细讲述FreeBSD系统中的强制访问控制机制,内容主要包括MAC框架和MLS策略,相信会对对此部分内容感兴趣的朋友有所启发。 1: FreeBSD 5.0中强制访问控制机制的使用 1.1 重新编译内核 到/usr/src/sys/i386/conf下,把GENERIC文件复制成另一个文件如yxd_kernel(不要改动GENERIC文件),然后在yxd_kernel文件中找到makeoptions这个部分,仿照已有的格式,添加一行(详细信息请参见"FreeBSD Developers" Handbook"中的"TrustedBSD MAC FrameWork"章节): options MAC 另外,为了支持文件及目录的MAC标记的存储,必须让内核支持扩展文件系统(缺省情况下也不支持)。要达到这个目的,必须在yxd_kernel中加入如下两个编译选项: options UFS_EXTATTR options UFS_EXTATTR_AUTOSTART 按上述要求配置完成yxd_kernel文件后,使用下面的命令重新编译内核: cd /usr/src/sys/i386/conf config yxd_kernel make depend make make install 1.2 配置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" 1.3 配置扩展文件系统 简单地说,扩展文件系统是对现有文件系统的一种扩充。扩展属性(EA,Extended Attribute)是相对于传统文件系统的inode节点中已存储的文件或目录的标准属性而言的,它可以为inode节点中存储的文件或目录增加额外的信息,这些信息再由系统根据inode结点访问到。每个文件系统的扩展属性(EA)是一组(name,value)对。一个inode节点(文件或目录)可能定义了某种属性,也可能没有定义。如果inode节点定义了某个属性,则它可能包含0个,也可能包含多个字节的这种属性的数据。这与一般shell的环境变量类似。这样,扩展属性机制就为TrustedBSD的各种安全特征(ACL、MAC和能力等),提供了存储访问安全信息的简单方法。一些非安全应用也可以根据需要创建扩展属性,例如文件的校验和、密钥等。扩展属性可以动态地增加新的扩展属性而不必改变文件系统在磁盘上的存储格式。 要使MAC标记可以被存储在文件的扩展属性里,必须使一个文件系统支持扩展属性。下面我们以/tmp文件系统为例,讲述如何配置使其支持扩展文件属性: 首先建立/tmp/.attribute/system目录,当mount一个文件系统时,系统将自动从这个目录中寻找扩展文件系统所对应的文件。
setfmac mls/high /tmp/test 控制台命令主要有三个,即getfmac,用于得到文件或目录的MAC标记;setfmac用于设置文件或目录的MAC标记;getpmac,用于得到当前进程的MAC |
