系统管理之Selinux详解

SELinux:

SELinux概念
SELinux配置
启用SELinux
管理文件安全标签
管理端口标签
管理SELinux布尔值开关
管理日志
查看SELinux帮助

SELinux概述

SELinux: Secure Enhanced Linux, 是美国国家安全局「NSA=The National Security Agency」 和SCC( SecureComputing Corporation)开发的
SELinux是Linux的一个强制访问控制的安全模块。工作于内核中, 2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中
Linux有自己的控制机制:
    DAC: Discretionary Access Control 自由访问控制
SELinux引入新的访问控制机制:
    MAC: Mandatory Access Control 强制访问控制
        • DAC环境下进程是无束缚的
        • MAC环境下策略的规则决定控制的严格程度
        • MAC环境下进程可以被限制的
        • 策略被用来定义被限制的进程能够使用那些资源(文件和端口)
        • 默认情况下,没有被明确允许的行为将被拒绝


SELinux有四种工作类型:
    strict: 每个进程都受到selinux的控制(centos5)
    targeted: 用来保护常见的网络服务,仅有限个进程受到selinux控制,只监控容易被入侵的进程,     rhel4只保护13个服务,rhel5保护88个服务
    minimum: centos7,修改过的targeted,只对选择的网络服务
    mls:提供MLS(多级安全)机制的安全性
        minimum和mls稳定性不足,未加以应用

SElinux安全上下文
    传统Linux,一切皆文件,由用户,组,权限控制访问
    在SELinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。
    所有文件和端口资源和进程都具备安全标签:安全上下文” ( security context)

    安全上下文有五个元素组成:
     user:role:type:sensitivity:category
     user_u:object_r:tmp_t:s0:c0

    实际上下文:存放在文件系统中, 
        查看安全上下文命令:
        ls –Z;ps –Z
    期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中
        查看命令: semanage fcontext –l
    selinxu规则库:
        规则:哪种域能访问那种或那些种类型的文件

SELinux的五个安全因素
    User:指示登录系统的用户类型,如root, user_u,system_u,多数本地进程都属于自由( unconfined)进程
    Role:定义文件,进程和用户的用途:文件:object_r,进程和用户: system_r
    Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用: public_content_t
    Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified, secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级, s0最低,Target策略默认使用s0
    Category:对于特定组织划分不分层的分类,如FBI Secret, NSA secret, 一个对象可以有多个categroy, c0-c1023共1024个分类, Target 策略不使用cateaory

SElinux配置

SELinux是否启用
给文件重新打标
给端口设置安全标签
设定某些操作的布尔型特性
SELinux的日志管理        


1、SELinux的状态:
   ·enforcing:强制,每个受限的进程都必然受限
   ·permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
   ·disabled:关闭

   ·相关命令:        
      sestatus
         查看selinux的状态
      getenforce:获取当前selinux状态
      setenforce 0|1  修改selinux状态
                 0:设置为permissive
                 1:设置为enforcing
             注意:此设定:重启系统后无效

    配置文件:
        /etc/selinux/config,/etc/sysconfig/selinux
              SELinux={disabled|permissive|enforcing}
        /boot/grub/grub.conf
              在kernel行追加内核参数:使用selinux=0禁用SELinux

        设置selinux也可以在开机的时候设定,在/boot/grub/grub.conf文件内核那一行后面设定selinux的状态selinux=0|1,只要配置文件或内核设定为禁用,最后selinux的状态为禁用

        注意:在从disabled状态切换至enforcing或permissive状态需要重启系统,这时候系统会对每一个文件一一重打标签,需要花费一定的时间。


  2、给配置文件重新打标:
      chcon
         chcon [OPTION]… CONTEXT FILE…
         chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE…
         chcon [OPTION]… –reference=RFILE FILE…
             OPTION: -R 递归打标,对目录而言
        例如:我想给自己定义的web文档根目录自定义为/htdocs
                chcon -R   httpd_sys_content_t   /htdocs
  3、还原文件的默认标签(默认安全上下文):
         restorecon [-R] /path/to/somewhere
         例如:我又将web的文档根目录改为原来的目录,这时候自定义的目录的标签需要还原
            restorecon  -R   /htdocs     

            恢复是根据策略库当中的策略进行还原


  4、默认安全上下文查询与修改
       ·需要用到的包:semanage命令来自policycoreutils-python包

       ·查看默认的安全上下文
             semanage fcontext –l

系统管理之Selinux详解

       ·添加安全上下文
            semanage fcontext -a –t httpd_sys_content_t '/testdir(/.*)?'
            restorecon –Rv /testdir

        ·删除安全上下文
             semanage fcontext -d –t httpd_sys_content_t '/testdir(/.*)?'

        ·查看端口标签
            semanage port –l

系统管理之Selinux详解

         ·添加端口
              semanage port -a -t port_label -p tcp|udp PORT
              semanage port -a -t http_port_t -p tcp 9527

          ·删除端口
               semanage port -d -t port_label -p tcp|udp PORT
               semanage port -d -t http_port_t -p tcp 9527

          ·修改现有端口为新标签
               semanage port -m -t port_label -p tcp|udp PORT
               semanage port -m -t http_port_t -p tcp 9527                

    5、布尔型规则:
         getsebool
         setsebool

         ·查看bool值命令:
            getsebool [-a] [boolean]
            semanage boolean –l
            semanage boolean -l –C

