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

相关推荐

  • 搜索引擎-倒排索引基础知识

    1.单词——文档矩阵        单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。          …

    Linux干货 2015-12-10
  • OpenSSH的应用和利用OpenSSL创建私有CA签证给httpd服务器开起https

    一、OpenSSH     OpenSSH与SSH协议是远程登录的首选连接工具。它加密所有流量,以消除窃听,连接劫持和其它攻击。OpenSSH常常被误认以为与OpenSSL有关系,但实际上这两个项目的有不同的目的,不同的发展团队,名称相近只是因为两者有同样的软件发展目标──提供开放源代码的加密通讯软件。  &…

    Linux干货 2016-04-24
  • 设计模式(五)适配器模式Adapter(结构型)

    1. 概述:          接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题。程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化。         例子1:iphone…

    Linux干货 2015-06-25
  • 推荐-Linux Namespace的一点理解

        下文的原文来自: http://blog.csdn.net/preterhuman_peak/article/details/40857117    原文写的非常好,下文中大部分文字描述来自原文,我仅做了一点理解性的插图和实验部分。    &…

    Linux干货 2016-03-28
  • 设计模式 ( 十五 ) 中介者模式Mediator(对象行为型)

    1.概述 在面向对象的软件设计与开发过程中,根据“单一职责原则”,我们应该尽量将对象细化,使其只负责或呈现单一的职责,即将行为分布到各个对象中。 对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系。虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象…

    Linux干货 2015-07-20
  • Web服务,http协议。

    一·web   1。web是一种网站服务器,C/S架构,比较流行的Apache,Nginx,IIS。客户能够去服务器请求资        资源。   2.使用http协议,服务器html或者xml格式文件,客户浏览器访问资源(url)。   3.过程包括服务器套接字监听直到和客户套接字建立…

    Linux干货 2015-07-04