SELinux零知识学习十八、SELinux策略语言之类型强制(3)

news/2025/2/14 7:56:54/

接前一篇文章:SELinux零知识学习十七、SELinux策略语言之类型强制(2)

二、SELinux策略语言之类型强制

2. 类型、属性和别名

(3)关联类型和属性

1)使用type语句关联类型和属性

迄今为止,我们已经讨论了如何定义类型和属性,下面将要讲述的是如何将它们关联起来。最常见的关联方式是在用type语句声明类型时就指定其属性。例如,我们可以将声明http_user_content_t类型的语句修改为:

type http_user_content_t, file_type;

这个语句描述了声明类型http_user_content_t时,同时关联了file_type属性。它会自动向具有file_type属性的类型组中添加http_user_content_t类型。但从概念上讲,它实质上已经改变了http_user_content_t类型的性质,因为它现在已经具有基于属性的访问许可了,而不只局限于类型本身了。

http_user_content_t代表了Web服务器要使用的所有文件,而属性表示可以将它们一致使用。在这个例子中,创建的属性叫做file_type,它代表所有永久存储的文件。因此,我们就可以只写一条规则来访问所有文件了,再也不用为每个文件编写一条规则了。

一个类型可以有多个属性。例如:可以再为所有Web服务器要用的文件创建一个属性httpdcontent,拥有httpdcontent属性的类型可能是拥有file_type属性类型的一个子集。下面的代码扩展了前面的例子:

type httpd_user_content_t, file_type, httpdcontent;
type shadow_t, file_type;allow backup_t file_type : file read;
allow httpd_t httpdcontent : file read;

现在我们给httpd_user_content_t添加了两个属性:file_type(表明这是一个在磁盘上的文件的类型)和httpdcontent(表明这个类型Web服务器是可读的)。对于具有更多特权的shadow_t类型,我们只关联了file_type属性(因为对于一个Web服务器而言,要是能够显示shadow密码文件,并不安全)。同时,我们也使用了两条allow规则为Web服务器和备份程序授予了需要的访问权,结果就是Web服务器(httpd_t)可以访问具有httpcontent属性的文件,但不能访问其它文件,如具有shadow_t类型的文件。换句话说,备份程序(backup_t)可以访问所有具有file_type属性的文件。

类型具有的属性数量没有限制,就和类型一样,我们可以合理定义相应的属性。

注意:其实在实际环境中,能够定义的类型的数量也就几千个,因为数量太大时,与之关联的TE规则可能就会变得非常笨重、难以控制。因此,到目前为止看到的最复杂的策略,其中也没有超过2000个类型和属性声明。

2)使用typeattribute语句关联类型和属性

除了使用type语句关联类型和属性外,还可以使用typeattribute语句(关联类型和属性)。typeattribute语句允许我们在声明类型时单独关联属性,在策略中可能也就是一个单独的文件了。即在类型声明时,如果没有关联属性,则可以使用此语句进行类型和属性的关联。

typeattribute语句完整语法如下:

typeattribute 类型名 属性名;

  • 类型名

添加到属性上的类型的名称,类型名必须事先使用type语句进行声明,而且这里只能出现一个类型名。

  • 属性名

一个或多个事先声明的属性标识符,如果指出多个属性标识符,属性标识符之间用都好分隔。如:

typeattribute bin_t file_type, exec_type;

typeattribute语句在单个策略、基础载入模块和非基础载入模块中都是有效的,只有在条件语句中无效

例如:将前面的示例语句

type httpd_user_content_t, file_type, httpdcontent;

分成两条语句进行表述

# 下面是两条语句
type httpd_user_content_t;
typeattribute httpd_user_content_t file_type, httpdcontent;

实际上,这两条语句的作用等同于上边那条(单个)语句。

仅从这个例子还看不出为什么需要typeattribute语句,但阅读到后面的章节时,你会发现,使用它客体使语句变得更加清晰。从根本上上说,这个语句允许我们在一个地方定义类型,而在另一个地方关联属性,从而增强了语言的灵活性。在设计设个策略时,可以考虑进行模块化设计了。

警告:属性是策略语言很方便的一个特性,但它也很危险。将属性和类型关联后,可能会扩大对类型的访问权。这个访问权可能是也可能不是恰当的,主要依赖于实际的安全目标。例如:将一个域类型关联上一个属性后,可能扩大了该类型的访问权,而你可能不会完全感受到。这就跟授予一个进程强大的特权类似。因此,你应该确定属性的访问权对于类型是恰当的,并注意TE规则引用属性时的影响。


http://www.ppmy.cn/news/1226757.html

相关文章

快速入门ESP32——开发环境配置PlatformIO IDE

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 一、下载安装二、验证 一、下载安装 下载安装 vscode 安装PlatformIO插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup cod…

StoneDB顺利通过中科院软件所 2023 开源之夏 结项审核

近日,中科院软件所-开源软件供应链点亮计划-开源之夏2023的结项名单正式出炉,经过三个月的项目开发和一个多月的严格审核,共产生 418个成功结项项目!其中,StoneDB 作为本次参与开源社区,社区入选的两个项目…

Linux使用ifconifg命令,没有显示ens33

Linux使用ifconifg命令,没有显示ens33 1.问题2.步骤2.1 查看虚拟机的组件是否启动了2.2 修改网络配置文件 ONBOOT修改为yes2.3 重启网络2.4 修改网络服务配置 3.解决 1.问题 打开虚拟机准备使用xshell连接时发现连接失败,在机器上查看ip发现ens33不现实…

AI Navigation导航系统_unity基础开发教程

AI Navigation导航系统 安装插件烘焙导航系统障碍物创建人物的AI导航动态障碍物 在unity编辑器中,有一个灰常好用的插件:Navigation。有了它1,你就可以实现人物自动走到你鼠标点击的位置,而且还会自动避开障碍物,下面就…

4、FFmpeg命令行操作9

FFmpeg命令提取音视频数据 保留封装格式 ffmpeg -i test.mp4 -acodec copy -vn audio.mp4 ffmpeg -i test.mp4 -vcodec copy -an video.mp4 提取视频 保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264 强制格式:ffmpeg -i…

c++23中的新功能之十九继承的CTAD

一、继承 在c编程中,一定是脱离不开继承的。而继承中有很多小的细节需要关注,比如如何显示的使用父类的构造函数?如何通过构造函数来推导模板参数等等。这些小的细节,其实都是在实际应用中对一些相关技术的不断完善。 二、继承的…

使用Lychee搭建个人图片存储系统并进行远程访问设置实现公网访问本地私人图床

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站,可以看做是云存储的一部分,既可…