zoukankan      html  css  js  c++  java
  • 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选项可写入配置文件使其永久生效)  

  • 相关阅读:
    背景(北极狐)
    【面试】java基础
    C#分享海报生成
    jetson nano 4gb记录
    jetson nano 2gb相关问题
    分布式系列-分布式ID
    Mybatis-Plus 多租户模式忽略某个方法
    IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈有来商城线上部署方式
    《将博客搬至CSDN》
    elk收集docker容器的json格式日志
  • 原文地址:https://www.cnblogs.com/centos-Paul/p/9534644.html
Copyright © 2011-2022 走看看