• 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 };

  • 相关阅读:
    深度学习之基于Yolov5闯红灯及红绿灯检测系统
    转介绍录入问题
    初级篇—第三章多表查询
    Java并发编程之多线程实现方法
    【QT+JS】QT和JS 中的正则表达式 、QT跑JS语言
    智能运维应用之道,告别企业数字化转型危机
    Windows下载安装RabbitMQ客户端(2024最新篇)
    SaaSBase:什么是嘉驰国际?
    Unity的IPostprocessBuildWithReport:深入解析与实用案例
    关系型数据库的问题和NoSQL数据库的应用
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/134535289