当前位置:首页 > 编程笔记 > 正文
已解决

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

来自网友在路上 171871提问 提问时间:2023-11-20 15:13:33阅读次数: 71

最佳答案 问答题库718位专家为你答疑解惑

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

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

3. 访问向量规则

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

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

(1)通用AV规则语法

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

  • 规则名称

allow,dontaudit,auditallow和neverallow。

  • 源类型

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

  • 目标类型

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

  • 客体类别

客体的类别。

  • 许可

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

一个简单的AV规则有一个源类型、目标类型、客体类别和许可。在前文的allow规则中可以看到许多AV规则,如:

allow user_t bin_t : file execute;

这个allow规则的源类型为user_t、目标类型为bin_t、客体类别为file、许可为execute,这个规则可以解读为:允许user_t执行类型为bin_t的文件。

这4个AV规则语法都一样,只是关键字(规则名称)不同。例如,可以将上面这个例子替换成auditallow规则,只需要替换掉规则名称即可:

auditallow user_t bin_t : file execute

1)AV规则的密钥

在Linux内核中,所有的AV规则都是通过一个组源类型、目标类型和许可进行唯一性标识的这个三重组成为一个密钥,当作哈希表使用,缓存在策略数据结构中。当一个进程产生了一个访问请求时,SELinux LSM模块被要求允许基于这个密钥进行访问。

那么,如果不止一个规则使用同一密钥(即相同的源类型、目标类型和许可)时,会发生什么状况呢?如下面的规则:

allow user_t bin_t : file execute;
allow user_t bin_t : file read;

类型为user_t的进程对类型为bin_t的文件是可读还是可执行?答案是两者皆可。所有有相同密钥的规则通过checkpolicy进行组合,编译后的策略将只有一条规则,同时具有read和execute许可,它们都会被安全服务器接受。所有的AV都按照这种方式进行累加。

警告:策略中的每个子级AV规则与其上级AV规则具有相同的密钥,并将许可adds进最高级规则编译策略中,不存在removing授予其它角色的许可的概念。因此要当心,尽管你在策略中的某部分编写了良好的规则,但可能在策略的其它地方会授予额外的许可。

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"SELinux零知识学习二十、SELinux策略语言之类型强制(5)":http://eshow365.cn/6-40432-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!