序言本书是基于我们多年在SELinux上工作、开发以及帮助推进安全增强的Linux(SELinux)的经验写成的。我们也创建了关于SELinux的技术资源,在我们多年的教学经历中,我们发现要对新的听众完整介绍新的和国外关于计算机安全的思想时,显得非常困难。在这本书中,我们认为在概念叙述和具体实际演练之间达到了很好的平衡。本书的另一个挑战是SELinux是一门新技术;尽管它已经被集成到主流的Linux发行版中,但它仍然在不断发展。我们和其他SELinux开发者正在进行许多创新的研究和项目开发,以多种方式提高SELinux。在这本书中,我们面临描述一个活的目标的挑战。幸运的是,SELinux的核心概念已经明确地建立起来了,至少安全增强的核心部分是以易管理的步子在迈进。读者群本书主要是为那些需要使用安全增强的Linux(SELinux)的人准备的,他们主要对理解、编写、修改和/或管理SELinux策略感兴趣。如果你想使用SELinux增强你的应用程序、系统和网络的安全,那么你就是本书的合适读者了。为了有效使用这本书,你应该对Linux/Unix非常了解,并且非常熟悉与Linux内核和关键服务交互工作,这有助于你快速理解SELinux使用的安全对象模型。不过,只要你对Linux、它的标准、文件系统布局以及它的编程风范了解深刻,读懂本书的内容应该没什么问题。包含了SELinux的系统(如RedHatEnterpriseLinux,FedoraCore,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策略的方法,它提供了所有样例策略的特性。最近发布的FedoraCore5就是使用参考策略作为它的策略基础的。第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)或你输入的内容或你在电脑显示屏上看到的内容使用固定宽度的字体。对于显示命令及其输出的长清单,我们使用Bourneshell标准提示符#(rootshell)和$(普通用户shell)。用户输入使用粗体加固定宽度字体。例如:#ls-lZ/etc/selinux/-rw-r--r--rootrootsystem_u:object_r:selinux_config_tconfigdrwxr-xr-xrootrootsystem_u:object_r:selinux_config_tstrictdrwxr-xr-xrootrootsystem_u:object_r:selinux_config_ttargeted谈论到库函数或系统调用时,我们约定使用一对空括号,如execve(),对策略带有参数的宏也使用这个约定,如domain_auto_trans()。当参考Linux命令或函数的帮助手册时,对命令或函数使用斜体字,并用括弧将手册小节括起来。如make(1),execve(2)。从哪里获取SELinuxSELinux在多个Linux发行版中受到支持,包括RedHatEnterpriseLinux,RedHatFedoraCore,Gentoo和Debian。FedoraCore已经成为SELinux社区测试和集成大部分创新技术的主要平台。RedHatEnterpriseLinux版本4(RHEL4)是第一个完全支持SELinux的大型商业发行版。我们在本书中描述的所有内容都与RHEL4和其他发行版有关。我们选择FedoraCore4(FC4)作为本书的基础,它是RHEL4之后释放出来的一个FedoraCore版本。我们描述的所有内容都可以在FC4系统上重现。在我们花了八个月编写此书期间,FC4在不断发展、测试、发布。当我们写完此书时FedoraCore5(FC5)刚刚发布。FC5集成了许多SELinux新的特性,FC5的特性可能暗示了RHEL5将会更新的内容。实际上,我们在本书中标注了FC4中没有FC5中的新特性和功能。同样,我们也标注了FC4中有但RHEL4中没有的特性。如果你是一个企业用户或开发人员,你很可能正在使用RHEL4或计划使用RHEL5。目前我们使用RHEL4开发我们的企业应用产品。如果你是一名SELinux的开发人员或早期使用者,你可能正在使用某FedoraCore版本或某些其他发行版。无论你是哪种情况,本书都将会向你提供大量的关于如何使用SELinux和开发SELinux策略的信息。如何取得本书中的样例策略贯穿本书,我们给出了大量的SELinux策略样例。这些样例基于RedHat发布FedoraCore4附带的strict策略。我们在第11章详细地介绍了这个策略。FC4默认使用的是target策略,而不是strict策略,因此你必须用更多的步骤来获得我们样例使用的基础策略。在第三部分中,我们扩大了视野,涵盖了其他类型的策略。在附录A中,我们提供了如何获得本书使用到的样例策略源文件的说明。目录第一部分:SELinux摘要1第1章.背景11.1.软件失效的必然性11.2.操作系统访问控制安全的进展21.2.1.引用监视程序原理21.2.2.任意访问控制的问题31.2.3.强制访问控制的起源31.2.4.更好的强制访问控制41.2.5.SELinux的发展51.3.小结6练习6第2章:概念12.1.类型强制的安全上下文12.1.1.对比SELinux和标准Linux22.1.2.安全上下文22.2.类型强制访问控制32.2.1.类型强制示例42.2.2.域转变