SElinux简介

Posted centos-paul

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SElinux简介相关的知识,希望对你有一定的参考价值。

Selinux是由美国国家安全局发起的,在进程层面管控文件系统资源的访问的一种安全机制。集成于内核之中,但可以通过修改/boot/grub/grub.conf文件(centos6)中title后Kernel所在行的内容进行屏蔽:

技术分享图片

 

 

只需要在行尾添加“selinux=0”即可,此时并未在当前环境生效,通过命令getenforce查看selinux状态仍然为Enforcing状态(强制,也即生效状态)

技术分享图片

但是一旦设备重启后,selinux这一安全机制将会失效(内核模块将跳过selinux),想要恢复把上述配置文件改为默认,并重启即可。注意,重启后selinux会重新为系统中的进程以及文件系统配置安全上下文,过程耗时较长,而且配置完成后会再次自动重启设备。(安全上下文的概念将在下文介绍)因此如果要永久设置当前主机的selinux状态为Disabled,可以通过上述方法来实现,但更常用的是修改selinux配置文件:/etc/selinux/config来完成。

技术分享图片

如下图,将“SELINUX=”后的Enforcing该为Disabled,保存退出后再执行命令setenforce 0(单独执行该命令会仅在当前状态生效,改回Enforcing用命令setenforce 1)即可。此时用getenforce查看状态

技术分享图片

Permissive即为selinux的宽容模式,进程会忽略selinux的所有限制,但如果原先是限制状态则会给出警示,并记录到日志文件中,但不会阻挡。下次重启后,selinux会变成Disabled状态。恢复办法同上。

以上讨论了selinux的开启及关闭办法,下面我们详细探讨下selinux 的作用机制:

首先再次看下selinux的配置文件(centos5/6/7:/etc/selinux/config)

技术分享图片

最后一行SELINUXTYPE的值为targeted(默认为此,其他类型基本不用)此类型针对大多数网络服务进行了严格的限制,对本地的进程基本不做要求。下两图大致展示了selinux的运行机制(图片选自鸟哥的Linux私房菜第四版)

技术分享图片

技术分享图片

 

 

简单来说, 一个主体(通常为进程)要对目标资源(通常为文件系统)进行访问,在selinux开启的条件下,大致需要进行以下步骤:

1)进程的布尔值状态是否为on(到达目标资源)

2)目标文件系统的context值是否与本进程的context值匹配(安全上下文对比,不匹配则无法访问)

3)目标文件系统的普通权限是否对本进程开放(rwx权限是否设置得当)

如果以上三点都满足,则进程可正常访问目标资源

先看selinux各个规则的布尔值查询,命令:getsebool -a(系统所有selinux规则下的布尔值情况)getsebool 规则名称 (查看某条规则的布尔值状态)

技术分享图片

 

在此仅部分显示了布尔值为1的情况,每条规则到底在允许(on)或限制(off)什么,这里不做深入探讨。

以文件/etc/passwd为例,我们看下它的安全上下文内容,命令:ll -Z /etc/passwd,若为目录,则在Z后加d

技术分享图片

以:为分隔符,我们重点关注“_t”部分,也是最重要的部分,对于一个文件而言,创建时默认继承所在目录的context值,执行ll -Zd /etc,两者“_t”部分完全一致。在此做一个引申,mv/cp -a

/cp -c命令会保留原文件的context值。而cp/cp -p则无此约束。当一个文件的context值与某个进程的context值能作用的域不匹配时,该进程就无法读取该文件。

命令chcon/restorecon用以设置安全上下文的context值

1)chcon [-R] [-t type] 文件 或者 chcon --reference=范例文件 文件

-R:递归进行修改

-t:接安全上下文的类型字段,****_t

-v:显示过程

--reference 以范例文件为模板对目标文件进行设置

2)restorecon [-Rv] 文件或目录(对文件或目录的默认context值进行恢复)

-R:递归进行修改

-v:显示过程

在此做个引申,通过semanage命令对目录的默认安全上下文进行查询和修改

例:在/srv目录下创建子目录mycron,将mycron默认context值改为system_cron_spool_t

技术分享图片

技术分享图片

semanage fcontext -a -t system_cron_spool_t "/srv/mycron(/.*)?"

 

 如果查询到某个selinux规则,并知道了该规则的用途,想要关闭或开启此规则时,该如何处置呢?

setsebool [-P] 规则名称 [0|1] (P选项可写入配置文件使其永久生效)  

 


以上是关于SElinux简介的主要内容,如果未能解决你的问题,请参考以下文章

selinux简介

Linux学习61 企业军工级别安全策略-SELinux简介

Seliux简介

SELinux 入门简介

SELinux入门简介

linux基础学习第二十一天之SElinux