介绍:
SELinux概览:
SELinux深入研究:
Fedora中策略的实现:
Fedora的缺省SELinux策略:
更多关于SELinux的资料:
关于作者和译者:
介绍:
当今世界,无处不在高速互连网连接、如备有无线接入点的咖啡馆和在网上到处传播的各种黑客工具使得出于对电脑安全的考虑成为老生常谈。出于解决安全问题, NSA在Linux社区的帮助下研发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文档。这种体系叫做 Security-Enhanced Linux或简化为SELinux。
SELinux概览:
SELinux是一种基于 域-类型模型(domain-type)的强制访问控制(MAC)安全系统,他由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后更有一个相应的安全策略。
众所周知,标准的UNIX安全模型是"任意的访问控制"DAC。就是说,任何程式对其资源享有完全的控制权。假设某个程式打算把含有潜在重要信息的文档仍到 /tmp目录下,那么在DAC情况下没人能阻止他!而MAC情况下的安全策略完全控制着对任何资源的访问。这是MAC和DAC本质的区别。
SELinux 里实现的MAC允许程式在/tmp目录下建立文档,也允许这个文档按照UNIX权限字的需要对全世界可读,但是当UNIX许可检查应用后, SELinux许可检查还要进一步判断对资源的访问是否被许可。换句话说,尽管某些UNIX文档的权限被设定为0777但是您也许仍然会被禁止读,写和执行该UNIX文档。在只有DAC的情况下,用户能够查看或更改属于他的任何文档。SELinux则能够限制每一个进程对各种资源的访问,和访问的权级。就是说当一个程式在使用含有敏感数据时,这些数据会被禁止写入那些低权级进程可读的文档中。
SELinux提供了比传统的UNIX权限更好的访问控制。
例如,管理员能够只允许一个应用程式添加记录到一个日志文档但不允许其重写或删除该日志文档的内容。虽然ext2和ext3文档系统有一个append- only标签(使用chattr配置),但是这属性不区分某一个进程(不能在为一个访问append-only的同时,又允许另一个进程据有完全可写的权利);另一方面,一个应用程式能够被允许在一个文档夹中建立文档和向其写入数据,但不能删除文档:这种特性是没有SELinux的普通的Linux内核所不能做到的。更有,网络应用程式能够绑定到其需要的端口上(如BIND的53端口),但不能绑定其他端口。
域-类型模型意味着在安全域中运行着的每一个进程和每一个资源(一般文档、目录文档和套接字等)都有一个和之相联系的"类型"(type)。
在这基础之上建立了一系列规则,这些规则列出了某个域能够在每一个类型上执行的任何动作。域-类型模型的一个长处就是我们能够对策略进行分析,从而判断出哪些信息有可能外溢。在标准的UNIX环境中,用户一般能够使用ps命令来互相查看彼此的进程列表,然而这也会为攻击者提供有价值的信息。甚至就算完全阻止用户使用ps命令,信息还是会意外的或故意的泄露,其实在一个给定的UNIX环境中,哪些信息会发生泄露是无法判断的。而在SELinux情况下,我们会有很多工具用来分析SELinux策略并判断哪些信息泄露是可能的。举个例子,假如有两个应用程式被允许向一个日志文档添加数据,且他们互相不能直接通信。那么假如一个其中进程又获得了对该日志的读权限的话,那么一个单方通信就有可能形成。
对访问/etc/shadow文档做访问限制是个很好的例子,通过该例子我们能够看出策略分析的好处。假如您装了Fedora Core3,并且选择了严格的SElinux策略配置,那么将会有17个域被允许访问shadow_t(/etc/shadow的type),其中有9个域据有写权利。这17个域中有2个能够从用户域(userdomain)进入,他们是/usr/bin/passwd和 /sbin/unix_chkpwd(一个为无特权应用程式提供密码检查的辅助程式,比如向锁屏程式就需要使用到unix_chkpwd)。这17个域中的某些域是为一些不常见的应用程式准备的(如radius_t域就是为RADIUS服务器准备的),所以,也就是说,就算除去这个不常用的域,一般的系统中更有16个可访问的域能够访问/etc/shadow呢!
值得注意的是,Fedora发型版的SELinux策略已变得越来越灵活;未来版本的策略也许会使何以访问/etc/shadow的域超过17个,这取决于可调节选项的实际配置。还要注意的是,17这个数字是基于严格的策略设定之后而得出的,实际上一个默认的安装会大于这个数字。
在一个没有SE的机器上,任何以root身份运行的进程都能够访问/etc/shadow文档。这意味着任何被"SETUID root"的二进制代码或以root身份运行的网络服务守护进程,他们所产生的任何安全问题都将会是灾难性的。
SELinux允许我们限制这些守护进程只访问其所需:
BIND 只能在53端口提供服务、DHCP服务器能够使用原始套接字(raw network access)、DHCP客户端也能够使用原始套接字并能够改变网络接口,但是他们谁都别想访问/etc/shadow,/home,/root等等这些重要的资源。所以,在SElinux的情况下,假如BIND受到了危害,他最多也就是发送一些伪造的报文罢了。假如DHCPD受到了危害,最坏的可能就是您的ip地址分配被搞乱。这比root权力被远程滥用好多了!
大家很清楚,一个进程能够援引另一个进程。
在这种情况下,拿DHCPD为例,DHCPD也许会尝试援引/sbin/unix_chkpwd对密码进行强力攻击。(But even that potential vulnerability is closed):SELinux能够提供"过渡"规则,这种规则能够用来判断各种域间过渡是否合法。有了"过渡"规则以后,由用户执行的屏幕保护程式能够顺利过渡到/sbin/unix_chkpwd这样一个特权域,然而DHCPD就别想了。
上述这些限制功能能够使您对系统的状态了如指掌。假如您发现您的DHCP服务器有BUG,那您只要简单的升级DHCP服务器到新版本并且确定每一个客户端都能正常获得IP地址就能够了。可是假如没有SE的话,您还要考虑您的新服务器是否已被黑客入侵并擦除了痕迹。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




