centos7的selinux的原理及相关配置

           centos7的selinux的原理及相关配置html


SELinux的全称是Security Enhanced Linux, 就是安全增强的Linux。在SELinux以前,root帐号可以任意的访问全部文档和服务;若是某个文件设为777,那么任何用户均可以访问甚至删除;这种方式称为DAC(主动访问机制),很不安全。linux

DAC 自主访问控制: 用户根据本身的文件权限来决定对文件的操做,也就是依据文件的own,group,other/r,w,x权限进行限制。Root有最高权限没法限制。r,w,x权限划分太粗糙。没法针对不一样的进程实现限制。sql

SELinux则是基于MAC(强制访问机制),简单的说,就是程序和访问对象上都有一个安全标签(即selinux上下文)进行区分,只有对应的标签才能容许访问。不然即便权限是777,也是不能访问的。apache

在SELinux中,访问控制属性叫作安全上下文。全部客体(文件、进程间通信通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户(u)、角色(r)和类型(t)标识符。但咱们最关注的是第三个部分centos

当程序访问资源时,主体程序必需要经过selinux策略内的规则放行后,就能够与目标资源进行安全上下文的比对,若比对失败则没法存取目标,若比对成功则能够开始存取目标,最终可否存取目标还要与文件系统的rwx权限的设定有关。因此启用了selinux后出现权限不符的状况时,你就得一步一步的分析可能的问题了。浏览器

以上简单了解便可,下面的是要重点掌握的安全

.selinux的状态查看与配置
服务器

    Selinux的配置文件位置:/etc/selinux/config,它还有个连接在/etc/sysconfig/selinux网络

使用config文件来配置selinux(经过配置文件修改selinux的状态属于永久修改,要重启系统才生效)ide

   查看selinux的配置文件/etc/selinux/config 或者他的连接文件 /etc/sysconfig/selinux/

wKiom1kcBeDwOW1lAAL4mMLGOeM922.jpg

  经过配置文件修改的selinux的状态属于永久修改,要从新启动服务才能生效

  wKioL1kcBgCykzjZAAuL6Jonc5M852.jpg

SELINUX=enforcing
#此项定义selinux状态。
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就没法继续操做下去
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。
permissive就是Selinux有效,可是即便你违反了策略的话它让你继续操做,可是把你的违反的内容记录下来(警告信息)
#disabled—禁用selinux。
SELINUXTYPE=targeted
#此项定义selinux使用哪一个策略模块保护系统。targeted只对apache ,sendmail,bind,postgresql,nfs,cifs等网络服务保护。

以上策略配置都放置在/etc/selinux目录中,目录和策略名称相同


1.使用selinux的相关命令查看和修改状态:(属于当即生效但临时性的

a、sestatus 查询selinux工做状态

wKiom1kcBlvCi64RAAY3nJIskvQ035.jpg

b、selinuxenabled检查selinux是否开启,配合echo $?.传回值是0为开启,1为关闭.

wKiom1kcBnHjFUVCAAKXOObTH6w853.jpg

c、getenforce查看selinux的状态

wKiom1kcBoDDPw7hAAF0WDwofbY638.jpg

d、setenforce设定selinux运行状态,1开启(Enforcing),0关闭(Permissive)

wKiom1kcBpnza8eVAAGOWNGhz_4511.jpg

二、查看安全上下文相关命令

a.查看文件上下文能够经过ls -Z

wKioL1kcBrLRbEKdAAH4IFwiumg918.jpg

b.查看进程上下文可使用ps Z

wKioL1kcBr7DB6YBAAMOQFEW7es520.jpg

c.查看用户上下文能够用id –Z

wKioL1kcBs-gdtqaAAGGsCEEcJ8064.jpg

安全上下文以用户:角色:类型(域)标识符的形式出现.(这里的用户指的是selinu用户)


 

三、如下是复制和移动文件时安全上下文的变化:


以httpd为例,这个httpd的进程能够访问/var/www/html下的文档对象在一个直接建立到网站的根目录下,另外一个建立在root下,而后用mv命令移动到网站的

wKioL1kcBvDTkjB4AAKT_C7BW_4135.jpg

查看html目录下文件的安全上下文

wKioL1kcBwCRNxllAANz-DQ81F8412.jpg

经过上图能够看到剪切操做时文件的上下文没有发生改变,仍然是原上下文,而复制操做时文件的上文继承了目标目录的上下文。经过浏览器访问这两个网页文件

wKiom1kcBxbDuw5qAAbzFP8V1SE333.jpgwKioL1kcBzehhLZEAAltKJrSqlA317.jpg

能够看到lala.html页面能访问而haha.html却被拒绝访问

查看权限发现apache用户对这两个文件都具备r权限,但haha.html文件却拒绝访问。

wKiom1kcB3ajnAZsAAMIMJ0EiWc710.jpg

缘由就是由于httpd进程不能访问域类型标签是admin_home_t的资源,被selinux将访问拒绝了。

查看日志/var/log/audit/audit.log 经过日志记录也能看到haha.html文件拒绝httpd进程访问。


wKiom1kcB4WiOU-5AAO3IKvrdfQ892.jpg因为此文件记录的信息不少不宜直接查看,能够借助audit2why和audit2allow

#audit2why</var/log/audit/audit.log

wKioL1kcB_Sgzs5uAAqb_Ln29dM174.jpg

注:提供audit2why和audit2allow工具软件包

wKiom1kcCBLhGKQ8AALDCD9dgiI919.jpg

收集Selinux产生的日志,另外一个工具是setroubleshoot,对应的软件包为

wKiom1kcCCqy9R5tAAHpgKdS180027.jpg

Setroubleshoot将错误信息写入/var/log/messages

#tail/var/log/messages | grep setroubleshoot

wKiom1kcCEaA1SIOAAsfUCBG70E300.jpg

上面的错误信息大概说的是”selinux阻止httpd访问这个文件,要查看完整的信息,请执行sealert命令”

wKioL1kcCF7hCeRhAAFX0PXTlts400.jpg 

能够用sesearch [--allow] [-s 主体类别] [-t 目标类别] [-b]查询详细规则

sesearch命令由下列软件包提供

 wKiom1kcCG_jTRPjAAMuvKvBSaY387.jpg

找出目标资源类别为httpd_sys_content_t的相关信息

 wKioL1kcCIOAd51PAAFljPgYtPQ798.jpg

wKioL1kcCLSCpdBCAAlCONUlrlk668.jpg

 

从上图显示信息表示[allow 主体程序安全上下文类别 目标资源安全上下文类别],说明这个资源类别能够被哪一个主体程序类别所读取。

找出主体程序为httpd_t相关的全部信息

 

wKiom1kcCOXRKwF2AAHKEPt8d6Y837.jpg


 

从上面的数据就能够看出程序httpd_t为个类别能够访问的哪些资源类别。

如何解决上述问题呢?解决方法就是更改test2.html文件的上下文。有两种方式,一种是经过restorerecon( restore context) 修复继承当前目录默认的上下文;一种是经过chcon (change context) 修改当前的上下文。

a.使用restorerecon( restore context) 修复继承当前目录默认的上下文

分两步实现:

首先为 /var/www/html 这个目录下的全部文件添加默认标签类型:

semanagefcontext  -a  -t httpd_sys_content_t  '/var/www/html(/.*)?' 

由于html目录的默认标签类型就是httpd_sys_content_t,因此此步能够省略

而后用新的标签类型标注已有文件:

restorecon -Rv /var/www/html/, 以后httpd就能够访问该目录下的文件了。

wKiom1kcCObTSXr2AAPMLH7wM-U974.jpg

wKiom1kcCRTyM4SEAAhLGHyI0pI428.jpg

semanage和restorecon命令是由下列软件包提供的

 wKiom1kcCVGRop27AANYHIOuWQo491.jpg

b.使用chcon (change context) 修改当前的上下文

 wKioL1kcCWjwDHpjAAGaJK8jsmo727.jpg

注:

chcon意思是change context 

    -t type 类型

    -R recursive 递归(特别适用于改变某个目录下全部文件的context) 

    -u user 

    -r role

 

--reference表示用lala.html文件的上下文修改haha.html文件的上下文。

wKioL1kcCZex2mKhAAIlgCvHUjI966.jpg

最后再看一个概念,SELinux的布尔值。这个布尔值相似一个开关,打开的话,他对应的一些服务就容许执行,不然的话就拒绝执行。

看看有哪些布尔值

 wKioL1kcCaviWq6WAAEMWLQanrQ196.jpgwKioL1kcCb_SVmPLAARu-FP4HTU330.jpg

也可用semanage命令#semanageboolean –l

知道了布尔值的名字,能够经过sesearch 来确认他关联了哪些服务的域,好比httpd_enable_homedir容许下列规则,若是设置为off的话,那么他们都是没法访问的。

 wKioL1kcCfDAnzRuAAGLtLQ4lHk086.jpgwKioL1kcCgThPPwhAAdLDJJ_kFw484.jpg

设置boolean值,-P为设置永久生效.

#setsebool [-P] 布尔值  on/off

下面看一个与布尔值有关的例子

确认已经启用了 Selinux、启动 FTP:

 wKiom1kcCiaSvqdjAAjW3Bp7yeo191.jpg

在匿名访问目录下建立 2 个文件进行测试,一个是在该目录下手动建立,这样

该文件会自动继承/var/ftp/pub 下的目录上下文的值,一个用 mv 命令从 root 目录下移

动过来,这样的文件会保留 root 目录下的安全上下文,以下

 wKiom1kcCkHw967mAAYkIFpVlF8334.jpg

使用匿名登陆测试:

 wKioL1kcClqBSbCJAA4HYM5b6vI016.jpg

发现这里看不到haha 文件

已知系统启动了 Selinux,先查看系统日志,有两个工具能够收集到 Selinux 产生的

日志,一个是 setroubleshoot,一个是 audit,先使用 audit 工具,使用方法

以下:

系统中提供了 audit 相关的命令,经常使用的有 audit2why 和 audit2allow,audit 产生的日志

放在/var/log/audit, 因为此文件记录的信息不少不宜直接查看,能够借助 audit2why

命令,首先启动 audit

在客户端登陆 FTP 服务器时会出发 audit deamon 产生日志:

 wKiom1kcCoeBri1ZAAEBmPB8_6Q936.jpgwKiom1kcCp_hPX4XAAxRgLLwSWE748.jpgwKioL1kcCsHy7CS3AAvzmGEOqE0572.jpg

 

AVC 是 access vector cache 的缩写, 目的是记录全部与 SELinux 有关的存取统计资料。

根据日志中的建议,使用 audit2allow 命令查看给出的建议以下:

 

 

验证布尔值中有关 FTP 的定义

 wKiom1kcCumQ0I9ZAAowOMV1b0E005.jpg

发现ftp_home_dir --> off,文件 root.txt 的类型恰好是 root:object_r:user_home_t:s0

因此更改此 bool 值就能够

 

wKiom1kcCwDA0lAnAAHU-FTNfKs364.jpg

wKioL1kcCwHxKfcDAAF4SOh635Q925.jpg

wKioL1kcCxDj7SoLAAwIkATGMnY467.jpg

(-P 是把该修改写到文件,下次启动仍然有效)

客户端登陆测试,发现 haha 文件就能够访问了

总结一下,若是搭配了某个服务器,而后客户端没法正常访问,应该按照下面的顺序进行排错:

1.该服务的配置文件中是否开启了相关的权限 ,好比是否容许匿名用户写入等等;

2.文件系统的权限,好比是否须要使用chmod修改权限

3.SELinux的上下文和布尔值

相关文章
相关标签/搜索