Linux Security Modules(LSM)是一个框架,它允许Linux内核支持各种不同的计算机安全模型,同时不偏爱任何特定的安全策略。LSM 最初在Linux 2.6内核中引入,它提供了一组挂钩点(hooks),这些挂钩点被插入到内核的关键操作中,安全模块可以使用这些挂钩来执行访问控制决策。
LSM的目的和功能
LSM的设计目的是为了在不需要修改内核源码的情况下提供安全功能。LSM使得不同的安全策略和模型可以通过模块的形式被添加到内核中。这样,操作系统的安全可以根据需求进行定制与扩展,而无需改动到内核的核心部分。
主要功能包括:
- 强制访问控制(Mandatory Access Control, MAC):在标准的基于所有权和模式位的访问控制(Discretionary Access Control, DAC)之上增加额外的控制。
- 可加载安全模块:系统管理员可以选择安装和配置各种安全策略,如SELinux、AppArmor、Smack或Tomoyo Linux。
- 审计:跟踪并记录系统中的安全相关事件。
LSM挂钩点
LSM提供了超过200个挂钩点,覆盖了像文件操作、任务管理、网络操作、IPC等多个系统领域。通过这些挂钩点,安全模块可以拦截内核中的许多操作:
- 文件系统操作(如打开、读取、写入文件)
- 进程执行和权限变更
- 网络套接字操作
- 系统调用的执行
- 内存映射操作
- IPC操作
常见LSM实现
- SELinux(Security-Enhanced Linux):由美国国家安全局(NSA)开发与维护的一个强制访问控制系统。SELinux提供了基于策略的安全性,其中策略描述了细粒度的访问控制规则。
- AppArmor(Application Armor):另一种流行的LSM实现,它使用程序的路径名字来定义规则,主要关注程序的行为,以避免未经授权的文件访问和操作。
- Smack(Simplified Mandatory Access Control Kernel):是为简化安全配置而设计的另一个MAC系统,特别是在嵌入式系统中。
- Tomoyo Linux:这是一种日本开发的LSM,它使用路径名和程序行为历史信息来定义其安全策略。
如何选择和配置LSM
选择哪一个LSM取决于具体的安全需求和策略。管理员需要考虑的因素包括所需要保护的资源、系统的用途、以及他们自己的安全政策和程序的特性。另外还要考虑LSM对系统性能的影响,以及它们相对的复杂性和可维护性。
配置LSM通常涉及到编辑内核的配置文件,如.config
,并在编译内核时选择需要启用的模块。一些发行版提供了预编译的内核选项来简化这个过程。在内核启动时,也可以通过传递启动参数来选择LSM,例如lsm=lockdown,yama,selinux,smack
等。
LSM框架的设计有助于系统管理员根据他们自己的安全需求定制内核,创造出更安全的运行环境。随着Linux安全需求的不断发展,新的LSM钩子和模块也在持续被开发和集成到内核中去。
通过LSM,Linux系统能够更好地根据安全要求进行配置与管理,提高系统抵抗恶意软件和未授权操作的能力。