当前位置: 首页 > article >正文

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

接前一篇文章: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.kler.cn/a/133125.html

相关文章:

  • java中volatile 类型变量提供什么保证?能使得一个非原子操作变成原子操作吗?
  • Redis在高性能缓存中的应用
  • SpringBoot(5)-SpringSecurity
  • 1、使用vscode+eide+stm32cubeMx开发stm32
  • 安装paddle
  • 无插件H5播放器EasyPlayer.js网页web无插件播放器选择全屏时,视频区域并没有全屏问题的解决方案
  • ubuntu 无法获得锁的解决
  • 读像火箭科学家一样思考笔记02_与不确定性共舞(下)
  • 【微软技术栈】C#.NET 中的管道操作
  • 2311rust,到46版本更新
  • IOS object-c大屏图表 PNChart 折线图 曲线图
  • vue2项目修改编译巨慢
  • UiPath Studio 2023.10 Crack
  • Dart笔记:glob 文件系统遍历
  • C# params关键字
  • Linux yum 使用时提示 获取 GPG 密钥失败Couldn‘t open file RPM-GPG-KEY-EPEL-7
  • uniapp优化h5项目-摇树优化,gzip压缩和删除console.log
  • 点云从入门到精通技术详解100篇-基于点云数据的机器人装焊 过程在线测量
  • ThreadLocal优化
  • DM8共享集群DSC初始化DB实例报错
  • FreeRTOS中的内存分配策略
  • WPF xaml Command用法介绍
  • OpenAI发布会中不起眼的重大更新
  • 传输层——TCP协议
  • 【Python入门五】第三方库(包)介绍
  • 数据库课后习题加真题