强制访问控制(英文缩写MAC)是实现操作系统安全的一个重要的方法,现在几乎所有的安全操作系统都采用强制访问控制作为其核心安全机制之一。强制访问控制是对操作系统的各种客体(如文件、socket、系统FIFO、SCD、IPC等)进行细粒度的访问控制,即当用户或用户程序访问系统的某个客体时,强制访问控制机制对这种访问的安全性进行检查。与自主访问控制不同,强制访问控制对用户及用户程序的行为进行限制,从而达到更高的安全级别。
强制访问控制是一种机制,它对用户与用户程序对客体的访问进行检查,但什么样的访问是安全的呢?这就需要引入安全策略的概念。安全策略可以认为是一组检查条件,它为每次访问的主体(用户或用户程序)和被访问的客体(如文件等)定义一个安全标记,再根据主体和客体的安全标记来决定这次访问是否安全。目前已经开发出多种安全策略,其中MLS用得最多。MLS是多级安全的意思,它最早用于军事领域。它的基本思想是定义一些安全级,如从低到高分普通、机密、绝密等安全级,要求高安全级别的信息不能泄露给低安全级别的用户,这样就要求低安全级的主体不能读高安全级的客体,同时高安全级的主体不能写低安全级的客体。详情请参见有关资料。
与Linux一样,FreeBSD系统是开放源代码的操作系统,而且FreeBSD的结构清晰,安全性好,所以使用也很广泛。从5.0RC2版开始,FreeBSD内核开始引入强制访问控制机制。它在内核中实现了一个灵活通用MAC框架,这个框架对FreeBSD内核中几乎所有的核心对象进行了访问控制,并且这个框架设计合理、接口简洁,使得我们可以很方便地开发各种安全策略模块并将之挂接到系统,从而按我们自己的策略对系统进行安全控制。另外,系统还提供了包括MLS策略模块在内的多个策略模块供我们选用。
本文从使用与源代码的分析这两方面详细讲述FreeBSD系统中的强制访问控制机制,内容主要包括MAC框架和MLS策略,相信会对对此部分内容感兴趣的朋友有所启发。
FreeBSD 5.0 RC2版本发布时,内核源代码中已经包含了MAC框架和一些MAC策略模块(如MLS策略模块、用于开发及实验的MAC_NONE策略模块、完整性模块MAC_BIBA等),但是这个版本的内核并没有正式对MAC提供支持,所以缺省情况下,在编译内核的时候没有把实现MAC框架的代码编译进去。另外,我们将以MLS策略为例,说明怎样利用MAC框架加载策略模块。为了让MLS策略真正实用,还需要配置系统的扩展文件属性等,我们将对之进行一定的介绍。最后我们将介绍如通过控制台命令以及在程序中如何使用系统调用接口对文件或进程的MAC标记进行操作。
如上所述,由于FreeBSD 5.0 RC2版中的MAC框架还处于开发阶段,所以缺省情况下,内核二进制代码中并没有包括对MAC框架的支持。要使内核支持MAC框架,必须配置并重新编译内核,具体方法如下。
到/usr/src/sys/i386/conf下,把GENERIC文件复制成另一个文件如yxd_kernel(不要改动GENERIC文件),然后在yxd_kernel文件中找到makeoptions这个部分,仿照已有的格式,添加一行(详细信息请参见"FreeBSD Developers@# Handbook"中的"TrustedBSD MAC FrameWork"章节):
options MAC
|