Security-Enhanced Linux(SELinux)的历史

2009-04-23 06:59:17 来源: 互联网 点击数: 
Security-Enhanced Linux(SELinux)的历史9UD爱河池
一个小历史将有助于帮助您理解 Security-Enhanced Linux(SELinux)——而且它本身也是段有趣的历史。美国国家安全局(National Security Agency,NSA)长时间以来就关注大部分操作系统中受限的安全能力。毕竟,他们的工作之一就是要确保美国国防部使用的计算机在面临没完没了的攻击时保持安全。NSA 发现大部分操作系统的安全机制,包括 Windows 和大部分 UNIX 和 Linux 系统,只实现了“选择性访问控制(discretionary access control)”(DAC)机制。DAC 机制只是根据运行程序的用户的身份和文件等对象的所有者来决定程序可以做什么。NSA 认为这是一个严重的问题,因为 DAC 本身对脆弱的或恶意的程序来说是一个不合格的防护者。取而代之的,NSA 长期以来一直希望操作系统同样能支持“强制访问控制(mandatory access control)”(MAC)机制。9UD爱河池
9UD爱河池
MAC 机制使得系统管理员可以定义整个系统的安全策略,这个策略可以基于其他因素,像是用户的角色、程序的可信性及预期使用、程序将要使用的数据的类型等等,来限制程序可以做哪些事情。一个小例子,有了 MAC 后用户不能轻易地将“保密的(Secret)”数据转化为“不保密的(Unclassified)”的数据。不过,MAC 实际上可以做的比那要多得多。 爱河池9UD爱河池
9UD爱河池
NSA 已经与操作系统提供商合作了多年,但是很多占有最大市场的提供商对于将 MAC 集成进来没有兴趣。即使是那些集成了 MAC 的提供商也通常是将其做为“单独的产品”,而不是常规产品。一部分原因只是因为旧式的 MAC 不够灵活。 9UD爱河池
9UD爱河池
于是 NSA 的研究力量尽力去使 MAC 更灵活并且并容易被包含在操作系统中。他们使用 Mach 操作系统开发了他们的思想的原型,后来发起的工作扩展了“Fluke”研究操作系统。不过,难以让人们信服这些思想可以适用于 “真实的”操作系统 ,因为所有这些工作都基于微型的“玩具级的”研究项目。极少可以在原型之外进行尝试以查看这些思想在真实的应用程序中工作得如何。NSA 不能说服具有所有权的提供商来添加这些思想,而且 NSA 也没有权利去修改私有的操作系统。这不是个新问题;多年前 DARPA 试图强制它的操作系统研究人员使用私有的操作系统 Windows,但遇到了很多问题(参见下面的 参考资料)。 9UD爱河池
9UD爱河池
于是,NSA 偶然发现了一个回想起来似乎显而易见的想法:使用一个不是 玩具的开放源代码操作系统,并实现他们的安全思想,以显示(1)它可以工作,(2)它具体如何工作(通过为所有人提供源代码)。他们选择了主导市场的开放源代码内核(Linux)并在其中实现了他们的思想,即“security-enhanced Linux”(SELinux)。毫无意外,使用真正的系统(Linux)让 NSA 研究人员可以处理他们在玩具中无法处理的问题。例如,在大部分基于 Linux 的系统中,几乎所有都是动态链接的,所以他们不得不做一些关于程序如何执行的深入分析(查阅他们关于“entrypoint”和 “execute”权限的文档以获得更多资料)。这是一个更为成功的方法;正在使用 SELinux 的人比使用先前的原型的人多得多。 9UD爱河池
9UD爱河池
SELinux 如何工作9UD爱河池
那么,SELinux 如何工作呢?SELinux 的方法实际上非常普通。每一个重要的内核对象,比如每个文件系统对象和每个进程,都有一个关联到它们的“安全上下文(security context)”。安全上下文可以基于军事安全层级(如不保密的、保密的和高度保密的)、基于用户角色、基于应用程序(这样,一个 Web 服务器可以拥有它自己的安全上下文),或者基于很多其他内容。当它执行另一个程序时,进程的安全上下文可以改变。甚至,取决于调用它的程序,一个给定的程序可以在不同的安全上下文中运行,即使是同一个用户启动了所有程序。 9UD爱河池
9UD爱河池
然后系统管理员就可以创建一个指定哪些特权授与哪个安全上下文的“安全策略(security policy)”。当发生系统调用时,SELinux 去检查是否所有需要的特权都已经授与了——如果没有,它就拒绝那个请求。9UD爱河池
9UD爱河池
例如,要创建一个文件,当前进程的安全上下文必须对父目录的安全上下文的“搜索(search)”和“add_name”特权,而且它需要有对于(要创建的)文件的安全上下文的“创建(create)”特权。同样,那个文件的安全上下文必须有特权与文件系统“关联(associated)”(所以,举例来说,“高度保密”的文件不能写到一个“不保密”的磁盘)。还有用于套接字、网络接口、主机和端口的网络访问控制。如果安全策略为那些全部授与了权限,那么请求就会被 SELinux 所允许。否则,就会被禁止。如果按部就班地去做所有这些检查将会较慢,不过有很多优化方案(基于多年的研究)使其变得很迅速。 9UD爱河池
9UD爱河池
这一检查完全独立于类 UNIX 系统中的通常的权限位;在 SELinux 系统中,您必须 既 有标准的类 UNIX 权限, 又 有 SELinux 权限才能去做一些事情。不过,SELinux 检查可以做很多对传统的类 UNIX 权限来说难以完成的事情。使用 SELinux,您可以方便地创建一个只能运行特定程序并且只能在特定的上下文中写文件的 Web 服务器。更有趣的是,如果一个攻击者攻入了 Web 服务器并成为 root,攻击者不会获得整个系统的控制权——如果有一个好的安全策略的话。 9UD爱河池
9UD爱河池
那就有了困难:为了使 SELinux 有效,您需要有一个好的安全策略来由 SELinux 执行。大部分用户将需要一个他们容易修改的实用的初始策略。几年前我开始体验 SELinux;那时,初始策略还不成熟,有很多问题。例如,在那些以前的日子中我发现早期的样例策略不允许系统更新硬件时钟(最后我提交了一个补丁以解决这一问题)。设计好的初始安全策略类似对产品分类, NSA 希望由商业界来做,而且看起来是要这样做。Red Hat、一些 Debian 开发者、Gentoo 以及其他人正在使用基本的 SELinux 框架,并且正在创建初始安全策略,这样用户可以马上开始使用它。的确,Red Hat 计划为所有用户在他们的 Fedora 内核中都启用 SELinux,并提供简单的工具来使得非专业用户可以通过选择一些常见选项来修改他们的安全策略。Gentoo 有一个可引导的 SELinux LiveCD。这些团体将使得最小化程序特权变得更简单,而不需要大量代码。 9UD爱河池
9UD爱河池
在这里我们又回到了原处。SELinux 只有当程序执行时才允许发生安全传输,它控制进程的权限(不是一个进程的一部分)。所以,为了充分发挥 SELinux 的潜力,您需要将您的应用程序分解为独立的进程和程序,只有一些小的有特权的组件—— 这恰恰如同如何在没有 SELinux 的情况开发安全的程序。像 SELinux 这样的工具让您可以更好地控制授与的权限,并这样创建一个更强有力的防御,但是,您仍需要将您的程序拆分为更小的组件,以使得那些控制能发挥最大的效用。 9UD爱河池
9UD爱河池
普通的Linux 与SELinux相比较9UD爱河池
9UD爱河池
普通的Linux系统的安全性是依赖内核的,这个依赖是通过setuid/setgid产生的。在传统的安全机制下,暴露了一些应用授权问题、配置问题或进程运行造成整个系统的安全问题。这些问题在现在的操作系统中都存在,这是由于他们的复杂性和与其它程序的互用性造成的。9UD爱河池
9UD爱河池
SELinux只单单依赖于系统的内核和安全配置政策。一旦你正确配置了系统,不正常的应用程序配置或错误将只返回错误给用户的程序和它的系统后台程序。其它用户程序的安全性和他们的后台程序仍然可以正常运行,并保持着它们的安全系统结构。9UD爱河池
9UD爱河池
用简单一点的话说就是:没有任何的程序配置错误可以造成整个系统的崩溃。9UD爱河池
9UD爱河池
SELinux 在 Linux 上是一项十分重要的技术!当我第一次面对它的时候,有当年我遇见 LDAP 时的情况,好象没有见面的老朋友再次见面一样。9UD爱河池
9UD爱河池
在自己内刚学习 Linux 的时候,就被人问起一个 Unix 中的核心问题︰9UD爱河池
9UD爱河池
* 为什幺 root 的权力是无限大的。9UD爱河池
* 有没有办法令 root 的权力受到限制。 9UD爱河池
9UD爱河池
这虽然不是 SELinux 的主要课题,但是 SELinux 却对这两个问题有很好的回答。9UD爱河池
9UD爱河池
在安全方面 SELinux 也对 Linux 本身加强了安全级数, Linux 的安全级数一直是 C 级或 C+ 级,和 Windows 服务器的级数相同,但是 SELinux 却有望把 Linux 的安全级数提升至 B 级。9UD爱河池
9UD爱河池
所以你想 SELinux 是否在未来是一个必学的课题。9UD爱河池
9UD爱河池
MAC 是 SELinux 的精要所在,也是很多人在学习 SELinux 最不习惯的地方。(包括我在内。)9UD爱河池
9UD爱河池
什么叫做 MAC ?9UD爱河池
9UD爱河池
我想你可能会知道什么叫做 chroot 的。 chroot 就是把某程序置于文件系统下的某一处,而当运行的时候,就不会离开这个文件系统的部份。(也就是不会影响整个的文件系统。)bind 是最喜欢使用这个方式来增进他的安全级数的。9UD爱河池
9UD爱河池
那 MAC 和 chroot 有什么部份是相似的?这部份你可以想想如果把所有的程序都分开不同的层次来运行( domain )。而不同的 domain 却各自独立,而且如果没有经过授权是不可以由 domain A 跳到 domain B ,情况就如 chroot 一样。9UD爱河池
9UD爱河池
很多人都问为什系统下的 root 在系统下却有什事情无法做?!9UD爱河池
9UD爱河池
其实说穿了是因为 root 所属的 domain type (如 sysadm_t 或者 staff_t )他们没有授权「跳到」所需要执行某程序的 domain type 下。9UD爱河池
9UD爱河池
如果无法做这样的「跳」,也就无法做希望的工作。因些 root 的权力就受到限制了!9UD爱河池
9UD爱河池
谁定下这些 domain 和权限呢?9UD爱河池
9UD爱河池
其实这是在 SELinux 的开机的时候会 load 起一个叫做 policy,* 的政策权限文件,这文件内中就定义了这些权限。如果你的 SELinux 是不能在开机后转回 permissive 模式的话,那你的 root 也可能无法修改当中的设定!9UD爱河池
9UD爱河池
那 MAC 有什么好处?9UD爱河池
9UD爱河池
其实好处就如 chroot 一样把系统内任何东西都加上一层保护层。那就算是入侵进入了你的计算机,也很有可能无法有任何事情能做!9UD爱河池
9UD爱河池
例如︰你的 imapd 和 popd 服务器是以 root 的权限执行的!如果某天发现了一个极严重的 bug ,而使得入侵者可以从这两个服务器进入系统!9UD爱河池
9UD爱河池
如果你的 Linux 系统有被 SELinux 保护的话,那么入侵者仍没有办法拿到 Linux 系统下完整的 root 的权限,因为它被 imapd 或者 popd 所属的 domain type 所限制,因此他的 Linux 系统仍被 SELinux 系统保护。9UD爱河池
9UD爱河池
但是没有 SELinux 保护的系统,它就可能因为 imapd 或者 popd 服务器入侵而令到系统进入而产生不可预期的安全问题。

上一篇:设置Linux内核参数
下一篇:SELinux设置分析工具
关键字:

评论

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

河池新闻

图说城市 图说天下

阅读排行 阅读排行


爱河池

简介|联系方法|服务|相关法律|投诉建议