系统管理之Selinux详解

         ·设置bool 值命令:
            setsebool [-P] boolean value (on,off)

            setsebool [-P] Boolean=value (0 ,1)

    6、SELinux日志管理:
         需要安装settroublesshoot*,安装此包需要重启系统才能生效,它会将错误日志记录到/var/log/message
         安装包:yum install setroublesshoot* (重启生效)

         将错误的信息写入/var/log/message
            grep setroubleshoot /var/log/messages

            sealert -l UUID
                查看安全事件日志说明

            sealert -a /var/log/audit/audit.log
                扫描并分析日志

系统管理之Selinux详解
7、SELinux帮助:
yum -y install selinux-policy-devel (centos7)
yum -y install selinux-policy-doc (centos6)
mandb | makewhatis 需要更新man帮助的数据才能查询
man -k _selinux

总结:selinux在安全防护上确实起到了一定的作用,它是在内核层面来工作,往往有许多的漏洞,一旦黑客利用漏洞入侵系统后果不堪设想,还有其操作的繁琐和稳定性的欠缺的导致很多企业不愿意用到selinux ,一般都会使用硬件的安全防护设备,所以我们只需要作为了解,知道有这么个东西,如何开关闭及一些简单的操作即可。

实战演练

1、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问

vim /etc/selinux/config
SELINUX=disabled
reboot 重启才生效

systemctl status httpd
yum -y install httpd
systemctl start httpd
netstat -tnl
iptalbes -F

mkdir /website
ll -Z /website/ -d
vim /etc/httpd/conf/httpd.conf
Document Root "/website/"
<Directory "/website">
systemctl restart httpd
systemctl status httpd
echo mywebsite > index.html 
semanage fcontext -l |grep website
semanage fcontext -a -t httpd_sys_content_t "/website(/.*)?"
ll -Z /website/ -d
restorecon -R /website/



2、修改上述网站的http端口为9527,增加SELinux端口标签,使网站可访问



vim /etc/httpd/conf/httpd.conf
Listen 9527
semanager port -l|grep 9527
vim /etc/httpd/conf/httpd.conf
netstat -ntl
httpd -t 检查语法
systemctl restart httpd
semanger port -a -t http_port_t -p tcp 9527
iptables -F



3、启用相关的SELinux布尔值,使上述网站的用户student的家目录可通过http访问



在CentOS 7上
vim /etc/httpd/conf.d/usrdir.conf
#UserDir disabled
UserDir public_html
systemctl restart httpd
su -student
mkdir public_html
echo welcome to studenthome > index.html
links x.x.x.x/~student 访问家目录
ll -d /home/student
ps aux|grep http
setfacl -m u:apache:x /home/student



在CentOS 6上
vim /etc/httpd/conf/httpd.conf
#UserDir disabled
UserDir public_html
service httpd restart
iptables -F
su -student
mkdir public_html
cd public html
echo studenthomecentos6 > index.html
cd
chmod 711 /home/wang
ll -d /home/wang/

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

(0)
上一篇 2016-09-21 12:48
下一篇 2016-09-21 13:28

相关推荐

  • Linux基础知识之GUN awk

    awk:报告生成器,格式化文本输出    基本用法:    gawk [options] 'program' FILE …    options:     &…

    Linux干货 2016-09-20
  • 软件编译安装小结

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1439073     本文主要针对 configure 和 cmake 做一个介绍以及我们重新配置编译参数文件时,都需要做哪些清…

    Linux干货 2016-08-15
  • 简述一些基础指令

    tree命令 tree -L 1 -d /用来查看目录结构 -L 指定层数 -d 只查看目录 /boot 跟内核有关的文件 grub 内核和BootLoader ├── bin 存放用户使用的基本命令(可执行程序,二进制文件) 不能单独分区的 ├── boot 跟内核有关的文件 grub 内核和BootLoader&n…

    Linux干货 2017-04-03
  • HAProxy基于KeepAlived实现Web高可用及动静分离

    前言 软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS是基于Linux操作系统实现的一种软负载,而HAProxy则是基于第三方应用实现的软负载。HAProxy相比LVS的使用要简单很多,但跟LVS一样,HAProxy自己并不能实现高可用,一旦HAProxy节点故障,将会影响整个站点。本文带来的是HAProxy基…

    Linux干货 2015-06-25
  •   在服务器托管的过程中出现故障是不能完全避免的问题,可能是服务器硬盘出现硬件故障或者是防火墙遭到攻击。那么服务器托管出现故障怎么办?

      在服务器托管的过程中出现故障是不能完全避免的问题,可能是服务器硬盘出现硬件故障或者是防火墙遭到攻击。那么服务器托管出现故障怎么办?   服务器硬盘出现硬件故障时,大家应注意以下几点:   1、硬盘出现异声,此时磁头已不正常寻址,为防止打伤盘体,需立即断电不可拆解硬盘,需交有超净间的专业公司拆开检查。   2、BIOS不认盘,找不到硬盘,先请计算机工程师仔…

    Linux干货 2016-04-05
  • linux文件目录详解

    linux目录结构   (且看且不看) 历史上 /usr和 /etc文件夹下既保存静态文件,也保存可变文件,后来有了/var层次结构,/usr下面的可变文件被转移到/var下面。因而/usr现在可以只读的方式挂载(如果它在单独的文件系统上)。 /etc下的可变文件早已转移到/var,因为技术上允许/ 根是系统内核启动后挂载的第一个分区,挂载到根上的…

    Linux干货 2017-05-31