0


LSM零知识学习二、Linux内核中的安全模块

接前一篇文章:LSM零知识学习一、概念与框架机制

本文内容参考:

《Linux内核安全模块深入剖析》 李志 机械工业出版社

Linux LSM(Linux Security Modules) Hook Technology_weixin_30929011的博客-CSDN博客

Linux Security Module Usage — The Linux Kernel documentation

一、总体概况

前文已提到,LSM的全称为Linux Security Module,字面意思为Linux安全模块。其在Linux内核中体现为一组安全相关的函数,这些安全函数在系统调用的执行路径中会被调用。因此LSM的目的是对用户态进程进行强制访问控制。至于这些安全函数要实施什么样的访问控制,则是由具体的安全模块决定的。截止到2014年,Linux内核主线上有5个安全模块:SELinux、AppArmor、Smack、TOMOYO和Yama(后来又增加了LoadPin、SafeSetID)。用户可以选择哪些安全模块被编译进内核。可以同时有多个安全模块存在于内核中,但是在运行时只能有一个安全模块处于工作状态。

虽然还被称为模块,但实际上自Linux内核2.6.x版本之后,Linux就强制LSM各个模块必须被编译进内核中,不能再以模块的形式存在了。这意味着,在运行时不能再随意加载一个所谓的安全模块作为访问控制机制了,也不能随意卸载一个安全模块了。到2012年时,Linux主线中已经有5个安全模块了。但是除了Yama,其它各个安全模块是运行时互斥的。比如系统中SELinux在工作,Smack就一定不能工作。这时就有人想,能不能让安全模块可以同时工作呢?Smack的负责人Casey Schaufler承担了这项工作。但两年过去了,虽然Casey Schaufler提交了多个patch,但终因安全模块的差异性和系统的复杂性而没有成功。

以下是一段英文,取自于Linux内核文档,与上段文字对应:

The name "module" is a bit of a misnomer since these extensions are not actually loadable kernel modules. Instead, they are selectable at build-time via CONFIG_DEFAULT_SECURITY and can be overridden at boot-time via the "security=..." kernel command line argument, in the case where multiple LSMs were built into a given kernel.

二、各模块简介

  • SELinux

在上文提到的5个安全模块中,SELinux进入内核时间最早。事实上,LSM机制是伴随着SELinux而进入内核的。SELinux是5个安全模块中功能最全最复杂的一个。

SELinux的开发引入了LSM。在2001年,Linus Torvalds拒绝了SELinux直接进入内核主线,他要求把SELinux做成一个相对独立的模块。于是Linux内核安全子领域的开发者实现了LSM机制。LSM机制带来了两个可能:一个是内核代码中多个安全模块并存;另一个是用户或者管理员可以在内核编译和系统启动时选择安全模块。

  • Smack

第二个进入Linux内核主线的是Smack。Smack标榜的是简单,其在安全功能上和安全机制上没有突破。

  • TOMOYO

第三个进入Linux内核主线的是TOMOYO。TOMOYO的长处是易用性,相关管理工具和文档都很完备。

  • AppArmor

第四个进入Linux内核主线的是AppArmor。AppArmor开发得很早,但开发时断时续,结果很晚才进入内核主线。AppArmor也在易用性上下功夫,其长处是很容易对单个应用进行安全加固并且不影响到系统其它部分。

  • Yama

最后一个是Yama。Yama的有趣之处是其只针对某一个安全问题点(ptrace)做工作,其余不管。

通过以上简介可以看到,SELinux之后的模块在系统性安全上没有突破,只在简单性和易用性上下功夫,而且有从系统性全功能安全防护向单个应用安全和单一功能防护上发展的趋势。

标签: 系统安全 LSM

本文转载自: https://blog.csdn.net/phmatthaus/article/details/131041700
版权归原作者 蓝天居士 所有, 如有侵权,请联系我们删除。

“LSM零知识学习二、Linux内核中的安全模块”的评论:

还没有评论