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

(0)
zhengyibozhengyibo
上一篇 2016-09-26
下一篇 2016-09-26

相关推荐

  • 使用Openssl构建私有CA

    使用Openssl构建私有CA Openssl是SSL的开源实现,是一种安全机密程序,主要用于提高远程登录访问的安全性。也是目前加密算法所使用的工具之一,功能很强大。     Openssl为网络通信提供安全及数据完整性的一种安全协议,包括了主要的密码算法、常用的密钥和证书封装管理功能(CA)以及SSL协议,并提供了丰…

    Linux干货 2015-10-07
  • php5.4zend-opcache安装

    公司在做高并发压测,fastcgi,apc,ocache,opcache, 几经考虑,最终考虑用opcache,因为作为 zend-opcache合并为php5.5的分支版本,xcache的前途堪虑, 在环境的安装上竟然折腾了半个下午没有搞定,这个作下问题记录。 先说安装, http://php.net/manual/zh/opcache.installat…

    2015-04-20
  • 使用Nmap扫描系统风险点

    0x00 迅速了解Nmap Nmap是一款扫描目标网络信息的工具,可以是黑客用来探测主机信息,收集情报的神器。也可以是运维人员扫描网络环境,及时发现系统漏洞的好帮手。 0x01 它的功能 1、主机发现(Host Discovery)#探测目标网络环境中有哪些主机是可以进行通信的,当然你也可以用ping命令试一下 2、端口扫描(Port S…

    Linux干货 2015-04-19
  • Sed简介

    Sed简介    一、简介   sed全称是:Stream EDitor。sed命令的功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大。  sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern s…

    Linux干货 2015-05-11
  • SSH会话劫持实现端口转发

    在进行渗透测试时,我们有时候会碰到搭建的测试环境、产品服务器、DMZ或者其他类似的机器群的情况,这时我们完全可以把它们看作跳板。这些系统被设计成对外交互的接口,这时候我们考虑对其他域里的用户进行SSH会话劫持是个不错的选择。 那么如果你拥有了某一个跳板的控制权限,想要通过另一个域的用户对远程域进行访问会怎么办呢?当然,这时候你是没有密码、密钥的,你不能抛弃二…

    系统运维 2015-03-23
  • Linux文件管理命令

    Linux系统上文件管理命令 一、文件查看类命令      1、cat 由第一行开始显示文件内容 语法格式: cat [选项列表] [文件列表]… 参数说明: -A, –show-all 等价于 -vET 。 -b, –number-nonblank 给非空输出行编号。 -e 等价于 -vE 。 -E…

    Linux干货 2017-07-24