SELinux 如何工作?

SELinux 如何工作呢?


    SELinux 的方法实际上非常普通。每一个重要的内核对象,比如每个文件系统对象和每个进程,都有一个关联到它们的"安全上下文(security context)"。安全上下文可以基于军事安全层级(如不保密的、保密的和高度保密的)、基于用户角色、基于应用程序(这样,一个 Web 服务器可以拥有它自己的安全上下文),或者基于很多其他内容。当它执行另一个程序时,进程的安全上下文可以改变。甚至,取决于调用它的程序,一个给定的程序可以在不同的安全上下文中运行,即使是同一个用户启动了所有程序。
    然后系统管理员就可以创建一个指定哪些特权授与哪个安全上下文的"安全策略(security policy)"。当发生系统调用时,SELinux 去检查是否所有需要的特权都已经授与了--如果没有,它就拒绝那个请求。
    例如,要创建一个文件,当前进程的安全上下文必须对父目录的安全上下文的"搜索(search)" 和"add_name"特权,而且它需要有对于(要创建的)文件的安全上下文的"创建(create)"特权。同样,那个文件的安全上下文必须有特权与文件系统"关联(associated)"(所以,举例来说,"高度保密"的文件不能写到一个"不保密"的磁盘)。还有用于套接字、网络接口、主机和端口的网络访问控制。如果安全策略为那些全部授与了权限,那么请求就会被 SELinux 所允许。否则,就会被禁止。如果按部就班地去做所有这些检查将会较慢,不过有很多优化方案(基于多年的研究)使其变得很迅速。
    这一检查完全独立于类 UNIX 系统中的通常的权限位;在 SELinux 系统中,您必须 既 有标准的类 UNIX 权限, 又 有 SELinux 权限才能去做一些事情。不过,SELinux 检查可以做很多对传统的类 UNIX 权限来说难以完成的事情。使用 SELinux,您可以方便地创建一个只能运行特定程序并且只能在特定的上下文中写文件的 Web 服务器。更有趣的是,如果一个攻击者攻入了 Web 服务器并成为 root,攻击者不会获得整个系统的控制权--如果有一个好的安全策略的话。
那就有了困难:为了使 SELinux 有效,您需要有一个好的安全策略来由 SELinux 执行。大部分用户将需要一个他们容易修改的实用的初始策略。几年前我开始体验 SELinux;那时,初始策略还不成熟,有很多问题。例如,在那些以前的日子中我发现早期的样例策略不允许系统更新硬件时钟(最后我提交了一个补丁以解决这一问题)。设计好的初始安全策略类似对产品分类, NSA 希望由商业界来做,而且看起来是要这样做。Red Hat、一些 Debian 开发者、Gentoo 以及其他人正在使用基本的 SELinux 框架,并且正在创建初始安全策略,这样用户可以马上开始使用它。的确,Red Hat 计划为所有用户在他们的 Fedora 内核中都启用 SELinux,并提供简单的工具来使得非专业用户可以通过选择一些常见选项来修改他们的安全策略。Gentoo 有一个可引导的 SELinux LiveCD。这些团体将使得最小化程序特权变得更简单,而不需要大量代码。
   在这里我们又回到了原处。SELinux 只有当程序执行时才允许发生安全传输,它控制进程的权限(不是一个进程的一部分)。所以,为了充分发挥 SELinux 的潜力,您需要将您的应用程序分解为独立的进程和程序,只有一些小的有特权的组件-- 这恰恰如同如何在没有 SELinux 的情况开发安全的程序。像 SELinux 这样的工具让您可以更好地控制授与的权限,并这样创建一个更强有力的防御,但是,您仍需要将您的程序拆分为更小的组件,以使得那些控制能发挥最大的效用。

 

普通的Linux 与SELinux相比较


    普通的Linux系统的安全性是依赖内核的,这个依赖是通过setuid/setgid产生的。在传统的安全机制下,暴露了一些应用授权问题、配置问题或进程运行造成整个系统的安全问题。这些问题在现在的操作系统中都存在,这是由于他们的复杂性和与其它程序的互用性造成的。
SELinux只单单依赖于系统的内核和安全配置政策。一旦你正确配置了系统,不正常的应用程序配置或错误将只返回错误给用户的程序和它的系统后台程序。其它用户程序的安全性和他们的后台程序仍然可以正常运行,并保持着它们的安全系统结构。
用简单一点的话说就是:没有任何的程序配置错误可以造成整个系统的崩溃。
SELinux 在 Linux 上是一项十分重要的技术!当我第一次面对它的时候,有当年我遇见 LDAP 时的情况,好象没有见面的老朋友再次见面一样。
在自己内刚学习 Linux 的时候,就被人问起一个 Unix 中的核心问题︰


     * 为什幺 root 的权力是无限大的。
     * 有没有办法令 root 的权力受到限制。


    这虽然不是 SELinux 的主要课题,但是 SELinux 却对这两个问题有很好的回答。
在安全方面 SELinux 也对 Linux 本身加强了安全级数, Linux 的安全级数一直是 C 级或 C+ 级,和 Windows 服务器的级数相同,但是 SELinux 却有望把 Linux 的安全级数提升至 B 级。
MAC 是 SELinux 的精要所在,也是很多人在学习 SELinux 最不习惯的地方。(包括我在内。)

 

什么叫做 MAC ?


    我想你可能会知道什么叫做 chroot 的。 chroot 就是把某程序置于文件系统下的某一处,而当运行的时候,就不会离开这个文件系统的部份。(也就是不会影响整个的文件系统。)bind 是最喜欢使用这个方式来增进他的安全级数的。
那 MAC 和 chroot 有什么部份是相似的?这部份你可以想想如果把所有的程序都分开不同的层次来运行( domain )。而不同的 domain 却各自独立,而且如果没有经过授权是不可以由 domain A 跳到 domain B ,情况就如 chroot 一样。
很多人都问为什系统下的 root 在系统下却有什事情无法做?!
其实说穿了是因为 root 所属的 domain type (如 sysadm_t 或者 staff_t )他们没有授权「跳到」所需要执行某程序的 domain type 下。
如果无法做这样的「跳」,也就无法做希望的工作。因些 root 的权力就受到限制了!
谁定下这些 domain 和权限呢?
其实这是在 SELinux 的开机的时候会 load 起一个叫做 policy,* 的政策权限文件,这文件内中就定义了这些权限。如果你的 SELinux 是不能在开机后转回 permissive 模式的话,那你的 root 也可能无法修改当中的设定!

 

那 MAC 有什么好处?


    其实好处就如 chroot 一样把系统内任何东西都加上一层保护层。那就算是入侵进入了你的计算机,也很有可能无法有任何事情能做!
例如︰你的 imapd 和 popd 服务器是以 root 的权限执行的!如果某天发现了一个极严重的 bug ,而使得入侵者可以从这两个服务器进入系统!
如果你的 Linux 系统有被 SELinux 保护的话,那么入侵者仍没有办法拿到 Linux 系统下完整的 root 的权限,因为它被 imapd 或者 popd 所属的 domain type 所限制,因此他的 Linux 系统仍被 SELinux 系统保护。
但是没有 SELinux 保护的系统,它就可能因为 imapd 或者 popd 服务器入侵而令到系统进入而产生不可预期的安全问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值