SELinux是一个内核级别的安全机制,从Linux2.6内核之后就将SELinux集成在了内核当中,因为SELinux是内核级别的,所以我们对于其配置文件的修改都是需要重新启动操作系统才能生效的。现在主流发现的Linux版本里面都集成了SELinux机制,CentOS/RHEL都会默认开启SELinux机制。
selinux的主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)
selinux(security enhanced linux)安全增强型linux系统,它是一个linux内核模块,也是linux的一个安全子系统。
系统资源都是通过进程来读取更改的,为了保证系统资源的安全,传统的Linux使用用户、文件权限的概念来限制资源的访问,通过对比进程的发起用户和文件权限以此来保证系统资源的安全,这是一种自由访问控制方式(DAC);但是随着系统资源安全性要求提高,出现了在Linux下的一种安全强化机制(SELinux),该机制为进程和文件加入了除权限之外更多的限制来增强访问条件,这种方式为强制访问控制(MAC)。这两种方式最直观的对比就是,采用传统DAC,root可以访问任何文件,而在MAC下,就算是root,也只能访问设定允许的文件。
工作原理如下图:
二、SELinux基本概念
操作系统的安全机制其实就是对两样东西做出限制:进程和系统资源(文件、网络套接字、系统调用等)。在之前学过的知识当中,Linux操作系统是通过用户和组的概念来对我们的系统资源进行限制,我们知道每个进程都需要一个用户才能执行。在SELinux当中针对这两样东西定义了两个基本概念:域(domin)和上下文(context)。
2.1、工作类型
SELinux下存在不同的规则,SELinux根据不同的工作类型对这些规则打开或关闭(on|off<布尔值1|0>),然后通过规则的开启与关闭具体地限制不同进程对文件的读取。
getsebool -a 或者 sestatus -b # 查看当前工作类型下各个规则的开启与否
setsebool -P 规则名称 [0|1] # 修改当前工作类型下指定规则的开启关闭,-P表示同时修改文件使永久生效
域就是用来对进程进行限制,而上下文就是对系统资源进行限制。
三、策略
在SELinux中,我们是通过定义策略来控制哪些域可以访问哪些上下文。
在SELinux中,预置了多种的策略模式,我们通常都不需要自己去定义策略,除非是我们自己需要对一些服务或者程序进行保护
在CentOS/RHEL中,其默认使用的是目标(target)策略,那么何为目标策略呢?
目标策略定义了只有目标进程受到SELinux限制,非目标进程就不会受到SELinux限制,通常我们的网络应用程序都是目标进程,比如httpd、mysqld,dhcpd等等这些网络应用程序。
四、SELinux模式
SELinux的工作模式一共有三种 enforcing、permissive和disabled
①enforcing强制模式:只要是违反策略的行动都会被禁止,并作为内核信息记录
②permissive允许模式:违反策略的行动不会被禁止,但是会提示警告信息
③disabled禁用模式:禁用SELinux,与不带SELinux系统是一样的,通常情况下我们在不怎么了解SELinux时,将模式设置成disabled,这样在访问一些网络应用时就不会出问题了。
使用命令修改工作模式只在当前有效,想要开机生效,而且如果想要在disabled和其他两种模式之间切换,只有修改配置文件参数然后重启,该配置文件是/etc/selinux/config,另外也可以通过/etc/sysconfig/selinux文件修改,其实该文件是/etc/selinux/config的软链接文件
我们SELinux默认的工作模式是enforcing,我们可以将其修改为 permissive或者是disabled。
如果要查看当前SELinux的工作状态,可以使用 getenforce 命令来查看。
【注意:】通过 setenforce 来设置SELinux只是临时修改,当系统重启后就会失效了,所以如果要永久修改,就通过修改SELinux主配置文件