• 二十九、SELinux简介


    一、基础

    1)访问模型

    Linux原有访问模型:自主访问控制 DAC

        安全隐患: 进程所能访问资源的范围 为用户所能访问的资源范围

    后门: rootkit程序
    进程被胁持:
        基于进程作为跳板,就有了进程属主的权限 
            root
            普通用户--> 查看其他文件 --> 找到漏洞,提权操作

    SELinux:Secure Enhanced Linux 工作于Linux内核中

    SELinux访问模型: 强制访问机制 MAC

        类似sandbox机制:进程启动在一个沙箱内部,

        为进程运行,启用一个专用的沙箱

    sandbox 沙箱: 最小资源集合
    进程脱离控制时,不能访问用户所有能访问的文件

    2)、SELinux有两种工作模式 

      strict :严格级别  每个进程都受到SELinux的控制

      targetted  : 仅有限个进程受SELinux控制,只监控容易被入侵的进程

    3)SELinux工作方式

    subject(主语) operation(谓) object(宾)

            subject: 进程

            operation: 取决于被操作对象支持的模式 及 操作者是否在有效区域内

            object: 进程、文件、用户

                  文件: operation: open, read, write, close, chown, chmod

    活动范围(域):

        subject: domain 

        object:  type   操作者称为域(活动的发出者),被操作者称为类型

    4)SELinux安全标签显示

    SELinux为每个文件、进程提供安全标签

    查看:

      进程:ps axuZ

        - 没有激活SELinux(SELinux必须在内核启动时激活才能生效)

    例如:-   root     26238  3.0  0.4   4936  1076 pts/0    R+   21:24   0:00 ps axuZ

      文件: ls -Z 显示SELinux的安全上下文

    例如:-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg

     前三段 user:role:type

      user: SELinux的user

      role: 角色,类似linux的组

      type: 类型, 沙箱的范围

      subject: domain

      object: type

      object能被subject操作只有:type是domain的子集:domain == type 或 domain包含type

        

    二、激活SELinux

    1)配置文件位置:

    wKioL1mz7FvQCZUuAAAcFRya6Cg261.png

     

    2)SELinux状态

    获取SELinux当前状态

    getenforce

    设定状态:当前有效,重启失效

    setenforce #
        0 设定为permissive
        1 设定为enforce

    wKiom1mz7VDR3iMBAAATLYWfOQs953.png

      enforcing   强制:每个受限的进程必然受限,不受限的进程不受限。

      permissive  允许:每个受限的进程违规操作不会禁止,但会被记录于审计日志中。 日志位置:/var/log/audit.log

      disabled   关闭

    3)激活或关闭SELinux

        开启selinux: disabled --> enforcing/permissive

    sed -i 's,SELINUX=disabled,SELINUX=enforcing,' /etc/selinux/config

        开启SELinux必须重启,在/重新挂载后,重新对所有文件打标才可以对selinux操作

        关闭selinux:enforcing/permissive --> disabled

    sed -i -r 's@(SELINUX=)(enforcing|permissive)@1disabled@' /etc/sysconfig/selinux

    4)、激活SELinux后

     进程访问文件的安全上下文

        a)、进程的属主对文件的权限,通过

        b)、文件的type是否是进程domain的子集

             进程查看规则库,查看进程所属的domain是否被授权了能够访问文件所属type

                是:能访问

                否:被SELinux规则所拒绝,并记录至日志文件中 /var/log/audit.log,审计:在合理的使用范围内,进程对文件可执行的合理的操作

    SELinux的规则库:
        规则:哪种域能访问哪种或哪些和类型内文件
            法无授权即禁止 --> 在SELinux规则库中没有定义的规则,均被禁止
    进程如何访问非本域domain的文件?
        修改文件的type 属于进程domain即可

    wKiom1mz_6CxLnfxAAAdbqmsdmY478.png

        c)、设定某些布尔型特性

      [root@localhost /]# getsebool -a

    5)改变文件所属的域

      chcon   [-u USER] [-r ROLE]  [-t TYPE] FILE...

           -R :递归打标

     

    使用示例

    wKiom1mz_DTwQUgKAAAeYlq1EjQ343.png

    [root@localhost conf.d]#cd /etc/httpd/conf.d

    [root@localhost conf.d]# mv welcome.conf welcome.conf.bak

    wKioL1mz_DSis3ydAABBWOIy1ss324.png

     

    6)还原标签

      restorecon  [-R]  /path/to/somewhere

       -R :还原一个目录下的所有标签

    e.g   restorecon  /www/html/index.html

    使用示例

    wKioL1mz_KbRnxK7AAB1UB72zBI888.png

     

    7)设定程序功能开启或关闭

     默认对于某些程序的功能,相对安全级别较低的功能,将被SELinux自动被禁止,例如ftp的匿名用户:任何用户可以上传文件

    布尔型规则:

    获取程序功能sebool

      getsebool -a   [boolean] 所有程序功能 

       getsebool ftp_home_dir

    设置程序功能

      setsebool [-P] sebool=value

        -P 永久有效,将修改的结果保存至策略库中 (需要一定时间:找到规则库,设定,转换为binary格式 ) 

      例如:
        setsebool ftp_home_dir 1
        setsebool ftp_home_dir 0
    
        setsebool ftp_home_dir on
        setsebool ftp_home_dir off

     

    参考:https://blog.51cto.com/sonlich/1964022

  • 相关阅读:
    Makefile中的ifeq 多条件使用
    Android引入动态库so的方法
    在Win10上使用Visual Studio2015的Android模拟器
    linux下insmod模块出现“Invalid parameters"
    在干净的ubuntu 14.10上编译Qemu2.2.0的过程
    Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)
    C++类中一个构造函数调用另一个构造函数
    用汇编语言角度来理解C语言的一些问题
    TCP协议的安全性分析
    MySQL入门,第四部分,学会创建、删除表
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11460938.html
Copyright © 2020-2023  润新知