Seliux简介

Posted

tags:

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

一.SELInux简介
二.selinux工作机制
三.安全标签
四.配置selinux
五.测试selinux
六.设定selinux的bool标签
七.日志文件记录位置
八.semanage的使用

一.SELinux简介
    secure enhanced linux
    SELinux:工作于Linux内核中
    DAC:自主访问控制 //linux自带的,own,group,other //只有用户 Discretionary Access Control——DAC
        //问题:普通用户之间共享文件,要开放文件的其他人的权限,这样是不安全的
        //假如tmp中放了重要数据,DAC是无法保证安全的。
    MAC:强制访问控制    Mandatory  //强制对资源限制的访问
    
    [进程]安全上下文:
        进程的属主和属组,进程所能够访问的文件的最终权限,取决于:
            file:属主--->属组-->other //逐个匹配
    MAC:每一个进程,假如需要访问10个资源,那他也只能访问者10个资源,及时他对其他资源也有相应的权限
        DAC是自助访问功能,是没有的
        MAC:任何一个进程启动后,类似于放在一个sandbox内{事先准备的最小资源集},而不能以运行者的身份,到处访问其他资源
            这样进程所能够获取的资源,也仅仅是沙箱内部的资源
        但是如何建立沙箱,以及沙箱切换//selinux就是类似于为每一个进程提供了一个沙箱    
    安全沙箱:sandbox
        放到一个隔离访问空间中,类似于MAC
基本概念:
    主体:访问操作的主动发起者,它是系统中信息流的启动者,可以使信息流在实体之间流动。
    客体:信息的载体或从其他主体或客体接收信息的实体。
        主体有时也会成为访问或受控的对象,如一个主体可以向另一个主体授权,
        一个进程可能控制几个子进程等情况,这时受控的主体或子进程也是一种客体。
    访问控制分类:
        客体不受它们所依存的系统的限制,可以包括记录、数据块、存储页、存储段、文件、目录、
        目录树、库表、邮箱、消息、程序等,还可以包括比特位、字节、字、字段、变量、处理器、
        通信信道、时钟、网络结点等。
        
二.Selinux有两种工作级别
    strict:每个进程都收到selinux的控制 //NAS开发,设定较为复杂
    targetted:仅有限个进程受到selinux控制 //它是redhat开发的targeted,它只是对于主要的网络服务进行保护
        比如apache, sendmail, bind, postgresql等,不属于那些domain的就都让他们在unconfined_t里
        可导入性高,可用性好但是不能对整个系统进行保护。
    
    SELinux的工作方式:
        subject operation object
        我      打            你
        
        subject:进程
        object:进程、文件
            文件:open,write,close,chown,chmod
        
        subject:domain 操作者
        object:type 被操作对象
    ls -Z  //selinux为每一个文件和进程提供的安全标签,也为进程提供了安全标签
    ps auxZ //激 活selinux
        //原先是关闭的话,需要重启系统,内核会为每一个文件打标签
    
三.安全标签:
    共5段:后两段对于RHEL和CentOS是没有意义的
    user:role:type
        user:selinux的user
        role:角色,类似于group
        type:类型,作用,user所能够访问的对象范围,domain
    有了selinux自后,一个进程的权限,除了user-group-other之外还要受到
        沙箱的限制
技术分享    //为文件打好标签以后,进程的属主即使对该文件具有写权限,他也不一定能够访问,取决于沙箱的定义范围
    
    1.对selinux来讲,如果这个进程需要访问某个文件,在沙箱的域外的其他沙箱内,如何突破限制访问
        改变文件的类型:改为该进程所在域范围内,
    注意:任何一个进程到底能够访问哪些文件,并不是严格按照进程所在域和被访问者自己的类型是否匹配决定的
            而是依据selinux规则库决定的
    SELInux规则库
        规则:哪种域能访问哪种或哪些种类型文件
        
进程运行的过程
    进程能否访问一个文件?
        user->group->selinux的规则库
            有记录:授权-->允许
            有记录:拒绝-->拒绝,并记录日志
            没有记录:拒绝
        规则是二进制存放的:速度比较快
        但是每次都要匹配selinux:因此还是比较慢的
