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


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

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

    3. 访问向量规则

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

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

    1)通用AV规则语法

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

    • 规则名称

    allow,dontaudit,auditallow和neverallow。

    • 源类型

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

    • 目标类型

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

    • 客体类别

    客体的类别。

    • 许可

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

    5)“非”特殊操作符

    AV规则中最后一个类型语法是类型否定,它可以从一个类型列表中将某个类型移除,也可以用于在一个属性中移除某个类型。这通过在要移除的类型名称前面放一个非操作符(-)实现。例如:想让所有的域类型都可以访问所有属性为exec_type的文件,除了sbin_t类型以外,那么编写规则时就可以这样:

    allow domain { exec_type -sbin_t } : file execute;

    这个规则在展开时就好像属性exec_type没有包括类型sbin_t一样。

    类型否定不依赖于顺序,即使要排除的类型位于属性列表的前面。例如下面的语句在语义上与前面的例子是等同的:

    allow domain { -sbin_t exec_type } : file execute;

    6)在AV规则中指定客体类别和许可

    AV规则也可以包括客体类别和许可列表。语法和类型一致,使用空格进行分隔,并用大括号括起来。如:

    allow user_t bin_t : { file dir } { read getattr };

    这条规则将产生两个密钥,每个客体类别一个,这条规则等同于下面这两条规则:

    1. allow user_t bin_t : file { read getattr };
    2. allow user_t bin_t : dir { read getattr };

    注意客体类别被展开了,但每条规则都有相同的许可列表,这意味着列表中的所有许可对所有客体类别都是有效的。有时不得不创建两个有相同的源和目标类型、但客体类别不一样的规则,因为许可列表不是每个类别都有效的。例如:如果查看一下file和dir客体类别的许可,你会发现他们大多数都是相同的,但也有部分是不同的(许可对两者都有效说明是使用了通用许可的结果)。

    例如:假设我们想编写一条规则允许对这两个客体类别都能够“read”,下面的规则就是无效得了

    1. # 无效的规则,因为search对于客体类别file是无效的
    2. allow user_t bin_t : { file dir } { read getattr search };

    即使read和getattr对于file和dir客体类别都是通用许可,但search许可只对dir客体类别有效,因为给file类别提供一个无效的许可seatrch,checkpolicy不能为其创建密钥,在编译策略时就会报错。唯一的解决方法就是创建两条规则,如:

    1. # 当许可对两个客体类别不是都有效时,需要两条规则
    2. allow user_t bin_t : file { read getattr };
    3. allow user_t bin_t : dir { read getattr search };

  • 相关阅读:
    这几个Python装逼神器一定要收藏好
    Speedoffice(word)如何调整文档中形状的轮廓颜色
    计算机网络的标准化工作及相关组织
    Sql解析转换之JSqlParse完整介绍
    window 系统里 chrome 浏览器一些实用的调试技巧
    Facebook广告被暂停是什么原因?Facebook广告账号被封怎么办?
    微服务实战 02 Sentinel 入门
    【代码随想录算法训练营】第49天 | 第九章 动态规划(十)+ 复习第20天 第六章 二叉树(五)
    工控设备加密意义分析
    【Java基础】数组动态、静态初始化、元素访问及内存分配
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/134535289