技术分享 | LSM,Linux 内核的安全防护盾
计算机安全是一个非常重要的概念和主题,它不仅仅可以保护用户个人信息和资产的安全,还可以影响到用户在使用过程中的体验;但同时,它也是一个很抽象的概念,关于其相关文献和资料不计其数,但它究竟是什么、包含什么,并没有详尽并全面的介绍。尽管困难,国际上还是对计算机安全概括出了三个特性:
-
私密性(Confidentiality)
-
完整性(Integrity)
-
可用性(Availability)
三者合起来简写为 CIA 。私密性就是数据不被未授权的人看到;完整性指存储或传输的信息不被篡改;可用性是指自己的设备在需要使用的时候能够使用。
内核对于系统的重要性是无需多言的。Linux 内核安全的开发从上世纪 90 年代中后期开始,经过 20 多年的开发, Linux 内核中安全相关模块还是很全面的,有用于强制访问控制的 LSM 、有用于完整性保护的 IMA 和 EVM 、有用于加密的密钥管理模块和加密算法库、还有日志和审计模块、以及一些零碎的安全增强特性。
LSM ,全称为 Linux Security Modules ,中文直译为 Linux 安全模块。别看叫 Linux 安全模块,但 LSM 其实是一个在内核各个安全模块的基础上提出(抽象出)的轻量级安全访问控制框架。该框架只是提供一个支持安全模块的接口,本身不能增强系统安全性,具体的工作交给各安全模块来做。这有点儿类似于系统架构师和工程师的关系,架构师负责抽象建模、系统设计和框架搭建,工程师按照架构师的框架设计进行编码,将其构想付诸实现。
再具体点说, LSM 在 Linux 内核中体现为一组安全相关的函数,这些安全函数在系统调用的执行路径中会被调用。因此 LSM 的目的是对用户态进程进行强制访问控制。至于这些安全函数要实施什么样的访问控制,则是由具体的安全模块决定的。
两段内容就提到了两次安全模块,那到底都有哪些安全模块?
截止到2014年, Linux 内核主线上共有 5 个安全模块:SELinux、AppArmor、Smack、TOMOYO 和 Yama,后来又增加了 LoadPin 和 SafeSetID 等。虽然还被称为模块,但实际上自 Linux 内核 2.6.x 版本之后, Linux 就强制 LSM 各个模块必须被编译进内核中,不能再以模块的形式存在了。这意味着,在运行时不能再随意加载一个所谓的安全模块作为访问控制机制了,也不能随意卸载一个安全模块了。
说起 LSM 的历史,就不能不提到 SELinux 。实际上是先有的 SELinux ,后有的 LSM ,可以说 LSM 是由 SELinux 推动才应运而生的。具体是怎么回事?且听我慢慢道来。
在 2001 年的 Linux Kernel 峰会上,美国国家安全局(National Security Agency,简写为 NSA )代表建议在 Linux Kernel 2.5 中加入 Security-Enhanced Linux(SELinux) 。然而,这一提议遭到了 Linus Torvalds( Linux 之父)的拒绝。当然了,拒绝也是有原因、有理由的:
一方面, SELinux 并不是唯一用于增强 Linux 安全性的安全子系统;
另一方面,并不是所有的开发人员都认为 SELinux 是最佳的解决方案。最终,“托爷”还真就没让 SELinux 加入到 Linux Kernel 2.5 。
虽然来了个“烧鸡大窝脖”,可是人家 NSA 可没有气馁和放弃。相反,将 Linux Security Module ,即 LSM 的开发提上日程。打那之后,LSM 子系统开发了近 3 年,终于在 2003 年完成了由 SELinux 到 LSM 的迁移,并在 Linux Kernel 2.6 正式加入到内核中。自此以后,大量安全模块应运而生了,比如 RHEL、Fedora、CentOS 等发行版中默认的 SELinux ,以及在 Ubuntu、OpenSUSE、SUSE、Debian 等发行版中默认的 AppArmor 等等(就是上文列出的那些安全模块)。
LSM 框架主要由五大部分组成:
-
在关键的特定内核数据结构中加入了安全域;
-
在内核源码中不同的关键点处插入对安全钩子函数的调用;
-
提供了一个通用的安全系统调用;
-
提供了注册和注销函数,使得访问控制策略可以以内核模块方式实现;
-
将 capabilities 逻辑的大部分功能移植为一个可选的安全模块。
具体实现上, LSM 框架通过提供一系列的 Hook 即钩子函数来控制对内核对象的操作,其本质是插桩法。Hook 函数的访问示意图如下:
通过系统调用进入内核之后,系统首先进行错误检查;错误检查通过之后,进行传统的权限检查即自主访问控制(Discretionary Access Control,DAC)检查(传统权限检查主要是基于用户的,用户通过验证之后就可以访问资源);通过之后才会进行强制访问控制(Mandatory Access Control,MAC)。强制访问控制是不允许主体干涉的一种访问控制,其采用安全标识、信息分级等信息敏感性进行访问控制,并通过比较主体的级别和资源的敏感性来确定是否允许访问。
LSM 是一个很大的概念和课题,涉及很多方面、层面的知识,非常值得深入学习、探索和研究。
它作为 Linux 内核的一个关键组成部分,对计算机安全至关重要。深入研究 LSM 可以为提高 Linux 系统的安全性、性能和适应性提供重要见解,并有助于满足不断演变的安全需求。
我们认为如何适应新兴技术和安全挑战,是一个有前景的研究方向。同时,鼎道智联正在打造的 DingOS 也在探索着相关内容,力争为用户带来更安全、绿色、便捷的操作体验,如果你也对此感兴趣,欢迎关注我们加入鼎道生态,和我们一起创造出更智能、更高效、更可持续的未来。
相关文章:

技术分享 | LSM,Linux 内核的安全防护盾
计算机安全是一个非常重要的概念和主题,它不仅仅可以保护用户个人信息和资产的安全,还可以影响到用户在使用过程中的体验;但同时,它也是一个很抽象的概念,关于其相关文献和资料不计其数,但它究竟是什么、包…...
http服务(Apache 2.4.57)源码编译及使用
这里安装的是Apache 2.4.57版本 1.下载源码包及编译安装 下载地址 # 下载 wget https://archive.apache.org/dist/httpd/httpd-2.4.57.tar.gz # 如果系统自带httpd这个软件要删除掉,两个软件不能同时运行 rpm -e httpd --nodeps # 安装依赖环境 yum -y install apr apr-dev…...
【1day】H5S视频平台未授权漏洞学习
目录 一、漏洞描述 二、资产测绘 三、漏洞复现 四、漏洞修复 一、漏洞描述 H5S视频平台是一个基于Web技术的视频播放和流媒体管理平台。它提供了一套完整的解决方案,用于在网页上播放和管理视频内容。H5S视频平台存在未授权漏洞,泄露内网rtsp服务集群的服务集群的和H5_…...

企业架构LNMP学习笔记3
服务器基本环境配置: 1、安装虚拟机,centos7.9 操作系统; 2、网络配置; 3、机器名FQDN设置; 4、DNS解析设置,本地hosts设置; 5、配置yum源环境; 6、vim安装配置; …...

使用Spring Boot和Kafka实现消息发送和订阅
文章目录 一,新建Spring Boot1,Maven配置2,无法识别为SpringBoot项目3,无效的源发行版4,无法访问SpringApplication5,运行直接Finish6,服务运行成功 二,安装启动Kafka1,下…...

探讨uniapp的组件使用的问题
1 视图容器 1.1 view Flex是Flexible Box的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性。 当设置display: flex后,继续给view等容器组件设置flex-direction:row或column,就可以在该容器内按行或列排布子组件。uni-ap…...
【跟小嘉学 Rust 编程】十七、面向对象语言特性
系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…...

mall :rabbit项目源码解析
文章目录 一、mall开源项目1.1 来源1.2 项目转移1.3 项目克隆 二、RabbitMQ 消息中间件2.1 rabbit简介2.2 分布式后端项目的使用流程2.3 分布式后端项目的使用场景 三、安装RabbitMQ(Win10)3.1安装erLang语言,配置环境变量3.2 安装RabbitMQ服务端3.3 测试安装效果 四…...

