3.3 SELinux策略语言

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/47726971 3.
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/47726971

3.3.1 本地SELinux策略语言编译器

为内核构建一个策略文件最基本的方法就是从源策略文件中使用checkpolicy程序编译他.这个以很多步骤构建的源程序,被命名为”policy.conf”.CheckPolicy检查源策略文件在语法和语义上的正确性,并把结果以一定的形式(被乘坐二进制策略文件)写到文件中,该文件是能够被内核策略加载器(load_policy)读取的.被CheckPolicy所支持的语言语法是被SELinux所支持的本地的,原生的语言.你可以将checkpolicy 语言看做是和汇编语言相似的语言.高级语言和其他更加抽象的方式来创建策略也正在发展,后面将会讨论这种方式.对于现在来说,我们关注的是本地策略语言和用于内核强制执行的策略的构建.

我们来看一下下面这张阐述策略源文件的基本组成部分.
这里写图片描述

策略源文件的第一部分向安全服务器定义了客体类.这一部分也定义了其他客体类的权限.对于内核来说,这些类是和内核源文件直接相关的.通常来说,作为一个内核策略编写者,你尽量永远不要修改客体类和权限定义.在后面的章节中讨论指定的客体类和他们相关的权限.

下一部分包含了对TE的描述,这一部分是目前位置SELinux策略中最大的一部分.这一部分策略编写者将会花费大量的时间去编写.他包含了所有的标示(类型)声明和TE规则(包含所有的allow,type_transition和其他TE规则).在第五章详细讨论类型和核心的TE规则."Type Enforcement"这一部分通常包含着数以千计的类型声明和数以万计的TE规则.这一部分也会包含一些关于角色和用户的规则和声明.支持TE观念的用户和角色将在第6章中讨论.

策略源文件的下一部分包含了一些限制.约束提供了一种手段,进一步限制了超越TE规则允许的TE策略.举个例子,MLS策略,被实现为一系列的约束.在第七章和第八章讨论限制和MLS.

策略文件的最后一部分包含标签指定(labeling specification).所有的客体都要和安全上下文绑定.这一部分告诉SELinux如何对待对待文件系统,即如何对待在文件系统运行的过程中被创建的被标签标记的文件.一个分离的相关的机制,称为一个文件上下文文件,被用于初始化文件,目录和其他在永久性文件系统上的客体的安全上下文标签.这些和其他于课题标签相关的主题在第十章讨论.

检查policy.conf文件
随着二进制策略文件被checkpolicy创建,你可以使用Tresys apol工具来查看,查找和分析policy.conf文件的内容了.policy.conf文件比二进制文件形式更加抽象,这个文件将会使得策略分析和调试更加方便.同时,policy.conf文件在形式上于源文件是最相近的,因此这个文件也是跟踪源文件中的bug的最好的形式.在任何情况下,这两者都是非常重要的,并且应该反射出相同的安全策略.

3.3.2 在整体策略中的源策略模块

在今天SELinux策略一个常用的类型就是有一个整体策略.这个策略被checkpolicy构建成一个蛋一个二进制策略文件,该策略被直接加载到内核当中.由于SELinux策略通常是非常巨大和复杂的,例如软件,所以他们被构建成称为模块的小单元.有很多种方式来构建策略模块.最原始的也是最常用的方式称为源模块,支持整体策略的开发.源模块通过脚本,m4宏和Makefile文件与文本文件相结合,共同创建一个更加高级的语言.策略模块联系在一块变成一个单一的大型源文件(也就是policy.conf),然后被checkpolicy编译到一个能够被内核读取的二进制文件中.

3.3.3 可加载策略模块

创建一个模块策略的一个新的方法被称为可加载模块,该方法使用checkpolicy最近的扩展和一个模块编译器(checkmodule)来构建可加载策略模块,这些模块被单独编译.可加载模块也是策略服务器的基础.在科技在模块例子中,不再构建成一个整体二进制策略,相对应的是,一个策略的核心子集被构建,称为基本模块.你创建基础模块更像你创建整体策略.伴随着可加载模块,你可以组织基本模块,仅仅包含与核心操作系统相关的规则.策略的其他部分以分离的可加载模块被创建.当你安装他们相关的软件包的时候,你可以以模块化的方式来谈价其他所有的策略规则.

可加载模块引起了策略语法的改变,该语法被设计来将策略分离开来成为可分配的策略模块.这些改变和基础和费基础模块是不一样的.基础模块使用的是和整体策略语言一样的策略语言,仅仅是有一点点小小的附加.非基础模块(也就是可加载模块)使用了带有很多附加语言特征的标准策略语言的子集.这些策略语言的子集包含了很多TE,规则和用户描述.附加的语言特征被用来管理模块之间的以来.在后面讲解在可加载模块中语言的改变.

Fedora Core5(FC5)已经为未来版本采用了可加载模块的基础特征.在这本书中,我们只讨论整体策略方法及其但是在侧边栏中我们会讨论最新的可加载模块的特征.

3.3.4 构建和安装整体策略

当你阅读完这本书的剩余部分之后,你将很有可能会实验一下SELinux策略的编写.你将需要将你的修改编译进整体策略文件中,并且通过将新的策略加载到内核中来测试一下你的修改,并且在内核的访问控制强制下测试一下结果.在你做这些尝试之前,我们必须要先介绍一个构建和安装内核安全策略的基本方法.