四.配置selinux
    selinux是否启用:
    给文件重新打标:
    设定某些布型特性
    1.SELinux状态:enforcing|permissive|disabled
            enforcing:强制,每个受限的进程都必然受限
            permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志中
            disabled:关闭
        注:当前系统为disabled,不管转换为何种类型,都需要重启OS才能启用
        getenforce
        setenforce 0|1 //
            仅仅当前有效,重启OS无效
            配置文件:/etc/sysconfig/selinux,/etc/selinux/config
    2.给文件打标签        
        chcon //change context ,修改标签
        chcon [OPTION]... CONTEXT FILE...
        chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
        chcon [OPTION]... --reference=RFILE FILE...        
        通常只会修改type,
        chcon unconfined_u:object_r:user_home_t:s0 aa
        -R :递归打标
        注意:一般文件复制到某目录后,标签会随之改变
        restorecon  FILE //当这个文件在策略里有定义时,可以恢复原来的文件标签。
            -R,-r //递归还原

         --reference=参考文件:使用指定参考文件的安全环境,而非指定值。
         -R, --recursive:递归处理所有的文件及子目录。 
         -v, --verbose:为处理的所有文件显示诊断信息。 
         -u, --user=用户:设置指定用户的目标安全环境。 
         -r, --role=角色:设置指定角色的目标安全环境。 
         -t, --type=类型:设置指定类型的目标安全环境。 
         -l, --range=范围:设置指定范围的目标安全环境

        
    3.标签查看:
        ls -Z
        ls --context a.txt
    4.复制和查找标签
        cp -Z,--conntext=CONTEXT 在拷贝的时候指定目的文件的security context
        find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \:  
    5.查看se状态
        sestatus -v

1.USER
    1) user identity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;
    2) 三种常见的 user:
           user_u :普通用户登录系统后的预设;
           system_u :开机过程中系统进程的预设;
           root :root 登录后的预设;
    3) 在 targeted policy 中 users 不是很重要;
    4) 在 strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。
2 ROLE
    1) 文件、目录和设备的role:通常是 object_r;
    2) 程序的role:通常是 system_r;
    3) 用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;
        用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个role;但是同一时间内只能使用一个role;        
    4) 使用基于RBAC(Roles Based Access Control) 的strict和mls策略中,用来存储角色信息
3 TYPE
    1) type:用来将主体(subject)和客体(object)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;
    2) 当一个类型与执行中的进程相关联时,其type也称为domain;
    3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;
    LEVEL和CATEGORY:定义层次和分类,只用于mls策略中
          LEVEL:代表安全等级,目前已经定义的安全等级为s0-s15,等级越来越高
          CATEGORY:代表分类,目前已经定义的分类为c0-c1023

    
五.测试selinux
    1.yum install httpd//

    2.<html>
            <title>Test page</title>
            <body>
                <h1>Welcome to Test</h1>
                <p> hello </p>
            </body>
    </html>

    unconfined_u:object_r:httpd_sys_content_t:s0
    ps auxZ |grep httpd
        system_u:system_r:httpd_t:s0
    //httpd_sys_content_t是httpd_t的一个子类型,因此httpd_t该进程能够访问index.html    
    3.vim /etc/httpd/conf/httpd.conf

        DocumentRoot "/www/html"
        <Directory "/www/html">
        ...
        </Directory>
      mkdir -pv /www/html
      systemctl restart httpd
      cp /var/www/html/index.html /www/html

      ls -Z
        unconfined_u:object_r:default_t //类型已经修改
    4.再次访问
        forbidden
        一:setenforce 0//可以再次访问
        二:chcon -t httpd_sys_content_t a.html
      
    注意:/var/www/html目录中,修改type是没有效果的,selinux不会禁止,除非,改变原有的目录
六.设定selinux的bool标签
    setsebool 是用来切换由布尔值控制的 SELinux 策略的,
    getsebool 获取bool值
    
    getsebool -a //查看所有的
    getsebool ftp_home_dir
    
    setsebool
        -P //保存到策略文件中,永久有效
    setsebool [ -PNV ] boolean value | bool1=val1 bool2=val2 ...
    setsebool ftp_home_dir on
                    on/off  1/0 :1表示开启 //下次开机失效
            -P:保存到策略文件,更新二进制文件
    什么是SElinux布尔值呢?SEliux布尔值就相当于一个开关,精确控制SElinux对某个服务的某个选项的保护
    setsebool ftp_home_dir on //开始保护,但是临时生效
七.日志文件记录位置
    /var/log/audit/audit.log
    tail audit.log
    selinux的管理工具:
        semanage
    
八.semanage的使用
    相关命令:setsebool,getsebool,seinfo,sesearch
    semanage {login|user|port|interface|fcontext|translation} -l
    semanage fcontext -{a|d|m} [-frst] file_spec
        -l:查询。
        fcontext:主要用在安全上下文方面。
        -a:增加,你可以增加一些目录的默认安全上下文类型设置。
        -m:修改。
        -d:删除。
    这是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。
    
    
   

本文出自 “黑马腾空” 博客,请务必保留此出处http://hmtk520.blog.51cto.com/12595610/1981448

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

JAX-RS的简介

Curator简介

OkHttpOkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )

KNN库简介

ApiPost简介

Jackson 使用简介