JDBC连接数据库
目录 一.什么是JDBC 二.JDBC的实现步骤 三.简单使用JDBC 一.什么是JDBC JDBC是Java数据库连接,是java中提供数据库访问的Java API,它为关系型数据库的提供了统一访问规范。 二.JDBC的实现步骤 1.创建数据库连接 这里有两种方式: DataSource创建,提…...

Linux学习之Ubuntu 20中OpenResty的nginx目录里内容和配置文件
参考的文章是《nginx配置详解》 可以参考我以前的文章安装OpenResty。 cd /usr/local/openresty切换目录,ls -l查看目录里边的内容。 我的系统中,nginx目录是/usr/local/openresty/nginx,在这个目录里边有一些目录,如下ÿ…...

使用axi_quad_spi操作spi_flash
文章目录 基本测试情况IP支持的命令 基本测试情况 有spi_flash需要访问,为简单计,选择使用axi_quad_spi进行操作。开始时,将IP配置成如下参数, 这样配置,是想着能够适应各家的FLASH(实际使用的则是micron…...

Linux:tomcat (源码包安装)(官网下载-安装-启动-配置-等等等-----从入门到入土)
介绍 Apache Tomcat软件是一个开源实现 Jakarta Servlet、Jakarta Server Pages、Jakarta Expression Language、Jakarta WebSocket、Jakarta Annotations 和 Jakarta Authentication 规范。 这些规范是Jakarta EE平台的一部分。 Apache Tomcat软件是在开放和参与式中开发的。 …...

中科驭数以DPU先进计算技术,夯实下一代金融IT基础设施底座
由中国计算机学会主办的第19届CCF全国高性能计算学术年会(CCF HPC China 2023)于8月23日至26日在青岛成功召开。在“高性能金融计算”主题论坛上,中科驭数高级副总裁、CTO卢文岩应邀发表了题为《DPU先进计算技术助力下一代交易底座》的演讲&a…...
Android 手游聚合SDK小知识(二) 聚合分包
更新: 在上一篇文章中,我们介绍了如何聚合SDK的基本原理,介绍了聚合SDK的接口设计,那么当CP接入了我们的聚合SDK,给了我们游戏apk包时,这时我们又当如何分发渠道包呢? 分发渠道包:…...

【RISC-V】RISC-V寄存器
一、通用寄存器 32位RISC-V体系结构提供32个32位的整型通用寄存器寄存器别名全称说明X0zero零寄存器可做源寄存器(rs)或目标寄存器(rd)X1ra链接寄存器保存函数返回地址X2sp栈指针寄存器指向栈的地址X3gp全局寄存器用于链接器松弛优化X4tp线程寄存器常用于在OS中保存指向进程控…...

Python爬虫异常处理实践:处理被封禁和网站升级问题
在这篇文章中,我们将一起探讨Python爬虫异常处理实践,特别关注处理被封禁和网站升级问题。让我们一起来看看如何解决这些问题,提高我们爬虫程序的稳定性和可靠性。 首先,我们要了解为什么会遇到这些问题。网站封禁爬虫的原因主…...

重大工程建造云服务平台源码 SpringCloud+Vue
技术架构: 微服务JavaSpring Cloud VueUniApp MySql 开发语言:Java 开发工具:Idea 前端框架:Vue 后端框架:Spring Cloud 数 据 库:MySql 移 动 端:UniApp 系统端口:PC端&…...

MyBatisPlus简单入门
1、简单介绍MyBatisPlus MyBatisPlus是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,完全去SQL化,封装好了大量的CRUD操作。甚至吧CRUD操作封装到了Service层,可以直接在Controller调用现成的CRUD服务层,…...

神经网络入门
神经网络的基本骨架 1. nn.Module的使用 所有的模型都要继承 Module 类需要重写初始化函数和运算步骤函数 eg: import torch.nn as nn import torch.nn.functional as Fclass Model(nn.Module): # 继承父类Module def __init__(self): # 重写初始化函数super()…...
【面试经典150题】多数元素
🔗题目链接 ✈题目描述: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 ⌊ n/2 ⌋表示n/2结果向下取…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...