天天看点

Seliux简介

<code>一.SELInux简介</code>

<code>二.selinux工作机制</code>

<code>三.安全标签</code>

<code>四.配置selinux</code>

<code>五.测试selinux</code>

<code>六.设定selinux的</code><code>bool</code><code>标签</code>

<code>七.日志文件记录位置</code>

<code>八.semanage的使用</code>

一.SELinux简介

    secure enhanced linux

    SELinux:工作于Linux内核中

    DAC:自主访问控制 //linux自带的,own,group,other //只有用户 Discretionary Access Control——DAC

        //问题:普通用户之间共享文件,要开放文件的其他人的权限,这样是不安全的

        //假如tmp中放了重要数据,DAC是无法保证安全的。

    MAC:强制访问控制    Mandatory  //强制对资源限制的访问

    [进程]安全上下文:

        进程的属主和属组,进程所能够访问的文件的最终权限,取决于:

            file:属主---&gt;属组--&gt;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-&gt;group-&gt;selinux的规则库

            有记录:授权--&gt;允许

            有记录:拒绝--&gt;拒绝,并记录日志

            没有记录:拒绝

        规则是二进制存放的:速度比较快

        但是每次都要匹配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 //递归还原

<code>         </code><code>--reference=参考文件:使用指定参考文件的安全环境,而非指定值。</code>

<code>         </code><code>-R, --recursive:递归处理所有的文件及子目录。 </code>

<code>         </code><code>-v, --verbose:为处理的所有文件显示诊断信息。 </code>

<code>         </code><code>-u, --user=用户:设置指定用户的目标安全环境。 </code>

<code>         </code><code>-r, --role=角色:设置指定角色的目标安全环境。 </code>

<code>         </code><code>-t, --type=类型:设置指定类型的目标安全环境。 </code>

<code>         </code><code>-l, --range=范围:设置指定范围的目标安全环境</code>

    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 

<code>1.USER</code>

<code>    </code><code>1) user identity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;</code>

<code>    </code><code>2) 三种常见的 user:</code>

<code>           </code><code>user_u :普通用户登录系统后的预设;</code>

<code>           </code><code>system_u :开机过程中系统进程的预设;</code>

<code>           </code><code>root :root 登录后的预设;</code>

<code>    </code><code>3) 在 targeted policy 中 users 不是很重要;</code>

<code>    </code><code>4) 在 strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。</code>

<code>2 ROLE</code>

<code>    </code><code>1) 文件、目录和设备的role:通常是 object_r;</code>

<code>    </code><code>2) 程序的role:通常是 system_r;</code>

<code>    </code><code>3) 用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;</code>

<code>        </code><code>用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个role;但是同一时间内只能使用一个role;        </code>

<code>    </code><code>4) 使用基于RBAC(Roles Based Access Control) 的strict和mls策略中,用来存储角色信息</code>

<code>3 TYPE</code>

<code>    </code><code>1) type:用来将主体(subject)和客体(</code><code>object</code><code>)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;</code>

<code>    </code><code>2) 当一个类型与执行中的进程相关联时,其type也称为domain;</code>

<code>    </code><code>3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;</code>

<code>    </code><code>LEVEL和CATEGORY:定义层次和分类,只用于mls策略中</code>

<code>          </code><code>LEVEL:代表安全等级,目前已经定义的安全等级为s0-s15,等级越来越高</code>

<code>          </code><code>CATEGORY:代表分类,目前已经定义的分类为c0-c1023</code>

五.测试selinux

    1.yum install httpd//

<code>    </code><code>2.&lt;html&gt;</code>

<code>            </code><code>&lt;title&gt;Test page&lt;/title&gt;</code>

<code>            </code><code>&lt;body&gt;</code>

<code>                </code><code>&lt;h1&gt;Welcome to Test&lt;/h1&gt;</code>

<code>                </code><code>&lt;p&gt; hello &lt;/p&gt;</code>

<code>            </code><code>&lt;/body&gt;</code>

<code>    </code><code>&lt;/html&gt;</code>

    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

<code>        </code><code>DocumentRoot </code><code>"/www/html"</code>

<code>        </code><code>&lt;Directory </code><code>"/www/html"</code><code>&gt;</code>

<code>        </code><code>...</code>

<code>        </code><code>&lt;/Directory&gt;</code>

<code>      </code><code>mkdir -pv /www/html</code>

<code>      </code><code>systemctl restart httpd</code>

<code>      </code><code>cp /</code><code>var</code><code>/www/html/index.html /www/html</code>

      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:删除。

    这是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。

本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1981448,如需转载请自行联系原作者

继续阅读