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


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

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

    2. 类型、属性和别名

    (3)关联类型和属性

    1)使用type语句关联类型和属性

    迄今为止,我们已经讨论了如何定义类型和属性,下面将要讲述的是如何将它们关联起来。最常见的关联方式是在用type语句声明类型时就指定其属性。例如,我们可以将声明http_user_content_t类型的语句修改为:

    type http_user_content_t, file_type;

    这个语句描述了声明类型http_user_content_t时,同时关联了file_type属性。它会自动向具有file_type属性的类型组中添加http_user_content_t类型。但从概念上讲,它实质上已经改变了http_user_content_t类型的性质,因为它现在已经具有基于属性的访问许可了,而不只局限于类型本身了。

    http_user_content_t代表了Web服务器要使用的所有文件,而属性表示可以将它们一致使用。在这个例子中,创建的属性叫做file_type,它代表所有永久存储的文件。因此,我们就可以只写一条规则来访问所有文件了,再也不用为每个文件编写一条规则了。

    一个类型可以有多个属性。例如:可以再为所有Web服务器要用的文件创建一个属性httpdcontent,拥有httpdcontent属性的类型可能是拥有file_type属性类型的一个子集。下面的代码扩展了前面的例子:

    1. type httpd_user_content_t, file_type, httpdcontent;
    2. type shadow_t, file_type;
    3. allow backup_t file_type : file read;
    4. allow httpd_t httpdcontent : file read;

    现在我们给httpd_user_content_t添加了两个属性:file_type(表明这是一个在磁盘上的文件的类型)和httpdcontent(表明这个类型Web服务器是可读的)。对于具有更多特权的shadow_t类型,我们只关联了file_type属性(因为对于一个Web服务器而言,要是能够显示shadow密码文件,并不安全)。同时,我们也使用了两条allow规则为Web服务器和备份程序授予了需要的访问权,结果就是Web服务器(httpd_t)可以访问具有httpcontent属性的文件,但不能访问其它文件,如具有shadow_t类型的文件。换句话说,备份程序(backup_t)可以访问所有具有file_type属性的文件。

    类型具有的属性数量没有限制,就和类型一样,我们可以合理定义相应的属性。

    注意:其实在实际环境中,能够定义的类型的数量也就几千个,因为数量太大时,与之关联的TE规则可能就会变得非常笨重、难以控制。因此,到目前为止看到的最复杂的策略,其中也没有超过2000个类型和属性声明。

    2)使用typeattribute语句关联类型和属性

    除了使用type语句关联类型和属性外,还可以使用typeattribute语句(关联类型和属性)。typeattribute语句允许我们在声明类型时单独关联属性,在策略中可能也就是一个单独的文件了。即在类型声明时,如果没有关联属性,则可以使用此语句进行类型和属性的关联。

    typeattribute语句完整语法如下:

    typeattribute 类型名 属性名;

    • 类型名

    添加到属性上的类型的名称,类型名必须事先使用type语句进行声明,而且这里只能出现一个类型名。

    • 属性名

    一个或多个事先声明的属性标识符,如果指出多个属性标识符,属性标识符之间用都好分隔。如:

    typeattribute bin_t file_type, exec_type;

    typeattribute语句在单个策略、基础载入模块和非基础载入模块中都是有效的,只有在条件语句中无效

    例如:将前面的示例语句

    type httpd_user_content_t, file_type, httpdcontent;

    分成两条语句进行表述

    1. # 下面是两条语句
    2. type httpd_user_content_t;
    3. typeattribute httpd_user_content_t file_type, httpdcontent;

    实际上,这两条语句的作用等同于上边那条(单个)语句。

    仅从这个例子还看不出为什么需要typeattribute语句,但阅读到后面的章节时,你会发现,使用它客体使语句变得更加清晰。从根本上上说,这个语句允许我们在一个地方定义类型,而在另一个地方关联属性,从而增强了语言的灵活性。在设计设个策略时,可以考虑进行模块化设计了。

    警告:属性是策略语言很方便的一个特性,但它也很危险。将属性和类型关联后,可能会扩大对类型的访问权。这个访问权可能是也可能不是恰当的,主要依赖于实际的安全目标。例如:将一个域类型关联上一个属性后,可能扩大了该类型的访问权,而你可能不会完全感受到。这就跟授予一个进程强大的特权类似。因此,你应该确定属性的访问权对于类型是恰当的,并注意TE规则引用属性时的影响。

  • 相关阅读:
    面试算法16:不含重复字符的最长子字符串
    OpenTiny 前端组件库正式开源啦!面向未来,为开发者而生
    Box Muller 法生成正态分布随机数
    Unity hub 无法登录问题
    k8s svc流量转发
    昇腾迁移丨4个TensorFlow模型训练案例解读
    Qt Design Studio
    Python自学笔记8:实操案例五(循环输出26个字母对应的ASCII码值,模拟用户登录,猜数游戏,计算100-999之间的水仙花数)
    HTML5+CSS3小实例:侧边导航栏
    (免费分享)基于springboot,vue高校就业管理平台(带论文)
  • 原文地址:https://blog.csdn.net/phmatthaus/article/details/134482787