Linux Security Modules (LSM) 是一种 Linux 内核子系统,旨在将内核以模块形式集成到各种安全模块中。在 2001 年的 Linux Kernel 峰会上,NSA 代表建议在 Linux 内核版本 2.5 中包含强制控制访问系统 Security-Enhanced Linux。然而,Linus Torvalds 拒绝了这一提议,因为 SELinux 并不是惟一一个用于增强 Linux 安全性的安全系统。除此之外,并不是所有的开发人员都认为 SELinux 是最佳解决方案。SELinux 并没有直接包含在内核中,相反,创建了 Linux Security Modules 系统,允许安全子系统作为模块使用,这意味着可以比较方便地连接新的模块。


LSM 子系统的开发工作持续了大约三年时间,并从版本 2.6 开始,就被包含到 Linux 内核中。目前具备正式官方支持的安全模块包括 SELinux、Apparmor、Smack 和 TOMOYO Linux。


SELinux 根据标签控制与强制访问控制系统建立关联。 这意味着由 SELinux 保护的操作系统中的每个对象或主体都需要一个称为 security context 的特殊标签。这些标签最初存储为数字,放在 ext2 文件系统节点中的未使用字段中。每个数字标签在 SELinux 中被映射到一个可读的基于文本的安全上下文标签中。这种方法不具备可扩展性,并且基于特定的 ext2 文件系统的特性,这被认为是整个解决方案的一个明显的瑕疵。


在开发的下一个阶段,SELinux 被实现为一个可以载入到 Linux 内核版本 2.4 的模块。该模块可以处理存储在单独文件中的标签,这意味着 SELinux 的实现对所使用的文件系统没有任何限制。然而,去掉某个架构缺陷可能会引起另一个缺陷。对包含安全上下文标签的文件进行频繁访问将导致生产力显著下降。


Linux 内核 2.6 版本的发布彻底解决了这个问题,它充分支持 Linux Security Modules 和 ext3 文件系统的扩展属性。为了能够对系统的对象和主体存储安全上下文标签,SELinux 转变为使用扩展的属性。不幸的是,这种创新对文件系统的使用提出了限制。SELinux 只能在支持扩展属性的文件系统中使用。然而,这个问题随时间而得到解决,目前几乎所有通用的文件系统都充分支持扩展属性,这意味着它们都能够使用 SELinux。


一段时间后,SELinux 被集成到 Linux 内核并开始进行发布,第一次作为内核 2.6.0-test3(2003 年 8 月 8 日发布)的子系统进行测试。作为发布的一部分,针对内核 2.2 和 2.4 发布了一个内核路径,用于强制访问控制系统,同时在内核 2.4 中引入了对 Linux Security Modules 的支持,从而导致了面向 LSM 的 SELinux 版本的开发。


SELinux 很快成为受保护 Linux 系统的事实标准,以及 Red Hat Enterprise Linux 最流行的企业发布版之一(从 Red Hat Enterprise Linux 4 开始)。此后,SELinux 开始在广泛部署的 Debian 和 Fedora 上得到应用,并获得 Ubuntu 发行版的支持,后者非常受用户欢迎(自 LTS 版本 8.04 Hardy Heron 开始)。很久之后,Novell(当时正在开发 AppArmor 并计划将其包含在 Linux 内核中)开始在其 OpenSUSE 和 SUSE Linux Enterprise 发行版中支持 SELinux。


最终,Security-Enhanced Linux 获得了所有流行版本的开发人员的支持。在当前的 Linux 内核版本 2.6 中,SELinux 使用 Linux Security Modules 执行操作。此外,许多 SELinux 元素被合并到实际内核中。


强制访问控制系统使用的冗长路径一直由美国国家安全局监管。将 SELinux 集成到 Linux 内核的基本工作也获得了 Red Hat 的支持。

http://www.51rhca.com/archives/263