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)
上一篇 2016-09-26 15:04
下一篇 2016-09-26 22:23

相关推荐

  • 新建用户的全​程解析

     新建用户的全程解析: 1,编辑passwd文件,添加newuser用户一行  nano /etc/passwd  newuser:x:2000:2000:NEWUSER:/home/newuser:/bin/bash  2,编辑group文件,添加newuser组一行 &nbs…

    系统运维 2016-08-05
  • 推荐-tree命令的安装和使用

    一、前言     tree命令是可以把指定文件夹的所以文件用树状罗列出来,呈现目录形式的一个命令。在Centos 6.5中默认不能直接使用: 输入type tree命令(type COMMAND:区别是内建命令还是外部命令)提示不存在: 二、安装       …

    系统运维 2016-03-27
  • Linux文本搜索工具grep

    Linux文本搜索工具grep Linux文本搜索工具grep grep 基本正则表达式 egrep 扩展正则表达式 fgrep 简介 grep(全称Globally search a Regular Expression and Print,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行匹…

    2016-04-05
  • Centos 7&6分布式lamp平台

    Centos 7&6分布式lamp平台 Centos 7&6分布式lamp平台 一、环境介绍 lamp的实现方式 本文安装方式 二、Centos 7 分布式lamp平台,module方式 安装httpd和php xcache phpMyAdmin wordpress https的phpMyAdmin 环境规划 主机2配置mariadb 主机1…

    Linux干货 2016-04-25
  • 推荐-Linux命令帮助的获取

    帮助命令 1. 使用帮助命令和帮助选项来获取帮助 2. 使用man来查看命令使用手册(manual) 3. 使用info来查看命令的信息页 4. 程序自身的帮助文档 5. 程序官方文档 6. 发行版的官方文档 7. 使用Google搜索关键字 1. 使用帮助命令和帮助选项来获取帮助 Linux系统中命令分为【内部命令】和【外部命令】。 【内部命令】:内部命令…

    Linux干货 2016-03-25
  • BASH编程基础之变量、条件判断

    一、前言 在linux中,通常我们所指的脚本编程,指的是bash的脚本编程。 bash作为一种过程式的编程语言来说,它应该具备编程语言所应该具备的基本元素,即:变量,流程,函数,数组。今天我们介绍变量以及流程之一的条件判断。 二、变量 1、初识变量 在编程语言中,编程语言有两大种,强类型语言和弱类型语言。强类型语言中,要求变量的使用要严格符合定义,所有变量都…

    Linux干货 2015-07-06