利用LSM实现更安全的linux

  LSM的全称是Linux Security Modules,它是linux内核中用来支持更灵活的安全策略的一个底层框架,虽然听起来比较复杂,但是可以就把它理解成一组安插在linux内核的钩子函数和一些预留的被称为安全域的数据结构,下面先说说这个框架的由来吧。

 

  linux本身的机制就保证了linux拥有更好的安全机制,但是在这个机制下面,还是隐藏了许多的问题:

 

  1、权限粒度太大。用过linux的人应该对0644这样的访问权限设置不陌生,它对能够操作这个文件的用户做了限制,但是这个只是限制到了组,而没有更进一步的细分,当然,如果LSM只是用来限制这个的话,那么也就太没意思了,因为实现文件更细的控制粒度,ACL就能够很出色的完成,顺便提一下,ACL有一个分配的限制,如果哪位朋友需要用ACL进行粒度更细的访问权限控制的话,可能需要注意一下这方面的东西。

 

  2、root用户的权限太大。在linux中,root用户就是至高无上的,他拥有对机器的完全控制权限,可以做他想做的一切事情。但是很多时候,我们可能并不希望有root有这么大的权限,比如在现在比较流行的云存储中,用户肯定不希望服务提供商能够随意访问我们的文件,那么这个时候,就需要对root用户进行一定的设置了。

 

  由于这些问题的存在,所以出现了像SE Linux(Securiy Enhanced Linux )这样的增强补丁。但是每个系统对于具体安全细节的控制不尽相同, 所以Linus Tovalds 提出应该要有一个 Linux 内核所能接受的安全框架来支持这些安全策略,这个安全框架应该提供包含内核数据结构中的透明安全域以及用来控制、维护安全域操作的安全钩子,于是就有了LSM。

 

  LSM在内核中的位置,可以用下图来表示(注:这张图是我从网上找的,因为它确实很清晰地体现了LSM的位置,所以直接拿来使用了,因为现在不知道这张图的原出处,如果冒犯了您的权益,请告诉我,我马上删除,谢谢啦,呵呵):

利用LSM实现更安全的linux

  当用户态程序调用某些操作系统提供的函数的时候,比如read()函数,其会对应于内核中的一个系统调用,然后该首先会进行一些常规的错误检测,接着进行DAC(Discretionary Access Control)检测,再接着它会进行LSM检测。从上图中能够看出来,LSM其实是一个非常底层的安全策略框架,利用LSM,可以接管所有的系统调用,这样,我们就能对包括root在内的所有用户的权限进行控制,并且实现粒度更细的访问权限控制。

 

  当系统初始化的时候,LSM就是一个空的框架,它不提供任何的检测,其所做的全部工作几乎就是返回0,当然,有些不带返回值的函数除外。而我们则可以针对自己特定的需求来编写LSM,然后将我们编写的LSM钩子函数,通过其数据结构struct security_operations注册到系统中去,这样,我们的LSM检测就开始起作用了。

 

  在接下来的文章中,会通过项目中的一个部分——限制root用户对某些文件的访问权限来更具体的说明LSM这个框架,当然,略陈固陋,还请各位大牛多多指教,谢谢啦。呵呵

你可能感兴趣的:(linux)