接前一篇文章:SELinux零知识学习九、SELinux策略语言之客体类别和许可(3)

一、SELinux策略语言之客体类别和许可

3. 有效的客体类别

本节对Fedora Core 4(FC4)可用的内核客体类别做一个概述,目标是描述客体类别以及系统资源是如何映射到这些客体类别的

编写一个良好的策略最困难的部分是理解客体类别和许可的语义、以及特定系统上应用程序上下文中那些语义的含义

FC 4系统有超过40个内核客体类别,它们代表了内核提供的所有资源。客体类别的数量说明了一个基本原理在SELinux中代表尽可能完整准确的内核资源。Linux涉及的范围广泛且非常复杂,这就决定了客体类别肯定也是极其多且复杂的,复杂得让人畏缩,但要取得SELinux的灵活性,完全解决Linux面临的安全挑战,这是必需的。

为了易于理解,我们将内核客体类别分解成了四种:文件相关的、网络相关的、System V IPC和杂项。

(1)与文件相关的客体类别

第一种客体类别是那些与文件及其它存储在文件系统中的资源有关的,这是大多数用户最熟悉的客体类别了,它包括了所有的与持续不变的、在磁盘上的文件系统和在内存中的文件系统,如proc和sysfs结合在一起的客体类别。

在UNIX系统中,一个底层的概念是“一切皆文件”,大多数情况下,这么说是对的,但是它隐藏了一个事实,就是并非所有的文件都是相同的。实际上,现代类UNIX系统,如Linux专门为设备、IPC以及标准的存储数据的文件设计了专用的文件。SELinux详细准确地表现了内核的视图。下表总结了与文件有关的客体类别:

  • file和dir

客体类别file和dir分别代表普通文件和目录。普通文件就是那些存储数据的文件,它们是大多数系统上最常见的客体了;目录在Linux中也是一个特定的文件,它是独一无二的,因为它们可能还包含其它客体。

  • lnk_file

客体类别lnk_file代表符号链接。大多数情况下,它非常重要,能够区别普通文件和符号链接,这样可以预防常见的攻击。恶意进程和用户可以创建符号链接,这样可能引起某个进程访问或修改本不是它们打算要访问或修改的文件。独立的lnk_file客体类别允许编写预防这些攻击类型的策略。

  • fifo_file和sock_file

客体类别fifo_file和sock_file表示用于IPC的特定文件fifo_file客体类别代表fifo文件,也叫做命名管道sock_file客体类别联合UNIX域套接字控制创建、访问等与文件有关的客体的能力

  • chr_file和blk_file

客体类别chr_file和blk_file分别表示字符设备和块设备。在Linux中,设备通常是通过在/dev/目录下的特定文件来进行访问的,这些文件通过主/次设备号表示字符和块设备。字符设备是程序以字节流形式读取或写入数据的设备,块设备是将数据以更大块进行传递的设备。

  • fd和filesystem

最后两个客体类别是文件描述符和文件系统。它们不是典型的Linux客体filesystem客体类别表示挂载的文件系统,这个客体类别控制全局操作如挂载或查询限额。例如:使用filesystem客体类别,我们可以只运行挂载支持存储安全上下文的文件系统。所有特定类型的文件系统(如ext3)在策略中都使用相同的fs_use语句获取默认的标记定义。文件描述符表示打开的与文件有关的客体,存在于进程中,即使与文件有关的客体明显不同,它们表示内核数据结构,通常认为文件描述符是文件有关的客体的基础。的确,标准Linux访问控制不能单独在文件描述符上提供访问控制,这种策略忽略了文件描述符是可以在进程之间传递的资源的事实。通常,子进程会从父进程哪里集继承文件描述符,这个继承并不总是有利的,许多Linux编程指南中都警告最好减少文件描述符继承,特别是后台进程。为了标识此问题及其它问题,我们以fd客体类别为例。在SELinux中,fd代表文件描述符,使用这个客体类别阻止文件描述符在进程间传递或继承就成为可能。值得注意的是,有权使用文件描述符并不意味着就可以访问与文件有关的客体,进程必须对这些文件也要有访问许可才行。

11-16 20:17