首页 > 系统相关 >SELinux 基本原理

SELinux 基本原理

时间:2024-06-08 13:54:44浏览次数:27  
标签:检查 SELinux LSM 基本原理 security open AVC

  • 首发公号:Rand_cs

SELinux 基本原理

本文讲述 SELinux 保护安全的基本原理

安全检查顺序

不废话,直接先来看张图

当我们执行系统调用的时候,会首先对某些错误情况进行检查,如果失败通常会得到一些 error 信息,通过查看全局变量 errno 可以知道到底是哪一类错误

随后进行 DAC 检查,简单理解就是 Linux 里面 rwx 那一套检查逻辑,如果检查失败,通常会得到类似 permission denied 的信息

再之后便会进行 MAC 检查,在这里就是进行 SELinux 的检查,它会根据当前主体和客体的类型,查询策略,检查是否允许当前类型的主体访问客体,检查失败的话,则也是会得到类似 permission denied 的信息

以上检查都通过,则该调用执行成功。

何时检查?

从上图可以知道,是在 LSM Hook 点出执行的 SELinux 检查,大家可能对 LSM 概念比较陌生。LSM 全称 Linux Security Module,但其实并不是一个模块,而是一个安全框架,为安全模块提供的一个安全框架。

Linux 源码目录中有个 security 的目录,其下的子目录比如说 apparmor,selinux 等等就是目前 Linux 支持的一些安全模块。此系列文章主要就是讨论其中的一个安全模块 SELinux。

LSM 框架提供的服务之一就是在内核中的关键处埋下了许多 hook 点,在看内核代码的时候,你应该会经常发现类似 security_xxx 的函数,这就是 LSM Hook 点。

举个例子,经典的调用 open 打开一个文件,其简化版的调用路径如下所示:

open
-------
    sys_open
        do_filp_open
            path_openat
                do_open
                    vfs_open
                        do_dentry_open
                            security_file_open
    error = security_file_open(f);
    if (error)
        goto cleanup_all;

其中 security_file_open 就是 open 系统调用的一个 LSM Hook 点,当执行到此处的时候,它会执行所有挂在此hook点上的安全检查函数,如果 SELinux 使能,那么便会执行 selinux_file_open 函数来检查当前的进程(主体)是否被允许打开文件(客体)。

这一步还不止一个安全检查函数?是的,这取决于当前系统使能了多少个 LSM 安全模块,如果使能了 A,B,C 三个安全模块,那么每到 security_xxx hook 点,便会将 A、B、C 对应的安全检查函数启动顺序全都执行一遍。每一个检查都通过,才算最终通过,如果这一步检查不过,可以看出直接就返回了。

如何检查?

这是 SELinux 在内核中的一个极简的架构图,当需要权限检查的时候,首先去访问 AVC(Access Vector Cache),从名称当中就可以看出它是存放权限访问的一个 cache,如果能从 AVC 里面直接查询到是否允许访问的结果,那么将查询结果返回。

如果 AVC 中没有相关权限访问的结果,则去 Security Server 查找,Security Server 会去查询策略,然后将查询的结果存储到 AVC,再将结果返回。

所以 SELinux 的权限检查主要就是这么一个逻辑哈,我们从头用一个例子来捋一捋,比如说 p_t 类型的 P 进程想要打开 f_t 类型的 F 文件,这期间会进行的安全检查:

  1. 首先检查是否有逻辑错误存在,比如说 F 文件不存在?
  2. 然后进行 DAC 检查,当前进程有效id和文件属主id比较等等操作
  3. 进入 security_file_open 这个 LSM hook 点,执行每一个使能的安全模块对应的 xxx_file_open 函数,来进行安全检查。
    1. 执行 selinux_file_open 函数来执行 SELinux 权限检查
    2. 首先查找 AVC,查询 p_t 对 f_t 类型的文件是否有 open 权限,如果 AVC 中有记录,将结果返回
    3. 如果 AVC 中没有记录,Security Server 查询策略库,将查询结果写到 AVC,然后将结果返回

以上检查都通过,基本上 open 系统调用就成功了,如果第一步失败,则可以从 errno 找到错误原因,如果后面的 DAC 和 MAC 权限检查失败,通常则会出现 permission denied 的提示

好了,本文就先到这里,有什么问题欢迎来讨论交流

  • 首发公号:Rand_cs

