logo资料库

seLinux详解.docx

第1页 / 共247页
第2页 / 共247页
第3页 / 共247页
第4页 / 共247页
第5页 / 共247页
第6页 / 共247页
第7页 / 共247页
第8页 / 共247页
资料共247页,剩余部分请下载后查看
序言 本书是基于我们多年在 SELinux 上工作、开发以及帮助推进安全增强的 Linux(SELinux) 的经验写成的。我们也创建了关于 SELinux 的技术资源,在我们多年的教学经历中,我们发 现要对新的听众完整介绍新的和国外关于计算机安全的思想时,显得非常困难。在这本书中, 我们认为在概念叙述和具体实际演练之间达到了很好的平衡。 本书的另一个挑战是 SELinux 是一门新技术;尽管它已经被集成到主流的 Linux 发行版 中,但它仍然在不断发展。我们和其他 SELinux 开发者正在进行许多创新的研究和项目开发, 以多种方式提高 SELinux。在这本书中,我们面临描述一个活的目标的挑战。幸运的是, SELinux 的核心概念已经明确地建立起来了,至少安全增强的核心部分是以易管理的步子在 迈进。 读者群 本书主要是为那些需要使用安全增强的 Linux(SELinux)的人准备的,他们主要对理 解、编写、修改和/或管理 SELinux 策略感兴趣。如果你想使用 SELinux 增强你的应用程序、 系统和网络的安全,那么你就是本书的合适读者了。 为了有效使用这本书,你应该对 Linux/Unix 非常了解,并且非常熟悉与 Linux 内核和 关键服务交互工作,这有助于你快速理解 SELinux 使用的安全对象模型。不过,只要你对 Linux、它的标准、文件系统布局以及它的编程风范了解深刻,读懂本书的内容应该没什么 问题。 包含了 SELinux 的系统(如 Red Hat Enterprise Linux,Fedora Core,Gentoo 和 Debian) 中的用户也会发现本书非常有用。尽管大部分用户和系统管理员都不大可能编写 SELinux 策略,但理解 SELinux 策略语言和安全模型将会使你更深入地认识到 SELinux 在给予你安全 方面的强大功能。 你将会学到什么 这本书主要描写如何编写 SELinux 安全策略,有效使用 SELinux 给 Linux 带去安全增强。 听起来很简单,但实际上,在你能够帮助你理解如何有效使用这些增强之前,你不得不学习 新的思想和理解 SELinux 策略语言。 围绕你的学习步骤,我们将本书划分为三部分,具体如下: 第一部分 强制访问控制概述 类型增强概念和应用程序
SELinux 架构和机制 第二部分 SELinux 自然策略语言语法和语义详解 SELinux 中的对象标记 第三部分 两个主要的创建 SELinux 策略的开发方法:样例策略和引用策略 SELinux 对系统管理的影响 如何为 SELinux 编写策略模块 我们的目标是帮助你理解包括在 SELinux 中的详细信息,以便你有能力创建安全的系统。 为了引出 SELinux 的新特性,我们必须向你提供初级策略语言的详细内容。不过,请记住正 在进行的许多工作将会使构建安全系统变得非常容易,而且不需要知道所有的初级知识。我 们将在合适的地方描述这项正在进行的工作,帮助你理解如何编写能够通过独立审查的安全 策略。 每章都以该章描述的关键点摘要回顾和加深对这些关键点理解的练习收尾,从实验练习 思想到实际练习,再到修改真实的安全策略。这一切将会帮助你加深对 SELinux 的理解。 章节摘要 我们将本书划分为三部分,每部分又包括多个章节: 第一部分:"SELinux 概述"。这部分描述了 SELinux 发展的背景,以及它的安全概念和 架构。 第 1 章:"背景"。在这一章中,我们描述了操作系统访问控制的发展历史,访问控制机 制的种类,以及 SELinux 带给 Linux 的访问控制种类。 第 2 章:"概念"。在这一章中,我们以详细教程的方式对 SELinux 安全机制的概念进行 了概述。对 SELinux 带给 Linux 的安全增强做了简单明了的描述。 第 3 章:"架构"。在这一章中,我们概述了 SELinux 的架构和实现,以及策略语言。 第二部分:"SELinux 策略语言"。这部分包括了对 SELinux 策略语言语法和语义详细的 描述。每章代表语言的一部分。本书的这一部分可以当作策略语言的参考。 第 4 章:"对象类和许可"。在这一章中,我们描述了 SELinux 如何使用对象类和给对象 类定义的细粒度许可控制内核资源。
第 5 章:"类型增强策略"。在这一章中,我们描述了所有核心策略语言规则和编写类型 增强策略的指令。类型增强是 SELinux 最重要的访问控制特性。 第 6 章:"角色和用户"。在这一章中,我们描述了 SELinux 基于角色的访问控制机制, 以及策略语言中的角色和用户如何支持类型增强策略。 第 7 章:"约束"。在这一章中,我们描述了 SELinux 策略语言的约束特性,即在支持强 制策略类型的策略内提供约束。 第 8 章:"多级安全"。在这一章中,我们描述了除核心强制访问控制之外的,允许非强 制的多级安全访问控制的策略语言特性。 第 9 章:"条件策略"。在这一章中,我们描述了策略语言的增强,使我们可以在类型增 强策略中应用布尔表达式,布尔表达式的值在生产系统上,在运行过程中可以被改变。 第 10 章:"对象标记"。在这一章中,我们结束了对策略语言的描述,同时描述了如何 标记对象,以及如何在 SELinux 增强的访问控制支持下管理那些标记。 第三部分:"创建和编写 SELinux 安全策略"。在这最后一部分中,我们向你展示如何使 用策略语言,同时描写了建立安全策略的方法,以及如何管理一个 SELinux 系统和调试 SELinux 策略模块。 第 11 章:"最早的样例策略"。在这一章中,我们描述了样例策略,它是一个创建 SELinux 策略的方法(源文件,构建工具和示范等),自从美国国家安全局(NSA)释放出最初的样 例策略以来,已经经过多年的发展和改进。 第 12 章:"参考策略"。在这一章中,我们描述了一个新的创建 SELinux 策略的方法, 它提供了所有样例策略的特性。最近发布的 Fedora Core 5 就是使用参考策略作为它的策略 基础的。 第 13 章:"管理 SELinux 系统"。在这一章中,我们描述了 SELinux 如何影响 Linux 系 统的管理的。 第 14 章:"编写策略模块"。在这最后一章中,我们利用在本书中学到的所有知识总结 成一个向导式的指南,指导如何为样例策略和参考策略编写策略模块。 附录。本书结尾包括了几个附加的参考资料的附录: 附录 A:"获取 SELinux 样例策略"。提供了关于如何获取本书中描述过的样例策略源文 件的说明。 附录 B:"参与和额外信息"。列出了关于 SELinux 的额外信息源,以及如何参与 SELinux 的开发。
附录 C:"对象类参考"。提供了一个详细的关于 SELinux 内核对象类和关联的许可的字 典。 附录 D:"SELinux 命令和实用程序"。提供了一些实用程序和第三方工具,帮助开发 SELinux 策略和管理 SELinux 系统。 如何使用这本书 很少有人翻来覆去地阅读一本技术书籍。大多数人都只想理解某个特定的知识点或开始 探索一下新技术。尽管反复阅读确实是可取的,这里我们也给出一种备选的方法。 透彻阅读并理解第一部分的内容(第 1-3 章)。这一部分提供了必要的背景知识和概念, 对深入理解 SELinux 是很有帮助的。特别要仔细阅读和理解第 2 章。你可能想撇去第二部分 (第 4-10 章)的内容,这一部分主要讲解了 SELinux 策略语言。对大多数人而言,这一部 分的内容确实显得太深入了,特别是对于初次接触 SELinux 的人更是如此。因此,你可以跳 过第 4 章和第 10 章,但要仔细阅读第 5 章。这些章节覆盖了几乎所有 SELinux 策略语言元 素,在编写策略时就会使用到。最后,阅读第三部分的所有章节(第 11-14 章),描述了你 感兴趣的问题。阅读这些章节时使用第二部分作参考。 侧边栏,注意,警告和提示 贯穿本书,我们广泛使用了侧边栏和注解以提供附加的信息或强调某个项目,也包括了 大量的警告和提示。下面是它们在本书中的约定。 侧边栏:我们使用侧边栏主要出于两个目的。首先,使用它描述在章节主体内容中没有 直接涉及到附加信息。例如:我们使用侧边栏列出不同 SELinux 版本之间的差异或深入描述 读者感兴趣的某个特定的概念。在第二部分中,我们使用侧边栏来描述所有 SELinux 策略语 言语句的完整语法。这些语法侧边栏为大量策略语言元素提供了快速参考。 注意:我们使用注意为某个特定知识点提供了附加的强调。通常注意是非常短的附加说 明。 警告:警告与注意的使用类似,只是它更着重强调或指出需要额外小心。 提示:为如何执行一个给定的功能提供快速提示和建议,或使某事变得容易的技巧。 排版约定 所有技术书籍都必须使用某种排版约定,以便于与读者更好地沟通。我们使用斜体字表 示定义概念时的一个关键概念(通常是首次使用时定义),同时也使用斜体字表示强调。对 于着重强调的地方,我们使用粗体字。
对所有 SELinux 策略语言元素(allow),用户命令(ps,ls)或你输入的内容或你在 电脑显示屏上看到的内容使用固定宽度的字体。 对于显示命令及其输出的长清单,我们使用 Bourne shell 标准提示符#(root shell) 和$(普通用户 shell)。用户输入使用粗体加固定宽度字体。例如: system_u:object_r:selinux_config_t system_u:object_r:selinux_config_t # ls -lZ /etc/selinux/ -rw-r--r-- root root config drwxr-xr-x root root strict drwxr-xr-x root root targeted system_u:object_r:selinux_config_t 谈论到库函数或系统调用时,我们约定使用一对空括号,如 execve(),对策略带有参 数的宏也使用这个约定,如 domain_auto_trans()。当参考 Linux 命令或函数的帮助手册时, 对命令或函数使用斜体字,并用括弧将手册小节括起来。如 make(1),execve(2)。 从哪里获取 SELinux SELinux 在多个 Linux 发行版中受到支持,包括 Red Hat Enterprise Linux,Red Hat Fedora Core,Gentoo 和 Debian。Fedora Core 已经成为 SELinux 社区测试和集成大部分创 新技术的主要平台。Red Hat Enterprise Linux 版本 4(RHEL4)是第一个完全支持 SELinux 的大型商业发行版。我们在本书中描述的所有内容都与 RHEL4 和其他发行版有关。 我们选择 Fedora Core 4(FC4)作为本书的基础,它是 RHEL4 之后释放出来的一个 Fedora Core 版本。我们描述的所有内容都可以在 FC4 系统上重现。在我们花了八个月编写此书期 间,FC4 在不断发展、测试、发布。当我们写完此书时 Fedora Core 5(FC5)刚刚发布。FC5 集成了许多 SELinux 新的特性,FC5 的特性可能暗示了 RHEL5 将会更新的内容。实际上,我 们在本书中标注了 FC4 中没有 FC5 中的新特性和功能。同样,我们也标注了 FC4 中有但 RHEL4 中没有的特性。 如果你是一个企业用户或开发人员,你很可能正在使用 RHEL4 或计划使用 RHEL5。目前 我们使用 RHEL4 开发我们的企业应用产品。如果你是一名 SELinux 的开发人员或早期使用者, 你可能正在使用某 Fedora Core 版本或某些其他发行版。无论你是哪种情况,本书都将会向 你提供大量的关于如何使用 SELinux 和开发 SELinux 策略的信息。 如何取得本书中的样例策略
贯穿本书,我们给出了大量的 SELinux 策略样例。这些样例基于 Red Hat 发布 Fedora Core 4 附带的 strict 策略。我们在第 11 章详细地介绍了这个策略。FC4 默认使用的是 target 策略,而不是 strict 策略,因此你必须用更多的步骤来获得我们样例使用的基础策略。在 第三部分中,我们扩大了视野,涵盖了其他类型的策略。在附录 A 中,我们提供了如何获得 本书使用到的样例策略源文件的说明。 目录 第一部分:SELinux 摘要 1 第 1 章. 背景 1 1.1.软件失效的必然性 1 1.2.操作系统访问控制安全的进展 2 1.2.1.引用监视程序原理 2 1.2.2.任意访问控制的问题 3 1.2.3.强制访问控制的起源 3 1.2.4.更好的强制访问控制 4 1.2.5.SELinux 的发展 5 1.3.小结 6 练习 6 第 2 章:概念 1 2.1.类型强制的安全上下文 1 2.1.1.对比 SELinux 和标准 Linux 2 2.1.2.安全上下文 2 2.2.类型强制访问控制 3 2.2.1.类型强制示例 4 2.2.2.域转变的问题 5 2.2.3.标准 Linux 安全中的 setuid 程序 6 2.2.4.域转变 7 2.2.5.默认域转变:type_transition 指令 9 2.3.角色 9 2.4.SELinux 中的多层安全 10 2.5.精通 SELinux 特性 11 2.5.1.重游 passwd 示例 12 2.5.2 精读策略文件 12 2.6.小结 13 练习 14 第 3 章.架构 1
3.1.内核架构 1 3.1.1.LSM 框架 1 3.1.2.SELinux LSM 模块 2 3.2.用户空间客体管理器 4 3.2.1.用户空间客体管理器的内核支持 4 3.2.2.策略服务器架构 5 3.3.SELinux 策略语言 6 3.3.1.本地 SELinux 策略语言编译器 6 3.3.2.单个策略中的源策略模块 8 3.3.3.载入式策略模块 8 3.3.4.构建和安装单策略 8 3.4.小结 10 练习 10 第二部分:SELinux 策略语言 1 第 4 章.客体类别和许可 1 4.1.SELinux 中客体类别的用途 1 4.2.在 SELinux 策略中定义客体类别 2 4.2.1.声明客体类别 2 4.2.2.声明并连接客体类别许可 3 4.3.有效的客体类别 5 4.3.1.与文件相关的客体类别 5 4.3.2.与网络有关的客体类别 7 4.3.3.system V IPC 客体类别 8 4.3.4.其它杂类客体类别 8 4.4.客体类别许可示例 9 4.4.1.文件客体类别许可 9 4.4.2.进程客体类别许可 11 4.5.使用 Apol 研究客体类别 14 4.6.小结 16 练习 16 第 5 章-类型强制 1 5.1.类型强制 1 5.2.类型、属性和别名 2 5.2.1.类型声明 2 5.2.2.类型和属性 3
5.2.3.关联类型和属性 4 5.2.4.别名 5 5.3.访问向量规则 6 5.3.1.通用 AV 规则语法 7 5.3.2.允许(allow)规则 11 5.3.3 审核(audit)规则 11 5.3.4.neverallow 规则 13 5.4.类型规则 14 5.4.1.通用类型规则语法 15 5.4.2.类型转换规则 16 5.4.3.类型改变规则 18 5.5.用 Apol 研究类型强制规则 19 5.6.小结 21 练习 22 第 6 章.角色和用户 1 6.1.SELinux 中基于角色的访问控制 1 6.1.1.SELinux 中 RBAC 概述 2 6.1.2.用角色管理用户权限 3 6.1.3.客体安全上下文中的用户和角色 4 6.2.角色和角色语句 4 6.2.1.角色声明语句 4 6.2.2.角色 allow 规则 5 6.2.3.角色转换规则 5 6.2.4.角色控制语句 6 6.3.用户和用户语句 7 6.3.1.声明用户及其关联的角色 7 6.3.2.将 Linux 用户映射到 SELinux 用户 8 6.4.用 Apol 分析角色和用户 8 6.5.小结 10 练习 11 第 7 章.约束 1 7.1.近距离查看访问决定算法 1 7.2.约束语句 2 7.3.标记转换约束 5 7.4.小结 8
分享到:
收藏