程序的DAC检查与LSM简介

news/2024/7/7 18:40:57

程序的DAC检查

在Linux中,程序的DAC(Discretionary Access Control,自主访问控制)检查是指操作系统对程序执行期间对文件和资源的访问权限进行的检查。

Linux使用一种基于权限的访问控制模型,其中每个文件和资源都与所有者、所属组和其他用户相关联,并且为每个类别分配了读取、写入和执行等权限。当程序尝试访问文件或资源时,操作系统会执行以下DAC检查:

  • 访问权限检查:操作系统会检查程序是否具有足够的权限来读取、写入或执行目标文件。这些权限由文件的所有者、所属组和其他用户的权限位所决定。
  • 文件所有权检查:操作系统会验证当前执行程序的用户是否是文件的所有者,因为文件的所有者可能具有特殊权限,例如修改文件权限或删除文件。
  • 文件所属组检查:操作系统会检查当前执行程序的用户是否属于文件的所属组。如果是,那么用户将根据所属组的权限位来访问文件。

这些DAC检查确保了对文件和资源的访问是受到限制的,只有具有适当权限的程序可以进行读取、写入和执行操作。但请注意,DAC仅仅是Linux安全模型的一部分,还有其他访问控制机制如SELinux(Security-Enhanced Linux)可以提供更细粒度的访问控制。

LSM简介

几个关键点:

  • LSM框架基于hook机制实现内核功能扩展
  • 虽然名字里带Module,但LSM并不是传统意义上的内核模块
  • Kernel中可以同时编译进多个不同的LSM
  • LSM并不是运行时加载,而是编译时引入,在boot阶段通过命令行加载

LSM架构与实现原理:从下图中可以看出LSM在Linux安全体系中所处的位置,LSM hook被插入到访问kernel对象与DAC 检查之见,然后LSM调用系统中启用的访问控制模块,检查是否可以访问。若有多个访问控制模块,会根据初始化的优先顺序执行,都允许访问才能进一步访问 kernel 对象。使用LSM Hook框架进行内核安全审计和元数据捕获。安全开发人员只需要按照既定的调用规范编写LSM模块,并加载进Linux内核,而不需要对系统调用表进行任何修改。
在这里插入图片描述
LSM的设计思想是在最少改变内核代码的情况下,提供一个能够成功实现强制访问控制模块需要的结构或者接口。其中,LSM对内核代码的改动如下:

  • 在特定的内核数据结构中加入安全域
  • 在内核源代码中不同的关键点插入对安全钩子函数的调用
  • 加入一个通用的安全系统调用
  • 提供了函数允许内核模块注册为安全模块或者注销
  • 将capabilities逻辑的大部分移植为一个可选的安全模块

LSM机制之所以简单实用,是因为它的设计者几乎罗列了任何可能出现安全问题的地方,然后在这些地方安插钩子,并且这些钩子的实现定义为回调函数,具体的安全引擎只需要自己实现这些钩子函数即可。

在LSM诞生之前,Linux Kernel安全加固的方案多种多样,随着LSM加入内核,从前的安全性内核补丁如今破坏了内核的完整性,使用LSM框架中的标准预置回调函数进行hook是当前最优雅的解决方案。而Kernel 5.4中加入的lockdown模块(前文提到的early_lsm阶段加载的模块)直接禁止了运行时对内核进行动态修改,使得LSM成为Linux安全模块开发的唯一途径。

对root用户的限制问题

Root 权限 “无法无天”,几乎可以做任意事情,一旦入侵者拿到root 权限,即已经完全掌控了系统。另外,每一个进程默认都拿到对应这个用户的所有权限,可以改动/删除这个用户的所有文件资源。很明显,这个难以防止恶意软件。

一方面限制Root 权限,即使你有root 权限,如果无法通过验证(对每个文件资源进行验证),那么一样的无法真正执行相关的操作.。另外对每一项权限进行了更加完整的细化,可限制用户对资源的访问行为。

即,需要对root用户进行限制,这样可以只需关注于文件本身的安全性,而LSM对root可以实现对root用户的限制。


http://lihuaxi.xjx100.cn/news/1459196.html

相关文章

Spring系列篇 -- Bean的生命周期

目录 经典面试题目: 一,Bean的生命周期图 二,关于Bean的生命周期流程介绍: 三,Bean的单例与多例模式 总结: 前言:今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…

mybatis 基础上整合 mybatis-plus

1.引入依赖 <!--引入Mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.2</version></dependency> 2.修改application.yml 文件 ,把 myb…

css3+js 画出爱心特效

要使用CSS3和JavaScript绘制爱心特效&#xff0c;可以使用CSS3的动画和过渡效果来创建爱心的形状&#xff0c;并使用JavaScript来控制动画的触发和交互。以下是一个简单的示例代码&#xff1a; HTML: <div class"heart"></div> <button onclick&quo…

微信转账警示!切莫在此时输入密码

微信已经成为我们日常生活中不可或缺的社交工具&#xff0c;通过微信红包和转账完成支付也变得非常普遍。 然而&#xff0c;正如人们常说的&#xff0c;树大招风。随着微信的广泛使用&#xff0c;骗子们也愈发猖獗&#xff0c;他们利用微信进行诈骗活动&#xff0c;使许多人遭受…

【Redis】Redis哨兵模式

【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后&#xff0c;需要手动把一台从服务器切换为主服务器&#xff0c;需要人工干预费事费力&#xff0c;为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具&#xff0c;它可以实现对 Redis 的监控…

ts装饰器

概念 装饰器是一种特殊类型的声明&#xff0c;它能够被附加到类声明、方法、属性或参数上&#xff0c;可以允许使用<name>注释标记一次性修改类或类成员的行为。 启用方式 在tsconfig文件中修改配置&#xff1a;"compilerOptions": { "target": &q…

学习左耳听风栏目90天——第七天 7/90(学习左耳朵耗子的工匠精神,对技术的热爱)【每个程序员都该知道的事】

每个程序员都该知道的事 每个程序员都应该要读的书每个搞计算机专业的学生应有的知识LinkedIn 高效的代码复查技巧编程语言和代码质量的研究报告 每个程序员都应该要读的书 每个搞计算机专业的学生应有的知识 LinkedIn 高效的代码复查技巧 编程语言和代码质量的研究报告

用pytorch实现AlexNet

AlexNet经典网络由Alex Krizhevsky、Hinton等人在2012年提出&#xff0c;发表在NIPS&#xff0c;论文名为《ImageNet Classification with Deep Convolutional Neural Networks》&#xff0c;论文见&#xff1a;http://www.cs.toronto.edu/~hinton/absps/imagenet.pdf &#xf…