标签:检查,SELinux,LSM,基本原理,security,open,AVC
From: https://www.cnblogs.com/randcs/p/18238582

相关文章

  • 深度解读ChatGPT基本原理
    目录一、引言二、ChatGPT概述三、ChatGPT的基本原理Transformer架构预训练与微调语言建模生成式建模四、ChatGPT的应用与优势五、结论一、引言在人工智能领域,自然语言处理(NLP)一直是研究的热点之一。随着技术的不断进步,我们见证了从简单的聊天机器人到复杂的语言模......
  • 开关电源基本原理1
    目录内容概述关于电感认识电感电感充电电感储能电感充电电感参数电感放电利用电感升压电感电流波形伏秒法则电流纹波率电感电流三种导电模式电流纹波率与频率的关系电流纹波率与电感值的关系电感值与电感体积电路纹波率r的最优值电感值与电感体积内容概述......
  • 深度解读ChatGPT基本原理
    一.引言1.ChatGPT的背景和应用场景在人工智能领域,自然语言处理(NLP)一直是一个核心研究方向,其目的是让计算机能够理解、解析和生成人类语言。随着深度学习技术的发展,NLP领域取得了显著进步,特别是生成式预训练变换器(GenerativePre-trainedTransformer,简称GPT)模型的出现,极大地......
  • OSPF协议基本原理:
    OSPF是OpenShortestPathFirst(开放最短路径优先)RIP协议存在的问题:存在最大15跳的限制,不能适用大规模组网的需求周期性发送全部路由信息,占用大量的带宽资源路由收敛速度慢以跳数作为度量值存在路由环路可能性OSPF协议特点:没有路由跳数的限制使用组播更新变化的路由和网......
  • WinDbg基本原理和使用方法,掌握基本的调试技术,并能够应用于实际的调试工作中;高级调试技
    WinDbg初级应用的大纲:1.WinDbg基础知识WinDbg简介:介绍WinDbg是什么以及其在Windows调试和分析中的作用。安装与配置:指导学员如何安装和配置WinDbg调试环境,包括下载安装、符号配置等基本步骤。2.调试基础调试流程:解释调试的基本流程,包括启动目标程序、设置断点、执行程序......
  • 深度解读chatGPT基本原理
    ChatGPT,这个听起来有点高科技的东西,其实简单来说就是一个特别聪明的聊天机器人。它能理解你的话,还能像真人一样和你聊天,回答问题,甚至帮忙做点事情。想知道它是怎么做到的吗?咱们一起揭开它的神秘面纱。1.基础概念:什么是ChatGPT?ChatGPT是OpenAI公司创造的一种人工智能技术,它......
  • 深入解读 ChatGPT 的基本原理(个人总结版)
    引言背景人工智能(AI)技术自20世纪中期诞生以来,经历了多次革新和进步。从最早的图灵测试,到20世纪末的深蓝计算机击败国际象棋冠军,再到21世纪初谷歌AlphaGo击败围棋冠军,AI技术的飞速发展改变了人们的生活和工作方式。在众多AI应用中,自然语言处理(NLP)技术因其在语言理解和生成方面......
  • Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置
    前言在上一篇《IntelHDSLB高性能四层负载均衡器—快速入门和应用场景》中,我们着重介绍了HDSLB(HighDensityScalableLoadBalancer,高密度可扩展的负载均衡器)作为新一代高性能四层负载均衡器的需求定位、分析了HDSLB在云计算和边缘计算应用场景中的特性优势,以及解读了HDS......
  • HTTP基本原理
    HTTP基本原理URI和URLURI全程UniformResourceIdentifier即统一资源标志符。URL全程``UniformResourceLocator`即统一资源定位符。举例来讲https://github.com/favicon.ico,既是一个URI又是一个URL。favicon.ico这样一个图标资源,我们用上一行中的URI/URL指定了访问它的唯......
  • 在Linux中,SELinux是什么?
    SELinux(Security-EnhancedLinux)是一个强大的安全模块,它为Linux操作系统提供安全策略机制。SELinux是NSA(美国国家安全局)开发并开源的,目的是增强系统的安全性,通过强制访问控制(MandatoryAccessControl,MAC)来限制对资源的访问,从而保护系统免受未授权访问和潜在威胁。1.SELinux的主......