Seliux简介

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
1
2
3
4
5
6
7
8
一.SELInux简介
二.selinux工作机制
三.安全标签
四.配置selinux
五.测试selinux
六.设定selinux的 bool 标签
七.日志文件记录位置
八.semanage的使用

一.SELinux简介
    secure enhanced linux
    SELinux:工作于Linux内核中
    DAC:自主访问控制 //linux自带的,own,group,other //只有用户 Discretionary Access Control——DAC
        //问题:普通用户之间共享文件,要开放文件的其他人的权限,这样是不安全的
        //假如tmp中放了重要数据,DAC是无法保证安全的。
    MAC:强制访问控制    Mandatory  //强制对资源限制的访问
    
    [进程]安全上下文:
        进程的属主和属组,进程所能够访问的文件的最终权限,取决于:
            file:属主--->属组-->other //逐个匹配
    MAC:每一个进程,假如需要访问10个资源,那他也只能访问者10个资源,及时他对其他资源也有相应的权限
        DAC是自助访问功能,是没有的
        MAC:任何一个进程启动后,类似于放在一个sandbox内{事先准备的最小资源集},而不能以运行者的身份,到处访问其他资源
            这样进程所能够获取的资源,也仅仅是沙箱内部的资源
        但是如何建立沙箱,以及沙箱切换//selinux就是类似于为每一个进程提供了一个沙箱    
    安全沙箱:sandbox
        放到一个隔离访问空间中,类似于MAC
基本概念:
    主体:访问操作的主动发起者,它是系统中信息流的启动者,可以使信息流在实体之间流动。
    客体:信息的载体或从其他主体或客体接收信息的实体。
        主体有时也会成为访问或受控的对象,如一个主体可以向另一个主体授权,
        一个进程可能控制几个子进程等情况,这时受控的主体或子进程也是一种客体。
    访问控制分类:
        客体不受它们所依存的系统的限制,可以包括记录、数据块、存储页、存储段、文件、目录、
        目录树、库表、邮箱、消息、程序等,还可以包括比特位、字节、字、字段、变量、处理器、
        通信信道、时钟、网络结点等。
        
二.Selinux有两种工作级别
    strict:每个进程都收到selinux的控制 //NAS开发,设定较为复杂
    targetted:仅有限个进程受到selinux控制 //它是redhat开发的targeted,它只是对于主要的网络服务进行保护
        比如apache, sendmail, bind, postgresql等,不属于那些domain的就都让他们在unconfined_t里
        可导入性高,可用性好但是不能对整个系统进行保护。
    
    SELinux的工作方式:
        subject operation object
        我      打            你
        
        subject:进程
        object:进程、文件
            文件:open,write,close,chown,chmod
        
        subject:domain 操作者
        object:type 被操作对象
    ls -Z  //selinux为每一个文件和进程提供的安全标签,也为进程提供了安全标签
    ps auxZ //激 活selinux
        //原先是关闭的话,需要重启系统,内核会为每一个文件打标签
    
三.安全标签:
    共5段:后两段对于RHEL和CentOS是没有意义的
    user:role:type
        user:selinux的user
        role:角色,类似于group
        type:类型,作用,user所能够访问的对象范围,domain
    有了selinux自后,一个进程的权限,除了user-group-other之外还要受到
        沙箱的限制
de5b7545fd283d26177788fff10755e1.png    //为文件打好标签以后,进程的属主即使对该文件具有写权限,他也不一定能够访问,取决于沙箱的定义范围
    
    1.对selinux来讲,如果这个进程需要访问某个文件,在沙箱的域外的其他沙箱内,如何突破限制访问
        改变文件的类型:改为该进程所在域范围内,
    注意:任何一个进程到底能够访问哪些文件,并不是严格按照进程所在域和被访问者自己的类型是否匹配决定的
            而是依据selinux规则库决定的
    SELInux规则库
        规则:哪种域能访问哪种或哪些种类型文件
        
进程运行的过程
    进程能否访问一个文件?
        user->group->selinux的规则库
            有记录:授权-->允许
            有记录:拒绝-->拒绝,并记录日志
            没有记录:拒绝
        规则是二进制存放的:速度比较快
        但是每次都要匹配selinux:因此还是比较慢的
