SMACK鼓吹的是简单。Tomoyo推出的则是另一个卖点,而这又涉及一场至今没有结果的争论:基于inode的安全与基于路径的安全,哪一个更安全?
自UNIX诞生之日起,文件就是一个非常重要的概念。文件是什么?文件首先包含一堆数据,这堆数据就是文件的内容。除了内容之外,文件还有一些被称为元数据的关联信息需要存储,比如文件的拥有者、文件的创建日期、文件的长度等。在UNIX/Linux文件系统中,元数据存储在文件的inode中,文件本身存储的是内容数据。用户态进程访问文件并不是通过inode内核根本没有提供通过inode号来查找文件的系统调用。进程访问文件需要通过目录,将各级目录和文件名串联起来就是一条文件路径。
要为文件引入安全属性,很自然地想到安全属性不是文件内容,而是属于元数据,应该与inode关联。于是很多文件系统引入了扩展属性,一些内核安全模块将安全属性存储在文件的扩展属性中,这种方式就是基于inode的安全。基于inode的安全的优点主要有两个:
(1)文件的安全属性与文件路径无关。文件可以在不同目录间移动,不管它怎么移动,它的安全属性都没有变化。
(2)同一个文件可以有多个链接,从不同链接访问文件,其安全属性总是一样的。
基于inode的安全的缺点是:
(1)文件系统必须支持扩展属性,并且挂载文件系统时必须使用扩展属性。现在这个问题已经基本得到解决了。目前Linux上大多数文件系统已经支持扩展属性,并且挂载时缺省使用扩展属性
(2)删除文件时,文件的安全属性会随之消失。再在原先的路径处创建同名文件,并不能保证新文件和老文件的安全属性相同。(www.xing528.com)
(3)安装软件和升级软件需要保证系统中新的文件具有正确的安全属性。新文件来自软件包,新的安全属性自然也应该来自软件包。于是有了下一个要求:众多软件包格式也需要支持文件的扩展属性,比如tar、cpio等。
下面说说基于路径的安全。
从用户角度看,用户通过路径访问文件,用户态进程无法用inode号来访问文件。即使是基于inode的安全,用户读写安全属性也要先通过路径找到文件,然后才能访问文件的安全属性。那么能否将文件的安全属性简单地与文件路径对应起来呢?比如/bin/bash的安全属性是“system-shell”/usr/local/bin/bash的安全属性是“local-shell”。不把这些安全属性存储在文件的扩展属性中,而是存储在系统内部的一张表里,这就是基于路径的安全的实现原理。这样做的优点是:
(1)不需要文件系统有额外支持。
(2)不怕文件更新,对打包格式也没有额外要求。用户甚至可以为还不存在的文件定义安全属性。
基于路径的安全的缺点是:同一个文件可能有多个安全属性,简单地创建链接就可能让文件拥有另一个安全属性。
在Linux四个主要的安全模块中,SELinux和SMACK是基于inode的安全 [16] ,Tomoyo和AppArmor是基于路径的安全。与基于inode的安全相比,基于路径的安全的最大优点是容易使用
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。