首页 > 代码库 > SELinux入门基础

SELinux入门基础

 如果你是一个运维人员,那么你一定听说过SELinux,即使你不会使用它,对于SELinux的看法,见仁见智。

有的朋友认为它大大的提升了系统的安全性,极度推崇它,有的朋友则认为它不是必须的,不熟悉的情况

下轻易使用会造成很多错误,弊大于利,于是直接关闭它,还有些朋友能把它当做阴谋论去讨论。我们无

法评判孰是孰非,只能说,如果有使用它的需求,对它有一定的了解即可,现在,我们来初步了解一下它。

 

SELinux的什么?

通俗的讲:SELinux是一个Linux模块,主要用于提高Linux的安全性。

这也太通俗了吧,好吧,我们来稍微书面化一点的解释一下SELinux。

 

SELinux: Secure Enhanced Linux

它是美国国家安全局NSA「The National Security Agency」 和   SCC「Secure Computing Corporation 」

开发的 Linux的一个强制访问控制的安全模块。

2000年以GNU GPL发布,在Linux内核2.6版本后,SElinux集成在内核中。


技术分享


 

SElinux有什么用呢? 

SELinux的主要功能是实现MAC。

MAC又是啥?最恨用专业名词解释专业名词的人啦!······别急,继续看。

MAC:Mandatory Access Control 的缩写,翻译过来就是,强制访问控制。从字面上我们可以看出,MAC

的特点就是强制,也就是说,访问是受限制的,并非自由的,说到自由,就可以提到另一个与MAC相对的

概念,DAC ,  DAC是Discretionary Access Control的缩写,意思是 自由访问控制,Linux默认的访问机制

就是DAC,Linux的UGO(User、Group、Other)和ACL(Access Control List,访问控制列表)权限管理方

式就是典型的自主访问机制,而SELinux实现的MAC机制则正好相反,那么,既然宣称MAC的安全限制相对于

DAC的安全限制级别更高,那么高在哪里呢,我们来举个例子。

 

  当用户A启动了一个进程,我们暂时称这个进程为"进程1",那么,进程1是以用户A的身份运行的 , 假如说,

进程1要完成自己的功能,需要访问3个文件,用户A有这3个文件的访问权限,那么,进程1是可以访问这3个

文件的,但是,操作系统中,可能很多其他的文件也属于用户A,从事实上来说,进程1也是可以访问这些文

件的,因为进程1是以A用户的身份运行的,但是,这并不代表进程1 "应该访问 " 这些文件。如果,这个时候,

"骇客"劫持了进程1,那么,"骇客"不仅能够访问刚才提到的那3个文件,还能访问其他所有属于用户A的文件,

这种情况对于操作系统来说,是不安全的,这违反了"最小权限法则",也就是说,进程如果需要完成自己的

任务,可能需要访问N个资源,那么,操作系统就只开放这N个资源对于这个进程的访问权限。因为Linux是基

于DAC的访问控制机制,所以,是无法满足这样的要求的。这个时候,就需要SELinux所支持的MAC访问机制了。



技术分享



selinux的工作原理

  以前学习进程的时候,我们说过,进程是以执行它的用户的身份运行的,当这个进程要访问文件,会先去匹配文

件的属主,如果文件属主不匹配进程属主,则去匹配文件的属组,如果还不匹配,就以文件的other权限去对文件

进行操作。

  那么,selinux是怎么控制进程的呢,它是通过"安全标签"的方式,决定进程是否有权限操作文件的。selinux为

每个文件都提供了安全标签,也为每个进程提供了安全标签,当进程要操作文件的时候,selinux会判断,进程的"安

全标签"是否能够"匹配"文件的"安全标签",如果"匹配",进程则能够操作文件,此处说的"匹配"并不是完全相等的

意思,而是说文件的"安全标签"是否在进程的"安全标签"能够操作的范围以内,再换一种说法,就是说,进程的"安

全标签"能够操作的范围,包含了文件的"安全标签"。其实selinux的这种思想,跟linux中进程匹配文件权限的原理大

概相似,我们可以尝试去对比它们,这样更方便我们理解。



SELinux相关概念


此处,我们先概述一下selinux经常会用到的一些概念,以便我们能够更好的理解selinux。

selinux经常会用到的一些概念有如下几个:

主体:Subjects

目标:Objects

安全上下文security context

策略:Policy

模式:Mode

布尔型设置


 

现在,我们对上述概念一一进行解释



主体和目标

上述提到的主体和目标可以理解为"主谓宾"中的"主"   和   "宾",主体,在SELinux中其实就是指进程,目标,可

以理解为主体需要操作的对象,目标可以是文件、用户、另一个进程、端口等,实际情况不同,主体要操作的

目标也不同,如果,进程想要读取一个文件,那么,进程则是主体 , 文件则是目标,读取则动作,也就是"主谓

宾"中的谓语,如果进程想要编辑一个文件,那么,"编辑"就是"主谓宾"中的谓语。

 

 

安全标签:

安全标签也被称为安全上下文(security context)

selinux会为每个文件都打上安全标签,也会为每个进程都打上安全标签。

selinux的安全上下文由5个元素组成,每个元素用 ":" 隔开, 安全标签的格式如下。

