(一级建造师备考)SELinux源码分析_1.31.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SELinux源码分析(Federa Core 8) 第一章 SELinux(Security Enhance Linux,简称SELinux)简介 1.1 SELinux的起源 SELinux是一个面向政府和行业的产品,由NSA、Network Associates、Tresys以及其他组织设计和开发。尽管NSA将其作为一个补丁集引入,但从2.6版开始,它就被加入到Linux内核中。 GUN/Linux非常安全,但它也非常动态:所做的更改会为操作系统带来新的漏洞,这些漏洞可能被攻击者利用,尽管人们都非常关心阻止授权访问,但是发生入侵后会发生什么呢? 1.2访问控制   大多数操作系统使用访问控制来判断一个实体(用户或程序)是否能够访问给定资源。基于 UNIX的系统使用一种自主访问控制(iscretionary Access Control,DAC)的形式。此方法通常根据对象所属的分组来限制对对象的访问。例如,GNU/Linux 中的文件有一个所有者、一个分组和一个权限集。权限定义谁可以访问给定文件、谁可以读取它、谁可以向其写入,以及谁可以执行它。这些权限被划分到三个用户集中,分别表示用户(文件所有者)、分组(一个用户组的所有成员)和其他(既不是文件所有者,又不是该分组的成员的所有用户)。   很多这样的访问控制都会带来一个问题,因为所利用的程序能够继承用户的访问控制。这样,该程序就可以在用户的访问层进行操作。与通过这种方式定义约束相比,使用最小特权原则更安全程序只能执行完成任务所需的操作。例如,如果一个程序用于响应 socket 请求,但不需要访问文件系统,那么该程序应该能够监听给定的socket,但是不能访问文件系统。通过这种方式,如果该程序被攻击者利用,其访问权限显然是最小的。这种控制类型称为强制访问控制(MAC)。   另一种控制访问的方法是基于角色的访问控制(RBAC)。在 RBAC 中,权限是根据安全系统所授予的角色来提供的。角色的概念与传统的分组概念不同,因为一个分组代表一个或多个用户。一个角色可以代表多个用户,但它也代表一个用户集可以执行的权限。   SELinux 将 MAC 和 RBAC 都添加到了 GNU/Linux 操作系统中。下一节将探讨 SELinux 实现,以及如何将安全增强透明地添加到 Linux 内核中。 Linux安全模块(LSM)提供了两类对安全钩子函数的调用:。对安全钩子函数的调用通过钩子来实现,钩子是全局表security_ops中的函数指针,这个全局表的类型是security_operations结构,这个结构定义在include/linux/security.h这个头文件中,这个结构中包含了按照内核对象或内核子系统分组的钩子组成的子结构,以及一些用于系统操作的顶层钩子。在内核源代码中很容易找到对钩子函数的调用:其前缀是security_ops-。对钩子函数的详细说明留到后面。 在内核引导的过程中,Linux安全模块(LSM)框架被初始化为一系列的虚拟钩子函数,以实现传统的UNIX超级用户机制。当加载一个安全模块时,必须使用register_security()函数向Linux安全模块(LSM)框架注册这个安全模块:这个函数将设置全局表security_ops,使其指向这个安全模块的钩子函数指针,从而使内核向这个安全模块询问访问控制决策。一旦一个安全模块被加载,就成为系统的安全策略决策中心,而不会被后面的register_security()函数覆盖,直到这个安全模块被使用unregister_security()函数向框架注销:这简单的将钩子函数替换为缺省值,系统回到UNIX超级用户机制。另外,Linux安全模块(LSM)框架还提供了函数mod_reg_security()和函数mod_unreg_security(),使其后的安全模块可以向已经第一个注册的主模块注册和注销,但其策略实现由主模块决定:是提供某种策略来实现模块堆栈从而支持模块功能合成,还是简单的返回错误值以忽略其后的安全模块。这些函数都提供在内核源代码文件security/security.c中。 Linux内核现在对POSIX.1e capabilities的一个子集提供支持。Linux安全模块(LSM)设计的一个需求就是把这个功能移植为一个可选的安全模块。POSIX.1e capabilities提供了划分传统超级用户特权并赋给特定的进程的功能POSIX.1e capabilities授予,大大提高了系统安全的灵活性。Linux安全模块(LSM)保留了用来在内核中执行capability检查的现存的capable()接口,但把capable()函数简化为一个Linux安全模块(LSM)钩子函数的包装,从而允许在

您可能关注的文档

文档评论(0)

bqks + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档