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


要使MAC标记可以被存储在文件的扩展属性里,必须使一个文件系统支持扩展属性 。下面我们以/tmp文件系统为例,讲述如何配置使其支持扩展文件属性:
首先建立/tmp/.attribute/system目录,当mount一个文件系统时,系统将自动从这个目录中寻找扩展文件系统所对应的文件 。使用下面的命令建立一个名为freebsd.mac的文件,这个文件中将存储/tmp文件系统中所有文件的扩展属性 。100这个数表示每个扩展属性的长度为100个字节: cd /tmp/.attribute/system extattrctl initattr -p . 100 freebsd.mac 使用下面的命令为/tmp文件系统打上标记,告诉系统在mount的时候加载扩展文件系统 。其中-l标志表明扩展文件系统是用于MAC标记的,详见man page: cd / umount /tmp runefs -l enable /tmp mount /tmp cd /tmp/.attribute/system 由于文件系统mount的时候启用的扩展属性名为freebsd.mac,而我们需要的扩展属性名为mac_mls(原因说参见MAC框架分析部分),所以我们必须使用下面的命令激活属性名为mac_mls的扩展属性: extattrctl enable /tmp system mac_mls ./freebsd.mac
至此,/tmp文件系统的扩展属性配置完毕,我们可以尝试使用下面的命令来改变/tmp/test这个文件的MAC标记:
setfmac mls/high /tmp/test1.4 操作MLS标记
和所有的系统功能一样,MLS标记既可以在控制台由命令来得到或设置,也可以在程序中通过系统调用来得到或进行设置,下面是对这两种方式的简单的介绍 。
【1 FreeBSD 5.0中强制访问控制机制的使用与源代码分析】控制台命令主要有三个,即getfmac,用于得到文件或目录的MAC标记;setfmac用于设置文件或目录的MAC标记;getpmac,用于得到当前进程的MAC标记 。另外的一个命令setpmac在当前系统中支持得不好 。
如果使用的是MLS策略,那么返回的MAC标记为mls/[single_mac]([mac_range]),其中mls为策略名,后面用"/"与标记数据隔开 。[single_mac]为单一的MAC标记,可能为"low"或"high"或"equal" 。[mac_range]为一个MAC标记范围,往往主体(进程)有一个范围 。一个MAC标记的例子为:mls/low(low-high) 。
在应用程序中,可以使用的系统调用请参见/usr/src/sys/sys/mac.h文件中#ifndef _KERNEL这个块中提供的函数原型,值得注意的是,man page中的有些接口参数及返回值类型有误,请以mac.h文件中的类型为准 。
下面是几个最常用的函数的使用方法:
mac_get_proc,mac_get_file的用法:
struct mac myMac; char ss[60] = "mls"; myMac.m_string = ss; myMac.m_buflen = 60; mac_get_proc(&myMac); mac_get_file("/tmp/test",&myMac);
mac_set_proc,mac_set_file的用法:
struct mac myMac; myMac.m_string = "mls/high"; myMac.m_buflen = strlen(myMac.m_string); mac_set_proc(&myMac); mac_set_file("/tmp/test",&myMac);1.5 小结
由于FreeBSD 5.0RC2版才刚刚开始非正式地支持MAC,所以针对普通用户而言,要将其真正用起来,要做的工作还比较多比较烦琐的 。对于MLS策略而言,还有很多值得完善的地方,比如现有的MLS策略不支持对用户设置MAC标记,主体对客体访问的时候限制过多,还有MLS不支持可信进程等等,都是下一个版本需要完善的 。
在使用上,从我个人的使用经验来看,比较不好用 。当然,这个问题不能全怪系统,MLS策略导致易用性降低已经是不争的事实,相信经过一段时间的开发,最终会给我们一个满意的答案 。
但是瑕不掩玉,撇开MLS,单看MAC框架,应该说是设计得很完美的:良好的结构、清晰的逻辑、非常简洁的接口,这些优点应该来说可以给每一个对它有兴趣的人一个大大的惊喜 。即使是MLS策略,由于其作为一个KLD模块来实现,所以十分便于我们对它进行修改和扩充,相信经过一段时间,MLS模块亦会成为我们的惊喜 。如果大家有兴趣了解MAC框架及MLS策略的实现,请接着往下阅读 。

推荐阅读