四.配置selinux
    selinux是否启用:
    给文件重新打标:
    设定某些布型特性
    1.SELinux状态:enforcing|permissive|disabled
            enforcing:强制,每个受限的进程都必然受限
            permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志中
            disabled:关闭
        注:当前系统为disabled,不管转换为何种类型,都需要重启OS才能启用
        getenforce
        setenforce 0|1 //
            仅仅当前有效,重启OS无效
            配置文件:/etc/sysconfig/selinux,/etc/selinux/config
    2.给文件打标签        
        chcon //change context ,修改标签
        chcon [OPTION]... CONTEXT FILE...
        chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
        chcon [OPTION]... --reference=RFILE FILE...        
        通常只会修改type,
        chcon unconfined_u:object_r:user_home_t:s0 aa
        -R :递归打标
        注意:一般文件复制到某目录后,标签会随之改变
        restorecon  FILE //当这个文件在策略里有定义时,可以恢复原来的文件标签。
            -R,-r //递归还原

1
2
3
4
5
6
7
          --reference=参考文件:使用指定参考文件的安全环境,而非指定值。
          -R, --recursive:递归处理所有的文件及子目录。 
          -v, --verbose:为处理的所有文件显示诊断信息。 
          -u, --user=用户:设置指定用户的目标安全环境。 
          -r, --role=角色:设置指定角色的目标安全环境。 
          -t, --type=类型:设置指定类型的目标安全环境。 
          -l, --range=范围:设置指定范围的目标安全环境

        
    3.标签查看:
        ls -Z 
        ls --context a.txt 
    4.复制和查找标签
        cp -Z,--conntext=CONTEXT 在拷贝的时候指定目的文件的security context 
        find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \:  
    5.查看se状态
        sestatus -v 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1.USER
     1) user identity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;
     2) 三种常见的 user:
            user_u :普通用户登录系统后的预设;
            system_u :开机过程中系统进程的预设;
            root :root 登录后的预设;
     3) 在 targeted policy 中 users 不是很重要;
     4) 在 strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。
2 ROLE
     1) 文件、目录和设备的role:通常是 object_r;
     2) 程序的role:通常是 system_r;
     3) 用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;
         用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个role;但是同一时间内只能使用一个role;        
     4) 使用基于RBAC(Roles Based Access Control) 的strict和mls策略中,用来存储角色信息
3 TYPE
     1) type:用来将主体(subject)和客体( object )划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;
     2) 当一个类型与执行中的进程相关联时,其type也称为domain;
     3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;
     LEVEL和CATEGORY:定义层次和分类,只用于mls策略中
           LEVEL:代表安全等级,目前已经定义的安全等级为s0-s15,等级越来越高
           CATEGORY:代表分类,目前已经定义的分类为c0-c1023

     
五.测试selinux
    1.yum install httpd//

1
2
3
4
5
6
7
     2.<html>
             <title>Test page</title>
             <body>
                 <h1>Welcome to Test</h1>
                 <p> hello </p>
             </body>
     </html>

    unconfined_u:object_r:httpd_sys_content_t:s0
    ps auxZ |grep httpd
        system_u:system_r:httpd_t:s0
    //httpd_sys_content_t是httpd_t的一个子类型,因此httpd_t该进程能够访问index.html    
    3.vim /etc/httpd/conf/httpd.conf

1
2
3
4
5
6
7
         DocumentRoot  "/www/html"
         <Directory  "/www/html" >
         ...
         </Directory>
       mkdir -pv /www/html
       systemctl restart httpd
       cp / var /www/html/index.html /www/html

      ls -Z
        unconfined_u:object_r:default_t //类型已经修改
    4.再次访问
        forbidden
        一:setenforce 0//可以再次访问
        二:chcon -t httpd_sys_content_t a.html
      
    注意:/var/www/html目录中,修改type是没有效果的,selinux不会禁止,除非,改变原有的目录
