LSM--Linux Security Module,字面意思为Linux安全模块,在内核中体现为一组安全相关的函数。这些安全函数在系统调用的执行路径中会被调用,所以LSM的目的是对用户态进程进行强制访问控制。至于这些安全函数要实施什么样的访问控制,这是由安全模块决定的。截止到2014年,Linux内核主线上有5个安全模块:SELinux、SMACK、Tomoyo、AppArmor和Yama用户可以选择哪些安全模块被编译入内核。可以同时有多个安全模块存在于内核中,但是在运行时只能有一个安全模块处在工作状态 [1] 。
虽然还叫模块,但是自2.6.x [2] 之后,Linux就强制LSM各个模块必须被编译在内核中,不能再以模块的形式存在了。这意味着在运行时,不能再随意加载一个所谓的安全模块作为访问控制机制了,也不能随意卸载一个安全模块了。Tomoyo自己还保留了一个没有进主线的发布在那个发布里,Tomoyo可以以模块形式存在。
在当前的5个安全模块中,SELinux进入内核最早,事实上LSM机制是伴随着SELinux而进入内核的。SELinux是5个安全模块中功能最全最复杂的一个。第二个进入内核主线的是SMACK,SMACK标榜的是简单,它在安全功能上和安全机制上没有突破。第三个是Tomoyo Tomoyo的长处是易用性,相关管理工具和文档都很完备。第四个是AppArmor,AppArmor开发得很早,但开发时断时续,结果很晚才进入内核主线。AppArmor也在易用性上下工夫,它的长处是很容易对单个应用进行安全加固并且不影响到系统其他部分。最后一个是Yama,Yama的有趣之处是它只针对某一个安全问题点(ptrace)做工作,其余不管。回顾历史可以看到,SELinux之后的模块在系统性安全上没有突破,只在简单性和易用性上下功夫,而且有从系统性全功能安全防护向单个应用安全和单一功能防护上发展的趋势。
SELinux的开发引入了LSM。在2001年,Linus Torvalds拒绝了SELinux直接进入内核主线。Linus Torvalds要求把SELinux做成一个相对独立的模块。于是Linux内核安全子领域的开发者实现了LSM机制。LSM机制带来了两个可能,一个是内核代码中多个安全模块并存,另一个是用户或管理员可以在内核编译和系统启动时选择安全模块。(www.xing528.com)
到2012年时,Linux主线上已经有5个安全模块了。但是除了Yama,各个安全模块是运行时互斥的。如果系统中SELinux在工作,SMACK就一定不能工作。这时就有人想,能不能让安全模块可以同时工作呢?SMACK的负责人Casey Schaufler承担了这项工作。两年过去了虽然Casey Schaufler提交了多个patch,但终因安全模块的差异性和系统的复杂性而没有成功。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。