user:role:type:sensitivity:category

我们来解释一下安全标签 的5个部分:

user              :selinux的用户类型,与系统用户不同,并不是系统用户,而是selinux的用户类型。指示登录系

                统的用 户类型,如root, user_u,system_u,多数本地进程都属于自由( unconfined)进程。

role               :selinux的角色,类似于系统用户组,但是它属于selinux,是selinux的角色,定义文件,进程

                 和用户的用途。

type               :类型,指定数据类型,规则中定义何种进程类型访问何种文件,如果一个文件可能被多个进程共

                同访问,那么,这个文件的类型常常被设置成public_content_t或者public_content_rw_t

sensitivity:敏感度,限制访问的需要,由组织定义的分层安全级别,如unclassified, secret,top,secret,

                一个对象有且只有一个sensitivity,分0- 15级, s0最低,Target策略默认使用 s0。

category      :类别,对于特定组织划分不分层的分类,如FBI Secret, NSA secret, 一个对象可以有多个categroy,

                 c0-c1023共1024个分类, Target策略类型不使用cateaory。

如果我们不对selinux的策略进行开发,那么,user,role,sensitivity,category对于我们来说都是不常用的。

对于运维人员来说,最常用到的就是selinux安全标签中的type字段。

 

安全标签中的第三个字段type对于进程和对于文件来说,称呼不一样

tpye对于一个主体(进程)来说,称为:domain

type对于一个目标(文件)来说,称为:type

理论上来说,如果主体的domain的活动范围包含了目标的type,则主体可以操作目标。

 

 


策略

策略:Policy

 当进程操作文件的时候,selinux怎样判断进程的domain有没有对文件的type进行操作的权限呢,selinux是有自

己的数据库的,这个数据库中存放了很对规则,这些规则说明了,哪种domain能够对哪些type进行什么样的操作,

所以,当进程需要操作文件的时候,selinux就回去这个规则库中去查找一遍,如果,规则库中已经定义了进程的

domain对文件的type能够执行对应的操作,那么进程则可以操作文件,如果不行,则不能够对文件进行对应的操

作。这些规则被称为策略。

  当一个主体(进程)尝试访问一个目标(比如一个文件),SELinux 安全服务器SELinux Security Server(在内

核中)从策略数据库(Policy Database)中运行一个检查。如果 SELinux 安全服务器授予权限,该主体就能够访

问该目标。如果 SELinux 安全服务器拒绝了权限,就会在 /var/log/messages 中记录一条拒绝信息。

 

 

selinux有三种工作模式:

Enforcing   强制——  SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问,相当于

                           selinux处于激活状态,开始对进程进行限制。

Permissive 宽容——  SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息被记录于日志。此种模式相

                                  当于开启了selinux,但是没有进行实际限制,只是用于记录也可以理解为"禁用"。

Disabled     禁用——  完全禁用 SELinux,相当于没有selinux。

 

 

策略类型:

 此处说的"策略类型"并不是刚才提的到策略(Policy),而是说selinux对进程限制的严格程度,不同的严格程度称为

不同的策略类型,selinux有多种策略类型,但是,在不同的操作系统版本中,所支持的策略不同,我们先把策

略列举出来,selinux有4种策略类型,如下。

strict :

最严格的策略类型,每个进程都受到selinux的控制,因为过于严格,所以,如果用户设置的策略稍有不

当,则有可能导致进程无法启动,或者无法正常访问需要访问的资源,所以,此策略类型很少使用。

targeted :

用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程, rhel4只控制13个

服务,rhel5控制88个服务,此策略类型最为常用。

minimum  :

此策略类型可以理解成修改过的targeted策略类型,只对选择的网络服务进行保护。

mls :

提供MLS(多级安全)机制的安全性。minimum和mls稳定性不足,未被广泛加以应用。

centos5中支持targeted策略和strict策略

centos6中支持targeted策略和mls策略

centos7中支持targeted策略和mls策略以及minimum策略

可见:最常用,而且每个操作系统版本都支持的SELinux策略类型就是targeted策略。

如果用户想要设置selinux的策略类型, 需要修改配置文件/etc/selinux/config中的SELINUXTYPE的值。


 

 

布尔型设置

 刚才描述的概念,都是从进程操作文件的角度去描述的selinux,现在,我们从另一个角度去描述selinux。

一个程序,可能会实现多个功能,不同的功能,可能会为进程引入不同级别的安全风险。举个例子说明,

ftp服务,允许上传、允许下载,对于服务器来说,上传这个功能的风险等级明显比下载功能更高,即便

是上传,也分为匿名上传,和登录账户后上传两种,对于服务器来说,匿名上传的风险明显更大,所以,

如果某个服务提供了多种功能,selinux会禁用它认为风险较大的功能,如果用户需要使用这些被selinux禁

用的功能,则需要通过开关,打开它,解禁它,我们把禁用理解为false,我们把打开理解为true,我们把

这种打开或禁用某个进程中的某个功能的操作,称为selinux的布尔型设置。



好了,理论已经说过了,下次聊聊怎样实际使用SELinux。



本文出自 “学思行知” 博客,谢绝转载!

SELinux入门基础