六.设定selinux的bool标签
    setsebool 是用来切换由布尔值控制的 SELinux 策略的,
    getsebool 获取bool值
    
    getsebool -a //查看所有的
    getsebool ftp_home_dir
    
    setsebool
        -P //保存到策略文件中,永久有效
    setsebool [ -PNV ] boolean value | bool1=val1 bool2=val2 ...
    setsebool ftp_home_dir on
                    on/off  1/0 :1表示开启 //下次开机失效
            -P:保存到策略文件,更新二进制文件
    什么是SElinux布尔值呢?SEliux布尔值就相当于一个开关,精确控制SElinux对某个服务的某个选项的保护
    setsebool ftp_home_dir on //开始保护,但是临时生效
七.日志文件记录位置
    /var/log/audit/audit.log
    tail audit.log
    selinux的管理工具:
        semanage
    
八.semanage的使用
    相关命令:setsebool,getsebool,seinfo,sesearch
    semanage {login|user|port|interface|fcontext|translation} -l
    semanage fcontext -{a|d|m} [-frst] file_spec
        -l:查询。
        fcontext:主要用在安全上下文方面。 
        -a:增加,你可以增加一些目录的默认安全上下文类型设置。
        -m:修改。
        -d:删除。
    这是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。











本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1981448,如需转载请自行联系原作者

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
网络协议 数据库连接 Nacos
nacos常见问题之nacos报错400如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
|
Ubuntu 网络协议 网络安全
ubuntu防火墙的安装,开启,关闭和添加规则等操作
ubuntu防火墙的安装,开启,关闭和添加规则等操作
6425 0
ubuntu防火墙的安装,开启,关闭和添加规则等操作
|
6月前
|
人工智能 并行计算 PyTorch
TripoSR:开源3D生成闪电战!单图0.5秒建模,Stability AI颠覆设计流程
TripoSR是由Stability AI和VAST联合推出的开源3D生成模型,能在0.5秒内从单张2D图像快速生成高质量3D模型,支持游戏开发、影视制作等多领域应用。
233 13
TripoSR:开源3D生成闪电战!单图0.5秒建模,Stability AI颠覆设计流程
|
前端开发 小程序 JavaScript
支付宝通知新体验-OPPO 泛在卡片多模交互
支付宝通知新体验-OPPO 泛在卡片多模交互
331 2
|
7月前
|
前端开发 测试技术 API
我同学不知道UnoCSS是什么,我教他用之后效率直接倍增
原子化 CSS 是一种 CSS 的架构方式,它倾向于小巧且用途单一的 class,并且会以视觉效果进行命名。可以将原子化的 CSS 框架理解为这类 CSS 的统称
716 5
|
11月前
|
应用服务中间件 Linux nginx
FFmpeg学习笔记(一):实现rtsp推流rtmp以及ffplay完成拉流操作
这篇博客介绍了如何使用FFmpeg实现RTSP推流到RTMP服务器,并使用ffplay进行拉流操作,包括在Windows和Linux系统下的命令示例,以及如何通过HTML页面显示视频流。
2405 0
|
存储 编解码 开发工具
拉取RTSP流后的几个去向探讨(播放|转RTMP|轻量级RTSP服务|本地录制|GB28181)
本文汇总了大牛直播SDK在Android平台上拉取RTSP流后的多种应用方向,包括本地播放、转推至RTMP服务器、轻量级RTSP服务、GB28181平台及录像等功能。提供了详细的实现方法与示例代码,旨在帮助开发者高效利用RTSP流数据,实现低延迟、稳定且灵活的应用场景。
405 1
|
JavaScript 数据安全/隐私保护
如何在Vue组件中调用封装好的外部js文件方法
这篇文章介绍了如何在Vue组件中调用封装好的外部js文件方法,包括在Vue项目中全局引入外部js文件,并在组件中通过this.$myMethod()的方式调用外部js文件中定义的方法。
如何在Vue组件中调用封装好的外部js文件方法
|
算法 网络安全
Unable to negotiate with 127.0.0.1 port 29215: no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 解决
【5月更文挑战第5天】Unable to negotiate with 127.0.0.1 port 29215: no matching host key type found. Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha> 解决
766 7
|
缓存 定位技术 Python
是时候跟Conda说再见了
是时候跟Conda说再见了
1125 2

热门文章

最新文章