技巧:

一定要记住,如果你要安装你的策略,内核就会基于策略中的规则立即开始强制访问.当拟正在学习SELinux和测试语言的时候,由于缺乏访问,你可能会导致程序崩溃.我们建议你在测试自己编写的策略的时候使用permissive模式(setenforce 0),直到你对策略语言以及其后果相当熟悉之后在改变模式.当然,你也可以一直以enforcing模式运行系统(setenforce 1).

下面的例子就是构建策略的一个典型的方法

这里写图片描述

从这张图片的左面开始,你有一个被分解成很多个源模块的策略文件.在后面这本书中,我们将会讨论各种各样的组织这些模块的方式.就现在来说,仅仅知道这些文件是通过脚本,宏处理器等将这些文件合并成了一个单一的策略文件policy.conf就行了,该文件是一个SELinux源策略的完整的,语法正确的描述.然后你使用checkpolicy将源策略编译成对内核合适的二进制策略文件(假设没有错误).然后load_policy程序被调用来将二进制策略文件加载到内核中,然后内核基于策略规则进行强制访问控制.

在这本书的这个地方,你可能会发现这个过程是非常让人迷惑的,特别是在我们讨论策略构建的方法而不是源模块来构建策略的时候.不要惊慌,我们仅仅是想要你对这个过程有一个整体的了解.策略源目录通常会有一个Makefile文件来为你自动构建这个过程.在策略中,我们使用的策略在part 2,如果安装成功之后应该在/ec/selinux/strict/src/policy/中,下面是一些有趣的make目标.

policy : 使得policy.conf和policy.[ver]本地测试编译和检查错误
install: ​做一切可以是策略安装到系统中的一切事情,例如在内核启动阶段加载进入内核和策略配置文件等等

load: ​做一些可以使二进制策略文件加载到内核中的事情,例如激活访问控制策略和安装file_context文件.

所以,可以安装上面图中的方式来构建策略(除了最后的安装和加载策略那一步).

目录
相关文章
|
3月前
|
安全 Linux Apache
selinux概述-状态切换
【8月更文挑战第9天】SELinux(Security Enhanced Linux)是安全模块,集成于Linux内核之上,提供了一种灵活且强制性的访问控制机制。通过MAC(强制访问控制)、RBAC(基于角色的访问控制)及TE(类型实施)等特性,增强系统的安全性,即使部分服务被攻破,也能限制损害范围,保护系统核心不受影响。SELinux支持多种运行模式,包括强制执行的enforcing模式、记录行为但允许执行的permissive模式以及完全关闭的disabled模式。
74 6
|
3月前
|
监控 安全 Linux
在Linux中,SELinux的作用是什么?如何临时和永久地更改SELinux上下文?
在Linux中,SELinux的作用是什么?如何临时和永久地更改SELinux上下文?
|
5月前
|
安全 JavaScript 数据安全/隐私保护
SELinux 安全模型——MLS
BLP 模型:于1973年被提出,是一种模拟军事安全策略的计算机访问控制模型,它是最早也是最常用的一种多级访问控制模型,主要用于保证系统信息的机密性,是第一个严格形式化的安全模型
74 3
SELinux 安全模型——MLS
|
5月前
|
监控 安全 数据安全/隐私保护
selinux的安全策略可以影响ntp的方式
selinux的安全策略可以影响ntp的方式
44 5
|
5月前
|
安全 Linux Android开发
SELinux策略语法以及示例策略
本文来讲述 SELinux 策略常用的语法,然后解读一下 SELinux 这个项目中给出的示例策略
58 2
|
6月前
|
安全 API 数据安全/隐私保护
Andorid 的SELinux策略
Andorid 的SELinux策略
57 0
|
安全 Linux 数据安全/隐私保护
18.11 SELinux的3种策略类型
对于 SELinux 来说,所选择的策略类型直接决定了使用哪种策略规则来执行主体(进程)可以访问的目标(文件或目录资源)。不仅如此,策略类型还决定需要哪些特定的安全上下文属性。通过策略类型,读者可以更精确地了解 SELinux 所实现的访问控制。
492 0
18.11 SELinux的3种策略类型
|
安全 Apache
18.12 SELinux策略规则查看的方法
我们知道,当前 SELinux 的默认策略是 targeted,那么这个策略中到底包含有多少个规则呢?使用 seinfo 命令即可查询。命令如下:
556 0
18.12 SELinux策略规则查看的方法
|
安全 Linux 数据安全/隐私保护
18.2 SELinux的主要作用
我们知道,传统的 Linux 系统安全,采用的是 DAC(自主访问控制方式),而 SELinux 是部署在 Linux 系统中的安全增强功能模块,它通过对进程和文件资源采用 MAC(强制访问控制方式)为 Linux 系统提供了改进的安全性。
178 0
18.2 SELinux的主要作用
|
安全 Apache 数据安全/隐私保护
18.6 SELinux安全上下文查看
SELinux 管理过程中,进程是否可以正确地访问文件资源,取决于它们的安全上下文。进程和文件都有自己的安全上下文,SELinux 会为进程和文件添加安全信息标签,比如 SELinux 用户、角色、类型、类别等,当运行 SELinux 后,所有这些信息都将作为访问控制的依据。
403 0
18.6 SELinux安全上下文查看