如果你是一个运维人员,那么你一定听说过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。
欢迎访问博主的个人博客
http://www.zsythink.net/