Selinux
Selinux的相关配置文件是在/etc/selinux下,我们在日常应用中常常会遇到某些服务明明已经配置的毫无问题,但却怎么测试都不通的情况,那这个时候如果防火墙已经关闭的话,那很有可能就是selinux在作怪。
一. 简介:
在开始介绍之前,先介绍几个概念:
DAC(Discretionary access control,自主访问控制):DAC机制就是指对象(比如程序、文件或进程等)的的拥有者可以任意的修改或授予此对象相应的权限。例如传统Linux,Windows等。
简单理解DAC就是rwx!因此,当某个程序想要对文件进行存取时, 系统就会根据该程序的拥有者/群组,并比对文件的权限,若通过权限检查,就可以存取该文件了。
DAC的缺点:
· root 具有最高的权限:如果不小心某个程序被它人取得,且该程序属于 root 的权限,那么这支程序就可以在系统上进行任何资源的存取
使用者可以取得程序来变更文件资源的存取权限:如果你不小心将某个目录的权限设定为 777 ,由于对任何人的权限会变成 rwx ,因此该目录就会被任何人所任意存取!
MAC(Mandatory Access Control,强制访问控制):MAC机制是指系统不再允许对象(比如程序、文件或文件夹等)的拥有者随意修改或授予此对象相应的权限,而是透过强制的方式为每个对象统一授予权限,例如SELinux。
委任式存取控制 (MAC):可以针对特定的程序与特定的文件资源来进行权限的控管! 也就是说,即使你是 root ,那么在使用不同的程序时,你所能取得的权限并不一定是 root , 而得要看当时该程序的设定而定。如此一来,我们针对控制的『主体』变成了『程序』而不是使用者喔! 此外,这个主体程序也不能任意使用系统文件资源,因为每个文件资源也有针对该主体程序设定可取用的权限! 如此一来,控制项目就细的多了!但整个系统程序那么多、文件那么多,一项一项控制可就没完没了! 所以 SELinux 也提供一些预设的政策 (Policy) ,并在该政策内提供多个规则 (rule) ,让你可以选择是否启用该控制规则!
举例:
以前:root--->启动httpd---->httpd可以访问系统任何文件
现在:root--->启动httpd---->httpd只能访问/var/www/目录(这是MAC)规则的约束
如果httpd想要访问其他目录,那么必须满足两个条件:DAC的rwx + MAC的规则
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux® 上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到
SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制系统。对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。。 (MAC)
SELinux是一种基于 域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。
众所周知,标准的UNIX安全模型是"任意的访问控制"DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他!
而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。
SELinux提供了比传统的UNIX权限更好的访问控制。
前面也是摘抄的,说了这么多,其实就是一点,因为传统的linux并不是安全的,所以需要selinux来加强安全级别,防止攻击
二.Selinux原理
在SELinux 中,每个对象(程序、档案、进程等)都拥有一个Security Context(安全上下文)【后面再解释】,它就像标签一样,贴在每个对象身上,上面记载着这个对象所具有的权限。而我们可以通过制定Security Policy(安全策略)来定义这些安全上下文,从而定义哪种对象具有哪些权限。当一个对象需要执行某个动作时,系统会依照安全策略所制定的内容来检查相对应的权限,如果全部权限都符合的话,系统就会允许这个操作的执行,否则都将遭到拒绝或失败。这些过程不会影响到其它正常运行的对象,系统会保证它们的安全系统结构以及稳定运行。这里还要说明的是,到目前为止,SELinux系统中的某个对象需要执行某个动作的时,系统权限认证不仅仅单独根据安全策略所制定的内容来检查,同时还要根据传统DAC来检测,只有DAC以及SELinux全部认证通过了才能进行正常操作。
简单的说Selinux就好比将系统分成了彼此隔离的区域,所有的对象都在不同的区域中,没有经过授权的对象则不可以在不同区域之间传递数据,所以常常会有一些开启了selinux的root有些服务就是无法正常运行,所以root在selinux下是不具备所有权限的。这样也许是很麻烦,但好处也是显而易见的,因为彼此都进行了隔离,那么如果那天不小心某个区域被人入侵,那也只能破坏此区域下的环境,而无法对其他区域破坏,因为前面说了彼此是隔离的啊呵呵。例如你某个服务是以 root 的权限执行的。而此服务存在着一个极严重的 bug ,而使得入侵者可以通过这个服务的漏洞进入系统。但如果你的 Linux 系统有SELinux 保护的话,那么入侵者仍没有办法破坏整个系统,因为它被这个服务所属的 domain 所限制。但是没有 SELinux 保护的系统,它就可能因此而入侵整个系统,而产生不可预料的后果。
总结:SELinux 是透过 MAC 的方式来控管程序,他控制的主体是程序, 而目标是文件(该程序欲访问的文件)!
·主体 (Subject):SELinux 主要想要管理的就是程序,主体= process;
·目标 (Object):主体程序将访问的文件,目标=文件;
·政策 (Policy): (后面再提及)由于程序与文件数量庞大,因此 SELinux 依据服务来制订基本的存取安全性政策。这些政策内包含有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 5.x 里面仅有提供两个主要的政策,分别是:targeted、strict
· 安全性上下文 (security context):
我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主体与目标的安全性文本必须一致才能够顺利存取。 这个安全性文本 (security context) 有点类似文件系统的 rwx !安全性文本的内容与设定是非常重要的!如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!
三、selinux基本配置
目前的操作系统基本都默认安装了selinux,其配置文件为:/etc/selinux/config。如图
配置文件就是如图所示的,画红线的部分我们接下来就提及
Selinux的状态有三种分别为:enforcing、permissive、disabled
分别为开启、警告、关闭
Enforcing:开启selinux,假如你违反了规则,则会阻止你无法继续操作下去
Disabled:关闭selinux。
SELINUXTYPE 参数值:有「targeted、strict」两种:
SELINUXTYPE=targeted:保护网络相关服务。针对网络服务限制较多,针对本机限制较少,是预设的政策
SELINUXTYPE=strict:完整的保护功能,包含网络服务、一般指令及应用程序
(不过日常应用中,我们一般都设SELINUXTYPE为targeted,要是设置成strict,那么系统会启动不起来。)
在/etc/selinux/targeted文件夹中定义的就是targeted属性,这个targeted policy 的用途可为保护下列的网络服务: