文章图片
文章图片
LSM是一个安全框架linux操作系统原理,其全称为LinuxSecurityModules,也就是Linux安全模块。这儿用“模块”这个成语虽说并不符合这儿的含意。LSM的地位有点类似文件系统中的VFS,它为调用者提供统一的框架和一致的插口。
如图所示,基于LSM框架可以实现好多安全算法(比如SELinuxAppArmor等),其中比较知名和常用的如SELinux等。用户甚至可以实现自己的算法,而不用对现有的业务逻辑代码进行任何更改。
LSM的检测插口坐落业务逻辑入口处,实现对权限的检测。具体所使用的算法根据用户的配置情况而定。如图以打开文件为例,在中间某个位置会进行权限的检测,成功后才能准许访问该文件,否则返回严禁访问的错误码。
另外一个须要注意的是各类权限检测的算法是可以并存的,它们是以串行的形式执行的。也就是假如访问者希望访问资源linux命令大全,须要满足所有算法的检测后才可以通过。
【Linux|Linux安全模块框架(LSM)原理与代码实现解析】LSM的内核代码实现坐落内核目录树的security目录。其中security.c文件是具象层,它提供了外部业务层调用的插口(API)。而其中的子目录则是各类不同的权限算法。
以打开文件为例linux 版本,在do_dentry_open中会调用LSM的函数,也就是security_file_open。该函数的具体实现如下所示。可以看出该函数主要是调用了函数call_int_hook函数,而该函数的作用就是调用注册的权限检测算法的具体实现函数。
函数call_int_hook虽然是一个宏定义linux操作系统原理,具体定义也在security.c文件中。如下是具体代码。
代码逻辑很清楚,本文就不再赘言了。
以SELinux为例,所有的对应实现函数都定义在selinux/hooks.c文件中。打开文件对应的实现函数为selinux_file_open,可以看出该函数的名称与LSM框架的函数名称有对应关系。
关于selinux_file_open具体实现本文不再赘言,你们可以阅读本专栏介绍SELinux的相关章节。至此,我们对LSM做了一个比较概括的介绍,并没有介绍太多代码细节。假如你们感兴趣可以自行阅读代码,逻辑并不复杂。