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


    接前一篇文章: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模块被要求允许基于这个密钥进行访问。

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

    1. allow user_t bin_t : file execute;
    2. allow user_t bin_t : file read;

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

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

  • 相关阅读:
    Pytorch ddp切换forward函数 验证ddp是否生效
    行业洞察 | 未来人形机器可能是最懂你的人
    一文带你了解MySQL之optimizer trace神器的功效
    阶段六-Day03-MyBatis1
    2022年4月最新面经答案总结(Java基础、数据库、JVM、计网、计操、集合、多线程、Spring)持续更新
    java计算机毕业设计基于springboo+vue的校园二手闲置物品租售平台管理系统
    vmstat-内存性能分析常用命令
    intelliJ IDEA2022控制台中文输出乱码的问题
    jmeter中beanshell的用法小结
    池化层的实现
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/134499049