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

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

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

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

3. 访问向量规则

AV规则就是按照对客体类别的访问许可指定具体含义的规则,SELinux策略语言目前支持四类AV规则:

  • allow:表示允许主体对客体执行允许的操作。
  • neverallow:表示不允许主体对客体执行指定的操作。
  • auditallow:表示允许操作并记录访问决策信息。
  • dontaudit:表示不记录违反规则的决策信息,且违反规则不影响运行。

(1)通用AV规则语法

虽然这些规则的用途不一样,但它们的基本语法是一样的,每个规则都包含了下面5个元素:

  • 规则名称

allow,dontaudit,auditallow和neverallow。

  • 源类型

授予访问的类型,通常是进程尝试访问的域类型。

  • 目标类型

客体的类型,其被授权可以访问源类型。

  • 客体类别

客体的类别。

  • 许可

表示主体对客体访问时允许的操作类型(也叫做访问向量)。

3)使用AV规则中的多类型和属性

在AV规则中的源和目标区域,都没有限制类型和属性的数量,相反,可以在源和目标字段处列出多个类型和属性。如果有多个类型或属性时,它们之间是用空格进行分隔,并使用大括号将它们括起来,如:

allow user_t { bin_t sbin_t } : file execute;

在这个规则中,目标是bin_t和sbin_t,在源和目标区域有多个类型或属性时,展开方法同单个属性一样。在前面的例子中,内核包括两个密钥,每个目标类型都有一个。

还可以在源或目标区域混合类型的属性,也可以在这两个位置都使用混合的形式。如:

allow {user_t domain} {bin_t file_type sbin_t} : file execute;

如果明确地列出了类型以及类型具有的属性,这是可以的。既然这样,我们实际上列出了两次类型,内核会自动处理这个冗余,只会处理一个实例规则。

4)特殊类型self

策略语言保留了一个关键字self,其用于AV规则中的目标区域,可以当做一个类型使用。如下面这两条规则是等价的:

# 这两条规则是相等的
allow user_t user_t : process signal;
allow user_t self : process signal;

关键字self说明目标类型使用源类型自身,即目标类型等于源类型。前面的例子中,第二条规则只是用关键字创建了一条规则,表明源类型和目标类型都是user_t。

下面来看一个稍微复杂一点的例子:

allow { user_t staff_t } self : process signal;

在这个例子中,实际上创建了两条规则,每条规则的源类型和目标类型都是相同的,完全等同于下面这两条规则:

allow user_t user_t : process signal;
allow staff_t staff_t : process signal;

注意在使用self时,每个类型都创建了等同的规则。需要指出的是user_t不能访问staff_t,反之亦然。

注意:你可能只会在AV规则的目标区域使用特殊类型self,特别要注意的是不能在AV规则的源区域使用self类型。另外,也不能声明一个类型或属性标识符叫做self

当AV规则的源类型为属性或一大串类型时,self作为目标类型显得非常有用。例如:假设我们想让每一个域都可以向自己发送信号,那么可以编写如下规则:

allow domain domain : process signal; # 这不是我们真正想要的

尽管这条规则实现了预期的目标(每个域都可以向它自己发送信号),但也将允许每个域类型向其它域类型发送信号,这个非预期的结果可能成为一个安全灾难。通过self关键字,可以确保每个域类型都只能访问它自身,如:

allow domain self : process signal; # 这才是我们真正想要的

http://www.lryc.cn/news/239206.html

相关文章:

  • cadence layout lvs时出现error
  • python练习题(markdown中的60道题)
  • 【JavaSE】-4-单层循环结构
  • 12、人工智能、机器学习、深度学习的关系
  • webpack external 详解
  • 代码混淆不再愁:一篇掌握核心技巧
  • 华为云IoT与OpenHarmony深度协同,加速设备上鸿即上云【云驻共创】
  • 深入浅出 Linux 中的 ARM IOMMU SMMU I
  • 关于sqlModel 实现查询表单入参空值和模糊匹配一次性查询
  • 数据仓库架构之详解Kappa和Lambda
  • Banana Pi BPI-R3 Mini 开源路由器,也能拍出艺术美感
  • Django高级之-分页器
  • Vue-报错No “exports“ main defined in xx
  • EL-input添加双击或者单击事件
  • OpenCV快速入门:绘制图形、图像金字塔和感兴趣区域
  • Three.js相机模拟
  • Verilog基础:仿真时x信号的产生和x信号对于各运算符的特性
  • 穿越数据的迷宫-数据管理知识介绍
  • 3
  • 【python学习】基础篇-常用模块-multiprocessing模块:多进程
  • JAVA SQL
  • [Linux] 进程入门
  • 深入解析数据结构与算法之堆
  • 信息化项目质量保证措施
  • es的优势
  • sonar对webgoat进行静态扫描
  • opencv-重点知识
  • 上海亚商投顾:北证50指数大涨 机器人概念股掀涨停潮
  • 2.4G无线收发芯片 XL2400P使用手册
  • ZC序列理论学习及仿真