Fido (dog:random1)如果尝试吃掉cat_chow:food,则会被类型强制所拒绝。 Fido (dog:random1)获准吃掉dog_chow:random1。
Fido (dog:random1)无法吃掉Spot的(dog_chow:random2)食物。 真实情况 在计算机系统当中,我们通常会面对大量访问相同对象的进程,但我们希望它们彼此之间能够被区分开来。我们有时候会将此称为多租户环境。处理此类环境的最佳方案就是虚拟机系统。如果我拥有一台运行着大量虚拟机的服务器,而其中一套虚拟机已经受到黑客入侵,我肯定希望阻止黑客以此为跳板进一步扰乱其它虚拟机以及虚拟机镜像。不过在类型强制系统当中,KVM虚拟机会被标记为svirt_t,而镜像被标记为svirt_image_t。我们的规则是允许svirt_t读取/写入/删除拥有svirt_image_t标签的内容。在虚拟机标签机制当中,我们不仅要采用类型强制方案,同时也要通过MCS对其加以区分。当虚拟机组即将启动一套虚拟机系统时,会为其选择一个随机MCS标签,例如s0:c1,c2,而后将svirt_image_t:s0:c1,c2标签分配给该虚拟机需要管理的所有内容。最后,虚拟机会以svirt_t:s0:c1,c2的标记启动。这时SELinux内核能够控制svirt_t:s0:c1,c2无法向svirt_image_t:s0:c3,c4写入内容,而且这种控制能力在虚拟机受到黑客掌握且对方拥有root权限的情况下也同样有效。 我们在OpenShift当中也使用类似的隔离机制。每个组件(包括用户/应用程序进程)都以同样的SELinux类型加以运行(openshift_t)。政策定义规则、规则决定如何控制与组件类型及独特MCS标签相关的访问活动,从而确保不同组件之间无法交互。 感兴趣的朋友可以点击此处查看一段小视频,了解如果某个Openshift组件拥有root权限将引发怎样的状况。
这是SELinux的另一种强制形式,但使用的频繁要低得多,这就是多级安全(简称MLS);它诞生于上世纪六十年代,主要被用于Trusted Solaris等受信操作系统。 其主要思路在于以数据被使用的层级为基础进行进程控制。也就是说,secrect进程无法读取top secret数据。 MLS与MCS非常相似,但它为强制机制添加了"支配"这一概念。MCS标签必须在完全匹配的情况下才能通过,但一条MLS标签可以支配另一条MLS标签从而获得访问许可。 比喻 现在我们不再讨论不同的狗只,而将着眼点放在不同的狗类品种。举个例子,现在我们面对的是一只灰狗与一只吉娃娃。 我们允许灰狗吃任何一种狗食,但吉娃娃则无法吃下灰狗的狗食。 我们为灰狗设定的标签为dog:Greyhound,它的狗食则为dog_chow:Greyhound;而吉娃娃的标签为dog:Chihuahua,它的食物标签为dog_chow:Chihuahua。
在MLS政策之下,我们让MLS灰狗标签对吉娃娃标签拥有支配权。这意味着dog:Greyhound可以吃掉dog_chow:Greyhound与dog_chow:Chihuahua。
但dog:Chihuahua不允许吃掉dog_chow:Greyhound。 当然,dog:Greyhound与dog:Chihuahua仍然受到类型强制的影响而无法吃掉cat_chow:Siamese,即使在MLS当中灰狗类型对暹罗猫类型拥有支配权。 真实情况 假设我拥有两台Apache服务器:一台以httpd_t:Topsecret标签运行,另一台则以httpd_t:Secret标签运行。如果Apache进程httpd_t:Secret遭到侵入,黑客将能够读取httpd_sys_content_t:Secret内容,但无法读取httpd_sys_content_t:TopSecret内容。 不过如果运行着httpd_t:TopSecret的Apache服务器遭到入侵,则httpd_sys_content_t:Secrect与httpd_sys_content_t:TopSecret的内容都将暴露在黑客面前。 我们将MLS机制用于军事环境下,即某位用户只获准查看secret数据,而另一位处于同一系统下的用户则可以查看top secret数据。 总结 SELinux是一套强大的标签系统,通过内核对每一个单独进程进行访问控制。其中最主要的功能就是类型强制,其中规则的作用是根据进程与对象双方的标签类型来判断某个进程是否有权读取相应的对象。此外另有两种控制机制,其中MCS负责对同类进程进行彼此区分,而MLS则允许一种进程拥有指向另一种进程的支配权限。 原文链接:http://opensource.com/business/13/11/selinux-policy-guide#.UoWMDG-jYlE.sinaweibo |