linux7 selinux策略,centos7的selinux的原理及相关配置

centos7的selinux的原理及相关配置

SELinux的全称是Security Enhanced Linux, 就是安全加强的Linux。在SELinux之前,root账号能够任意的访问所有文档和服务;如果某个文件设为777,那么任何用户都可以访问甚至删除;这种方式称为DAC(主动访问机制),很不安全。

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

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

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

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

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

一.selinux的状态查看与配置

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

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

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

a0bc22cc28b53f230b08103e583d799a.png

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

19daefb56e61eb87f87b81d4785b9247.png

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工作状态

3c5cfffc7039d8b8ef0e0d453307d712.png

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

3388a55fd910650b0aa2e3aeb47cd1d2.png

c、getenforce查看selinux的状态

2ff48387de3277dea21aa0642fa019d1.png

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

b45a61540e61979216decfdcdd74f0c0.png

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

a.查看文件上下文可以通过ls -Z

6e8ad53a23a924e2f4453784ce125f2b.png

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

5e3fce9586176bc4efee218633dca0bf.png

c.查看用户上下文可以用id –Z

80f576028fe002babf516266c697f96e.png

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

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

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

4798b3154f4f5a3d743beb8f35b98cc6.png

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

03a163a42f98d314651a199db37cdeaf.png

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

54dfc0e58a6de911a1149c8a537ed81a.pnga9bf9a964b2cd36b63307b66c837a2b8.png

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

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

7d567fe97d4f7bdc4719965a8b2830cc.png

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

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

d17a47680e0f0fe3b00aae87675149e5.png由于此文件记录的信息很多不宜直接查看,可以借助audit2why和audit2allow

#audit2why

a2399f7d5db9c2d777f862a8a9e0df59.png

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

32acbda56e717b61d8081a1c83bd5522.png

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

73df7df29dbb305d1208fe1fe38882d5.png

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

#tail/var/log/messages | grep setroubleshoot

fbbba2c7936d4c4198150b760bff3979.png

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

428fa8839fdaaa8da4a006aa31220b72.png

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

sesearch命令由下列软件包提供

b52c9ee80e081565e722d5430b90637e.png

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

32a6137dd25a0cdfa39d77599b6dc515.png

05f23df1537c533cd34424730792d5c9.png

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

找出主体程序为httpd_t相关的所有信息

8fd2d40924014cacead06a71eba82b83.png

从上面的数据就可以看出程序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就可以访问该目录下的文件了。

5c07699fe1dafbe93dad4b2a4ef0b4a4.png

6e5c13db5fe285d70714bc5b4fc491f7.png

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

5ca22827b3dbd84ac9c85242b6355c74.png

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

cda07aad07ec9dfb7e4f8aebc6aaae14.png

注:

chcon意思是change context

-t type 类型

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

-u user

-r role

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

c573c37758286f11338789f62f344e77.png

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

看看有哪些布尔值

106793f87308410c91626eb566628973.pngb8f580ed7eb1661d8f232821f4a1ab4a.png

也可用semanage命令#semanageboolean –l

知道了布尔值的名字,可以通过sesearch 来确认他关联了哪些服务的域,比如httpd_enable_homedir允许下列规则,如果设置为off的话,那么他们都是无法访问的。

6404d7ccbb42a991cca8c86cf97a7972.png01b3dad76c7a811b1b8b0d4cae62fc46.png

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

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

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

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

7af83b3bf9ce3ae81a1b5eeca733a474.png

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

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

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

b64d568404bd9799b14700d084b4e03c.png

使用匿名登录测试:

31c946794a63260fb4ea07dbd9a306be.png

发现这里看不到haha 文件

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

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

如下:

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

放在/var/log/audit, 由于此文件记录的信息很多不宜直接查看,可以借助 audit2why

命令,首先启动 audit

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

2b4270b64fd3f216b3451b174e4cf37c.png6f0756fe6c2e6a7e75d6807867939935.png99085caf6e4df89d7ee1c0ec8467cbc0.png

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

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

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

1f7b2e794151d51e03a5b1439b6d5165.png

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

所以更改此 bool 值就可以

0946f3cd6ad62bc0afe17745c08d84f6.png

a613b02ced1c2b37f43246f9074b2cf4.png

5703379a619b4c0bbd77deb945cdd12f.png

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

客户端登录测试,发现 haha 文件就可以访问了

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

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

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

3.SELinux的上下文和布尔值

本文出自 “挚爱Linux” 博客,转载请与作者联系!

原文:http://mpflinux.blog.51cto.com/12173924/1926700

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值