SElinux管理

                                                          SElinux管理

本章内容:

selinux概念:

启用selinux

管理文件安全标签

管理端口标签

管理selinux布尔值开关

管理日志

查看selinux帮助

 

selinux介绍:

     selinuxsecure enhanced Linux,是美国国家安全局和scc开发的Linux的一个强制访问控制的安全模块。2000年以后以GNUGPL发布,Linux内核2.6版本后集成在内核中。

     DAC:自由访问控制。

     MAC:强制访问控制。

         DACDAC环境下进程是无束缚的。

         MACMAC环境下策略的规则决定控制的严格程度。

         MACMAC环境下进程可以被限制的。

         策略被用来定义被限制的进程能够使用那些资源(文件和端口)

         默认情况下,没有明确允许的行为将被拒绝。

 

selinux的四种工作类型:

   strict(严格的):对每个进程都受到selinux的控制。

   targeted(有针对性的):用来保护常见的网络服务,仅有限进程受到selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务。

   minimum:修改过的targeted,只对选择的网络服务。

   mls:提供mls(多级安全)机制的安全性。

   minimummls稳定性不足,未加以应用。

 

selinux安全上下文:

       传统Linux,哲学思想一切皆文件,由用户、组权限控制访问。

       selinux中,一切皆对象(object),有存放在inode的扩展属性域的安全元素所控制其访问。

       所有文件、端口资源和进程都具备安全标签:安全上下文(security context

       安全上下文由五个元素组成:

          userroletypesensitivitycategory

          示例:

          [root@centos6 ~]# ls -lZ

          -rwxrw-rw-. root root system_u:object_r:admin_home_t:s0 a1.txt.txt

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

          -rw-r–r–. root root system_u:object_r:admin_home_t:s0 base.repo

          -rwxrw-rw-. root root unconfined_u:object_r:admin_home_t:s0 copycmd.sh

 

       实际上下文:存放在文件系统中;

       期望(默认)上下文:存放在二进制的selinux策略库中(映射目录和期望安全上下文)中。

      * 使用 semanage  fcontext  -l 命令查看期望的selinux上下文。

selinux中五个安全元素的含义:

       user:指示登录系统的用户类型,如rootuser_usystem_u,多数本地进程都属于无约束(unconfined)进程。

       role:定义文件,进程和用户的用途:文件:object_r,进程和用户:system_r

       type:指定数据类型,规则中定义何种进程类型访问何种文件。targeted策略基于type实现,多服务共用:public_content_t

       public_content_t:只有读的权限,要想有读写权限需改成public_content_rw_t

       sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassifiedsecrettop secret,一个对象有只有一个sensitivity,分0-15级,s0最低,targeted策略默认使用s0

       category:对于特定组织划分不分层的分类,如FBI secretNSA secret,一个对象可以有多个categroyc0-c10231024个分类,targeted策略不使用category

       示例:

        -rwxrw-rw-. root root unconfined_u:object_r:admin_home_t:s0 copycmd.sh

        drwxr-xr-x. root root system_u:object_r:admin_home_t:s0 Desktop

 

selinux策略:

      对象(object):所有可以对取的对象,包括文件、目录和进程、端口等。

      主题(subject):selinux中进程被称为主体。

      selinux中对所有的文件赋予一个type的文件类型标签,对于所有的进程也赋予各自一个domain的标签。domain标签能够执行的操作由安全策略里定义。

      当一个subject试图访问一个objectkernel中的策略执行服务器将检查AVC,在AVCsubjectobject的权限被缓存,查找“应用+文件”的安全环境。然后根据查找结果允许或拒绝访问。

      安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象式允许还是拒绝的,并且定义了哪种行为是允许或拒绝。

    

配置selinux

     selinux是否启用;

     给文件重新打安全标签;

     给端口设置安全标签;

     设定某些操作的布尔型开关;

     selinux的日志管理;

 

selinux的状态:

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

     permissive:允许,每个受限的进程违规操作不会被禁止,但会被记录于审计日志。

     disabled:禁用。

       

selinux相关命令:

     getenforce:获取selinux当前状态。

     sestatus:获取selinux当前更详细的状态。

     setenforce  0|1  

             0:设置为permissive允许

             1:设置为enforcing强制执行selinux策略。

 

     示例:getenforce命令

           [root@centos6 ~]# getenforce

           Enforcing

          [root@centos6 ~]# sestatus

 

     示例:sestatus命令

           SELinux status:                 enabled

           SELinuxfs mount:                /selinux

           Current mode:                   enforcing

           Mode from config file:          enforcing

           Policy version:                 24

           Policy from config file:        targeted

           [root@centos6 ~]#

 

     示例:setenforce命令,命令行临时启用/禁用selinux

           [root@centos6 Desktop]# setenforce 0

           [root@centos6 Desktop]# getenforce

           Permissive

           [root@centos6 Desktop]# setenforce 1

           [root@centos6 Desktop]# getenforce

           Enforcing

           [root@centos6 Desktop]#

 

selinux配置文件:

      以下两个绝对路径都可以进到selinux的配置文件中。

         /etc/selinux/config

         /etc/sysconfig/selinux /etc/selinux/config 的软链接。

 

      grub配置文件中添加selinux=0禁用selinux

         centos6:在/etc/grub/grub.conf文件中kernel行后添加selinux=0

         centos7:在/etc/grub2/grub.cfg文件中Linux16行后添加selinux=0

 

      selinux的配置文件中禁用selinux

        selinux={enforcing | permissive |disabled }

    

注意:在Linux grub配置文件中和selinux配置文件中,只要有一个是禁用的,那么selinux就禁用。建议在centos6中装上setroubleshoot selinux故障排错包。

 

      示例:安装setroubleshoot selinux故障排错包。

        [root@centos6 Desktop]# yum -y install setroubleshoot

      

      示例:selinux的配置文件:

         [root@centos6 Desktop]# vim /etc/selinux/config

         1

         2 # This file controls the state of SELinux on the system.

         3 # SELINUX= can take one of these three values:

         4 #     enforcing – SELinux security policy is enforced.

         5 #     permissive – SELinux prints warnings instead of enforcing.

         6 #     enforcing – No SELinux policy is loaded.

         7 SELINUX=enforcing

         8 # SELINUXTYPE= can take one of these two values:

         9 #     targeted – Targeted processes are protected,

        10 #     mls – Multi Level Security protection.

        11 SELINUXTYPE=targeted

        12

 

修改selinux安全标签:

给文件重新打安全标签:

    chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE…

           -t:修改文件的标签类型。

           –reference(参考):参考别的文件安全标签来设置标签类型。

           -R:递归的打标签。

        示例:

            [root@centos6 html]# pwd

            /var/www/html

            [root@centos6 html]# chcon -t default_t index.html

            [root@centos6 html]# ll -Z

            -rw-r–r–. root root unconfined_u:object_r:default_t:s0 index.html

            [root@centos6 html]#

       示例:参考文件1的安全上下文修改文件2的安全上下文。

            chcon  –reference   file1   file2

 

   恢复目录或文件默认的安全上下文(根据selinux安全上下文数据库恢复):

       restorecon  -R /path/to/somewhere

           示例:

             [root@centos6 html]# restorecon -R /var/www/html/

             [root@centos6 html]# ll -Z

             -rw-r–r–. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

             [root@centos6 html]#

 

默认安全上下文查询与修改:

semanage来自 policycoreutils-python

 

查看默认的安全上下文

   semanage  fcontext  -l

添加安全上下文到selinux安全上下文数据库:

   semanage  fcontext  -a  -t  http_sys_context_t  /testdir(/.*)

 

 删除安全上下文到selinux安全上下文数据库:

   semanage  fcontext  -d  -t  http_sys_context_t  /testdir(/.*)

 

selinux端口标签:

   查看端口标签:

        smanage   port  -l

      示例:

       [root@centos6 html]# semanage port -l | grep "http"

       http_cache_port_t              tcp      3128, 8080, 8118, 8123, 10001-10010

       http_cache_port_t              udp      3130

       http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

       pegasus_http_port_t            tcp      5988

       pegasus_https_port_t           tcp      5989

       [root@centos6 html]#

     

  添加端口:

      semanage  port  -a  -t 端口标签  -p  [tcp|udp]  port

      示例:

        [root@centos6 html]# semanage port -a -t http_port_t -p tcp 9527

        [root@centos6 html]# semanage port -l | grep "http"

        http_cache_port_t         tcp      3128, 8080, 8118, 8123, 10001-10010

        http_cache_port_t         udp      3130

        http_port_t               tcp      9527, 80, 81, 443, 488, 8008, 8009, 8443, 9000

        pegasus_http_port_t        tcp      5988

        pegasus_https_port_t       tcp      5989

        [root@centos6 html]#

 

  删除端口:

       semanage  port  -d  -t 端口标签  -p  [tcp|udp]  port

       示例:

        [root@centos6 html]# semanage port -d -t http_port_t -p tcp 9527

        [root@centos6 html]# semanage port -l | grep "http"

        http_cache_port_t              tcp      3128, 8080, 8118, 8123, 10001-10010

        http_cache_port_t              udp      3130

        http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000

        pegasus_http_port_t            tcp      5988

        pegasus_https_port_t           tcp      5989

        [root@centos6 html]#

 

 修改现有端口为新标签:(让已经定义的端口属于别的服务)

        semanage  port  -m  -t 端口标签  -p [tcp|udp]  port

   示例:

     [root@centos6 html]# semanage port -a -t http_port_t -p tcp 9527

     [root@centos6 html]# semanage port -l | grep "http"

     http_cache_port_t              tcp      3128, 8080, 8118, 8123, 10001-10010

     http_cache_port_t              udp      3130

     http_port_t                  tcp      9527, 80, 81, 443, 488, 8008, 8009, 8443, 9000

     pegasus_http_port_t            tcp      5988

     pegasus_https_port_t           tcp      5989

     [root@centos6 html]# semanage port -m -t ssh_port_t -p tcp 9527

     [root@centos6 html]# semanage port -l | grep "ssh"

     ssh_port_t                     tcp      9527, 22

    [root@centos6 html]#

 

selinux布尔值:

    布尔值规则:

       getsebool:查看布尔值;

       

       setsebool:设置布尔值;

    

    查看selinux布尔值(bool)命令:

      getsebool  

        getsebool [-a] [boolean]

                  -a:查看本系统内所有布尔值设置状态。

        semanage  boolean -l 查看更详细的系统布尔值设置。

        semanage  boolean -l -C 查看修改过的布尔值信息。

 

          示例:查看本系统内所有布尔值设置状态。

              getsebool  -a

          示例:查看修改过的布尔值信息。

              [root@centos6 Desktop]# semanage boolean -l -C

              SELinux boolean                State  Default Description

              use_nfs_home_dirs        (on   ,   on)  Support NFS home directories

              [root@centos6 Desktop]#

              注:第一个on为系统现在状态的布尔值,第二个on为系统存入磁盘状态的布尔值。

 

设置bool值命令:

    setsebool  -P  boolean value onoff

    setsebool  -P  boolean=value 01

 

    示例:

     [root@centos6 Desktop]# setsebool -P use_nfs_home_dirs on

     [root@centos6 Desktop]# getsebool -a | grep "home"

     ftp_home_dir –> off

     git_cgi_enable_homedirs –> off

     git_system_enable_homedirs –> off

     httpd_enable_homedirs –> off

     openvpn_enable_homedirs –> on

     samba_create_home_dirs –> off

     samba_enable_home_dirs –> off

     spamd_enable_home_dirs –> on

     ssh_chroot_rw_homedirs –> off

     use_fusefs_home_dirs –> off

     use_nfs_home_dirs –> on

     use_samba_home_dirs –> off

     [root@centos6 Desktop]#

 

selinux日志管理:

       yum -y  install  setroubleshoot*(重启生效)

       selinux将错误信息写入到/var/log/massage

       使用setroubleshoot作为grub关键字进行搜索selinux日志信息。

       sealert  -l  UUID

       查看安全事件日志说明:

       sealert   -a  /var/log/audit/audit.log

       sealert命令以图形方式打开selinux报警信息。

       blob.png

       示例:

        [root@centos6 Desktop]# sealert -a /var/log/audit/audit.log

 

 selinux帮助文档

 

       yum -y  install  selinux-policy-devel  centos7

       yum -y  install  selinux-policy-doc    centos6

 

   更新man数据库:

       mandb centos7

       makewhatis  centos6

     

        

 

 

 

 

 

 

      

         

    

原创文章,作者:zhengyibo,如若转载,请注明出处:http://www.178linux.com/49367