(一):selinux简介
selinux是security enhancement linux的简称,从字面意思说就是安全增强型linux,这种增强能够有效的减轻
有缺陷的应用软件所出现的问题,包括那些没有被发现的或者是被创建的缺陷。同时,这种增强也能够强化很多安全
目标,从数据保密到应用集成来提高其健壮性。
(二):DAC和MAC
1): 在早期的操作系统中几乎是没有安全方面的考虑的,用户可以只要知道资源的名称就可以获取任何文件或者是资源。后来,有了比较主流的访问控制机制(access control mechanisms)-DAC,即discretionary access control,自主访问控制,DAC的主要特征就是资源拥有者能够指定谁能或者是谁不能访问该资源。DAC机制有一些基础的安全缺陷。
—-下面来自百度知道:
“自主访问控制的实现方式包括目录式访问控制模式、访问控制表(ACL)、访问控制矩阵、面向过程的访问控制等,其中,访问控制表是自主访问控制机制通常采用的一种方式。访问控制表是存放在计算机中的一张表,本质上是带有访问权限的矩阵,其访问权限包括读文件、写文件、执行文件等等。在自主访问控制机制下,每个客体都有一个特定的安全属性,同时访问控制表也授予或禁止主体对客体的访问权限。在实际工作中,安全管理员通过维护访问控制表,控制用户对文件、数据等IT系统资源的访问行为,来达到安全防控的目的。
从安全性上看,现有操作系统中基于访问控制表的自主访问控制存在着明显的缺陷:一方面,超级用户(root/Administrator)权力过度集中,可以随意修客体的访问控制表,只要拥有超级管理员权限就可以对服务
器所有的资源进行任意操作;另一方面,客体的属主可以自主地将权限转授给别的主体,一旦把某个客体的ACL修改权转授出去以后,拥有者便很难对自己的客体实施控制了。因此,在现有的这种访问控制模型下,
操作系统存在很多安全风险。”
所以,基于自主访问控制的缺点,另外一种访问控制机制–MAC,强制访问控制被开发出来。MAC目的是在提供安全需求的时候,能够克服DAC的缺陷。selinux带给linux的主要价值就是一个灵活的,可配置的MAC机制。
2):引用监控的概念
在引用监控中,操作系统将被动资源,例如文件隔离到不同的客体当中,同时,将活动的实体,例如运行中的
程序分隔到主体当中。引用监控机制也就是引用验证机制,通过提供集成一套访问控制规则的安全策略来验证主体和客体之间的访问。通过这种方式,程序访问访问系统资源,例如文件,就能够被限制在符合安全策略的访问中。
访问控制决策是基于与每一个主体和客体相关的安全属性的,安全属性代表着主体或者是客体的安全相关的特征。例如,在linux中,主体也就是进程,都有真实并且有效的用户标识符,客体,例如文件,有访问权限模式,该模式被用来决定哪一个进程能够打开文件。
除了实现安全策略,引用监控概念实现的基础设计目标就是:
1:防篡改(不能被恶意改变或者是修改)
2:无通行(主体不能避免访问控制决策)
3:可验证(他是正确的,并且安全策略的实现是已经证明的)
几乎所有的操作系统都在实行了引用监控的形式,而且都是以主体,客体以及安全策略规则为特征的。在标准linux中,主体通常都是进程,客体大都是用来信息共享,存储和交流(文件,目录,套接字,共享内存等)的系统资源。
在linux中,和其他流行的操作系统一样,被引用监控(也就是内核)实施的安全策略都是固定的和硬编码的,然而被这些规则用于验证的安全属性(例如,访问模式)可以被改变和被分配。标准的linux安全是DAC安全的一种形式。
3):自主访问控制的问题
DAC是一种访问控制形式,他通常是允许被批准的用户(通过他们的程序,例如shell)来改变来改变客体的访问控制属性,因此来执行哪一个其他用户有权来访问该客体。DAC的一种简单的形式就是文件密码,想要访问文件必须要知道被文件拥有者创建的密码。大多数DAC机制是基于用户身份访问控制属性的。几乎所有当前的操作系统都有基于用户身份的DAC形式。在linux中,拥有者-组-其他权限模式机制是非常普遍的和出名的。同样的,一个更加普通的访问控制列表机制也是比较普遍的。
所有的DAC机制都有一个基础性的缺陷,就是他不能识别人用户和计算机程序的区别。DAC尝试着去模拟一个所有权的概念;例如,文件所有者有权利来指定文件访问,并且仅仅将访问权限指定给他信任的其他用户。假设你能够信任一个 人用户(可能是一个无效的命题),计算机工作的方式不能直接模拟一个真实的世界。简单的说,用户依赖于不是他们自己创造的,但是能够在计算机上执行功能的软件,所以我们不能给用户授权和使用访问的能力,而是给软件程序这种能力。正如在互联网时代非常明显的事情,程序充满着缺陷并且很容易被恶意攻击。这就是特洛伊木马,首次在1970s被发现,今天的病毒,蠕虫和间谍软件都是他的变体,所带来的问题。简而言之,如果一个用户是被授权访问的,那也就意味着程序也被授权访问了,如果程序被授权访问了,那么恶意程序也会得到相同的访问权。
DAC假设了一个良性的环境,在这个环境当中,所有的程序都是值得信任的并且是没有缺陷的。虽然我们希望有这样的环境,但是,我们知道,当前是没有这样的环境的。
4):MAC的起源
整个1970s到1980s,基本上所有的精力都放在解决恶意攻击和软件存在缺陷的问题上。目标就是实现MAC。
多层安全模型(MLS)是基于一个正式的模型,称作Bell-LaPadula模型。在多层安全模型中,主体和客体是用安全层来标记的。在我们的例子中,我们有PUBLIC和SECRET敏感层,这些层代表着数据的相对敏感性和代表着主体正在操作的用户的许可(SECRET的数据要比PUBLIC的数据敏感)。在MLS中,主体可以读或者是写具有相同敏感度的客体。除此,主体能够读低层的客体(“read down”)和写高层的客体(“write up”)。然后,一个主体绝不能读高层的客体(”no read up”)或者是写底层的客体(“no write down”)。这样的思想就能够使信息从低层流向高层了,但不能反转,从而来保护高层数据的机密性。
MLS在我们认为的访问控制方面是一个翻天覆地的变化。数据拥有者不再能够任意的决定谁能访问客体了。更进一步,假设,大多数软件是不可信的,我们也有非常强健的安全机制了,因为信息流向规则会阻止不适当的数据访问。在MLS当中,组织通过固定的规则来决定个人用户怎样来共享数据。MLS是至今最具应用价值的MAC机制。并且在多个操作系统中也是非常普遍的。
MLS主要的问题就是,严格意义上,MLS实现了一个单一的安全目标(也就是说,使用*分类文档的迷性来保护敏感数据的机密性),是一种固定的方式。不是所有的操作系统安全问题都是与数据机密性相关的,同时,大多数也不是服从于严格地,简单的*分类文档的模型的。在MLS中为了扩展这个目标(和类MAC机制),主体一定要被赋予权限在安全策略之外工作(也就是说,未被“无通行”的原则),并且被信任不会违背这个策略的目的。
5):一个更好的MAC形式
SElinux实现了一个灵活的MAC机制,称作type enforcement(TE),即类型强制策略。正如你看到的,类型强制策略提供了一个以适应安全目标的多样性为形式的,健壮的强制安全策略。同时,TE提供了一种手段来控制个人程序层的访问,允许组织者定义一个适合自己系统的安全策略。在TE中,所有的主体和客体都有一个类型标识符与他们相关联。为了能够访问客体,主体的类型一定要被授权为客体的类型,不管主体的用户标识符是什么。
使得selinux的方法比直接的MLS方法优越的原因就是,统治基于类型的访问控制在内核中是不预先被定义的或者不是硬编码的。默认的,selinux不允许访问。一个组织能够开发任何数量的规则来指定什么是被允许的,使得selinux能够适应安全策略的多样性。
一个系统中允许访问的规则的集合被称作selinux policy,即selinux策略。一个selinux策略是包含所有的selinux内核要实施的规则的文件。策略文件从源文件集合中被编译。正如你看到的,selinux策略能够从一个系统移植到另外一个系统中。在启动进程阶段,策略被加载到内核当中,它在内核当中被用做访问控制决策的基础。
selinux向linux带来了以基于角色的访问控制为形式的灵活的TE和可选的传统的MLS附加。这个被构建在主流的linu操作系统当中的灵活的和可修改的MAC安全机制,是能够提高安全性的有希望的技术。