设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

图文教程:SELinux政策实施详解

2013-11-21 13:18| 发布者: 红黑魂| 查看: 3712| 评论: 0|来自: 51CTO

摘要: 今年我们已经迎来SELinux的十岁生日,回想十载发展历程真有种如梦似幻之感。SELinux最早出现在Fedora Core 3当中,其后又登陆红帽企业Linux 4。对于从未使用过SELinux或者希望进一步确认其基础定义的朋友们,请接着 ...

  今年我们已经迎来SELinux的十岁生日,回想十载发展历程真有种如梦似幻之感。SELinux最早出现在Fedora Core 3当中,其后又登陆红帽企业Linux 4。对于从未使用过SELinux或者希望进一步确认其基础定义的朋友们,请接着往下看。



  SElinux是一套标签系统。每个进程都拥有自己的标签,操作系统中的每个文件/目录对象都拥有自己的标签。甚至包括网络端口、设备以及潜在主机名也被分配到了标签。我们通过编写规则来控制对某个进程标签乃至对象标签的访问,这就是所谓管理政策。SELinux内核会强制执行这些规则,有时候我们将这种方案称为强制访问控制(简称MAC)。


  对象的拥有者无权超越对象的安全属性。标准Linux访问控制、所有/组+权限标记(例如rwx)通常被称为自主访问控制(简称DAC)。SELinux中不存在UID或者文件所有权概念。所有事物都由标签机制进行控制。这意味着SELinux系统可以在不涉及高权限root进程的前提下实现设置。


  备注: SELinux并不会取代DAC控制。SELinux是一种并行执行模式,应用程序必须在同时符合SELinux与DAC的要求之后才能正常执行。这可能会让管理人员们在遇到权限被拒绝的状况时感到有些混乱。管理员权限被拒绝意味着DAC方面出了问题,但这肯定与SELinux标签无关。


  • 类型强制


  让我们进一步了解标签机制。SELinux的主要模式或者强制手段被称为"类型强制"。这意味着我们需要根据进程的实际类型为其定义标签,而文件系统对象的标签也同样基于其类型。


  比喻


  让我们假设有这样一套系统,其中需要定义的对象类型分为猫(cat)或狗(dog)。一只猫与一条狗构成进程类型。



  现在我们的一类对象希望与所谓“食物”(food)进行互动。食物也需要分为不同类型,也就是猫食与狗食。



  作为政策的制定者,我打算采取这样的处理方式:dog有权吃掉dog_chow食物,猫则有权吃掉cat_chow食物。在SELinux中,我们会把这条规则写入政策。



  • 允许猫进程吃掉cat_chow:food;
  • 允许狗进程吃掉dog_chow:food;


  有了这些规则,系统内核将允许猫进程吃掉拥有cat_chow标签的食物,而狗进程则吃掉拥有dog_chow标签的食物。



  但在默认情况下,SELinux系统会阻止一切执行请求。这意味着如果狗类进程试图吃掉cat_chow,内核会对此加以阻止。



  与之类似,猫进程也不允许接触狗进程的食物。



  实际情况


  我们将Apache进程标签为httpd_t,并将Apache内容标签为httpd_sys_content_t与httpd_sys-content_rw_t。假设我们把信用卡数据保存在一套MySQL数据库当中,其标签为mysqld_data_t。如果某个Apache进程并侵入,黑客就能够获得httpd_t进程的控制权并获准读取httpd_sys_content_t文件的内容、向httpd_sys_content_rw_t当中写入数据。然而黑客仍然无法读取信用卡数据(mysqld_data_t),即使被侵入的进程以root权限运行。在这种情况下,SELinux能够显著缓解由侵入活动带来的安全威胁。


  • MCS强制


  比喻


  在前面提到的状况里,我们输入了狗与猫两种进程类型。不过如果狗进程又分为两种:Fido与Spot,我们又不希望Fido去动Spot的dog_chow,情况又会发生怎样的变化?



  一种解决方案当然是创建大量新类型,例如Fido_dog与Fido_dog_chow。不过这种作法很快就将失去可行性,因为所有狗类进程都拥有近乎相同的权限。


  为了解决这个难题,我们开发出一种新的强制形式,我们将其称为多类别安全(简称MCS)。在MCS当中,我们为标签加入另一种组成部分,并将其应用到狗进程与dog_chow food当中。现在我们把狗进程分别标记为dog:random1(代表Fido)与dog:random2(代表Spot)。



  我们将狗食标记为dog_chow:random1(Fido)与dog_chow:random2(Spot)。



  MCS规则的内容是:如果类型强制规则没问题、随机MCS标签也确切匹配,那么访问才会被通过;如果二者中有一项不符合要求,访问就会被拒绝。



酷毙

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部