zoukankan      html  css  js  c++  java
  • Linux selinux

    SElinux:Security Enhanced Linux
        selinux的设计初衷是为了防止资源误用;
            什么是资源误用那?对于一般的用户,通常来说都会设定其被允许访问的资源范围,如果因为某个失误,导致其可以访问其权限之外的资源,这样就会存在安全隐患,万一他把资源删除或者做一些不好的事情那,这都会对管理者造成损失;
        传统的访问资源的方式:
            自主式访问控制,DAC
            通过对比进程的拥有者的权限与文件的wrx权限,如果匹配则允许做相应操作;
        selinux访问资源的方式:
            委任式访问控制,MAC
            可以针对特定的进程与特定的资源来进行权限的管理
                selinux控制的主体是进程,而目标或者成为客体是资源(文件,套接字等),中间通过策略设置主体能否访问目标;
                    主体(Subject):selinux中的主体一般都是指进程
                    目标(Objetic):selinux中的目标(客体)一般是指文件资源
                    策略(Policy):selinux通过策略来定义了很多详细的规则,从而控制哪些资源对哪些进程是开放的,由于系统中有太多的进程和文件了,所以selinux提供了三个主要策略;
                        targeted:主要是针对网络服务,对主机本身限制的较少,默认为此;
                        minimum:由targeted修订而来,仅针对指定的进程做控制;
                        mls:完整的selinux,限制严格;
                其实主体能不能取用目标除了跟策略的设置有关,还跟主体与目标的安全上下文有关,只有都对应上时才可以访问目标资源;
                    进程首先需要通过策略中的定义的规则然后再与目标资源对比安全上下文,当都通过后就算通过selinux了,但是最后能不能访问目标资源还要对比文件的rwx权限,然后才能决定是否允许访问;
            可以通过ls -Z来查看安全上下文:
                -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
                    一共由五段组成,我们只讲前三个:
                        第一个是user(用户):类似Linux 里的用户,用作身份识别;
                            常用的用户类型:
                                unconfined_u:表示不受限的用户,一般是用户通过shell手动建立的;
                                system_u:表示系统用户,大部分是由系统自动产生的;
                                sysadm_u:表示通过服务产生的;
                        第二个是role(角色):用作标识资源的类型;
                            常用的角色类型:
                                object_r:表示此资源是文件或者目录;
                                system_r:表示此资源是进程;
                        第三个是type(类型):在策略这一步用作决定主体进程能不能存取目标资源;
                            type:表示文件资源的类型;
                            domain:表示进程资源的类型;
                                这第三段最为重要,只有domain与type搭配使用才能顺利的取用资源;
                                    domain类型可以对应多个type类型;
            可以通过ps auxZ 查看进程的domain:
            [root@localhost ~]# ps auxZ
            LABEL                           USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
            system_u:system_r:rngd_t:s0     root        943  0.0  0.0   6472   648 ?        Ss   10:26   0:02 /sbin/rngd -f
            system_u:system_r:crond_t:s0-s0:c0.c1023 root 4993 0.0  0.0 126260 1716 ?    Ss   13:29   0:01 /usr/sbin/crond -n
            unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 3777 0.0  0.2 116944 3892 pts/1 Ss 12:22   0:02 -bash
                一般进程分为两种:
                    一种是系统受限的(system_u:system_r),一种是用户比较不受限的(unconfined_u:unconfined_r);
            selinux模式:
                enforcing:强制模式,表示selinux已经在运行,并且开始显示domain和type了;
                permissive:宽松模式,表示selinux已经在运行,但是不会显示domain和type,仅记录警告信息,用于以后审计;
                disable:关闭模式,表示selinux没有运行,无任何限制;
                相关命令:
                    getenforce: get the current mode of SELinux
                        用于查看当前的selinux模式;
                    setenforce:modify the mode SELinux is running in
                        用于修改当前的selinux模式,立即生效,重启还原;
                        setenforce 0:表示permissive;
                        setenforce 1:表示enforcing;
                        也可以通过编辑配置文件:/etc/selinux/confing来永久设置selinux模式;
                    sestatus:SELinux status tool
                        显示selinux的相关信息
                        -b:列出当前策略包含的规则的布尔值;
            selinux的策略:
                selinux的三种模式会决定主体进程能否通过初步考验,接下来第二关就是targeted里面的各项规则;
                相关命令:
                    getsebool: get SELinux boolean value(s)
                        查询当前策略里面规则的启动与否;
                        -a:显示当前系统上所有selinux规则的启动或关闭状态;
                    seinfo:SELinux policy query tool
                        显示规则统计信息;
                        -u:显示所有user的种类;
                        -r:显示所有role的种类;
                        -t:显示所有type的种类;
                        -b:显示所有规则种类;
                    sesearch:SELinux policy query tool
                        显示各项规则里详细的信息;
                        -A:列出所有允许读取或放行的相关数据;
                        -t:后面接目标类别,配合-A使用;
                        -s:后面接主体类别,配合-A使用;
                        -b:后面接selinux规则,配合-A使用;
                            例子:sesearch -A -b 规则名   :显示主体进程更够读取的资源类型;
                [root@localhost ~]# sesearch -A -s crond_t
                Found 1356 semantic av rules:
                   allow syslog_client_type device_t : dir { ioctl read getattr lock search open } ;
                   allow crond_t ftpd_exec_t : file { read getattr execute open } ;
                   allow crond_t admin_home_t : dir { ioctl read getattr lock search open } ;
                   allow crond_t admin_home_t : lnk_file { read getattr } ;
                   allow xserver_unconfined_type x_domain : x_resource { read write } ;
                    semanage:SELinux Policy Management tool
                        规则的解释信息。也可以添加/修改/删除selinux类型;
                        boolean:Manage booleans to selectively enable functionality
                            -l:List records of the specified object type
                                例子:semanage boolean -l
                                    [root@localhost ~]# semanage boolean -l | head
                                    SELinux boolean                State  Default Description
                                    privoxy_connect_any            (on   ,   on)  Allow privoxy to connect any
                            fcontext:SELinux Policy Management file context tool
                                -l:查看默认类型;
                                -a:添加默认类型;
                                -m:修改默认类型;
                                -d;删除默认类型;
                    setsebool:set SELinux boolean value
                        修改规则的布尔值;
                        setsebool [-P] [规则名称] [0|1]
                            -P:将设定值写入配置文件,以便永久生效;
                    chcon:change file SELinux security context
                        修改文件的selinux安全上下文;
                        -R:递归修改目录及其子目录;
                        -t:修改类型字段;
                        -u:修改用户字段;
                        -r:修改角色字段;
                        --reference=参考文件:使用某个文件作为参考来修改其他文件;
                    restorecon:restore file(s) default SELinux security contexts
                        恢复文件的默认安全上下文;
                        -R:递归恢复;
                        -v:显示恢复过程;
            


    注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删

  • 相关阅读:
    MySQL 主从复制与读写分离概念及架构分析
    删除优先级
    原来的ALL IN ONE架构,快速的演进成为SOA架构
    a=a+1 ++a 效率比较
    Myers–Briggs_Type_Indicator 迈尔斯布里格斯类型指标(MBTI)
    事大众而数摇之,则少成功;藏大器而数徙之,则多败伤
    int float 的具体的取值范围取决于具体的机器 整数除法舍位 整形(int)也可以用于存储字符型数据
    英特尔和 Google 的 OKR 制度与我们一般所说的 KPI 有什么不同?
    Net Promoter Score
    春节问候微信群发
  • 原文地址:https://www.cnblogs.com/guowei-Linux/p/9787318.html
Copyright © 2011-2022 走看看