欢迎来到天天文库
浏览记录
ID:15762548
大小:1.00 MB
页数:96页
时间:2018-08-05
《selinux源码分析_1.31》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、SELinux源码分析(FederaCore8)第一章SELinux(SecurityEnhanceLinux,简称SELinux)简介1.1SELinux的起源SELinux是一个面向政府和行业的产品,由NSA、NetworkAssociates、Tresys以及其他组织设计和开发。尽管NSA将其作为一个补丁集引入,但从2.6版开始,它就被加入到Linux内核中。GUN/Linux非常安全,但它也非常动态:所做的更改会为操作系统带来新的漏洞,这些漏洞可能被攻击者利用,尽管人们都非常关心阻止授权访问,但是发生
2、入侵后会发生什么呢?1.2访问控制方法 大多数操作系统使用访问控制来判断一个实体(用户或程序)是否能够访问给定资源。基于UNIX的系统使用一种自主访问控制(DiscretionaryAccessControl,简称DAC)的形式。此方法通常根据对象所属的分组来限制对对象的访问。例如,GNU/Linux中的文件有一个所有者、一个分组和一个权限集。权限定义谁可以访问给定文件、谁可以读取它、谁可以向其写入,以及谁可以执行它。这些权限被划分到三个用户集中,分别表示用户(文件所有者)、分组(一个用户组的所有成员)和其
3、他(既不是文件所有者,又不是该分组的成员的所有用户)。 很多这样的访问控制都会带来一个问题,因为所利用的程序能够继承用户的访问控制。这样,该程序就可以在用户的访问层进行操作。与通过这种方式定义约束相比,使用最小特权原则更安全,程序只能执行完成任务所需的操作。例如,如果一个程序用于响应socket请求,但不需要访问文件系统,那么该程序应该能够监听给定的socket,但是不能访问文件系统。通过这种方式,如果该程序被攻击者利用,其访问权限显然是最小的。这种控制类型称为强制访问控制(MAC)。 另一种控制访问的方
4、法是基于角色的访问控制(RBAC)。在RBAC中,权限是根据安全系统所授予的角色来提供的。角色的概念与传统的分组概念不同,因为一个分组代表一个或多个用户。一个角色可以代表多个用户,但它也代表一个用户集可以执行的权限。 SELinux将MAC和RBAC都添加到了GNU/Linux操作系统中。下一节将探讨SELinux实现,以及如何将安全增强透明地添加到Linux内核中。1.3Linux安全模块(LinuxSecurityModule,简称LSM)Linux安全模块(LSM)提供了两类对安全钩子函数的调用:一类
5、管理内核对象的安全域,另一类仲裁对这些内核对象的访问。对安全钩子函数的调用通过钩子来实现,钩子是全局表security_ops中的函数指针,这个全局表的类型是security_operations结构,这个结构定义在include/linux/security.h这个头文件中,这个结构中包含了按照内核对象或内核子系统分组的钩子组成的子结构,以及一些用于系统操作的顶层钩子。在内核源代码中很容易找到对钩子函数的调用:其前缀是security_ops->。对钩子函数(Hooks)的详细说明留到后面。在内核引导的过程
6、中,Linux安全模块(LSM)框架被初始化为一系列的虚拟钩子函数,以实现传统的UNIX超级用户机制。当加载一个安全模块时,必须使用register_security()(在linux/security.h中声明,security.c中定义)函数向Linux安全模块(LSM)框架注册这个安全模块:这个函数将设置全局表security_ops,使其指向这个安全模块的钩子函数指针,从而使内核向这个安全模块询问访问控制决策。一旦一个安全模块被加载,就成为系统的安全策略决策中心,而不会被后面的register_sec
7、urity()函数覆盖,直到这个安全模块被使用unregister_security()函数向框架注销:这简单的将钩子函数替换为缺省值,即Dummy.c中的Dummy函数,系统回到UNIX超级用户机制。另外,Linux安全模块(LSM)框架还提供了函数mod_reg_security()和函数mod_unreg_security(),使其后的安全模块可以向已经第一个注册的主模块注册和注销,但其策略实现由主模块决定:是提供某种策略来实现模块堆栈从而支持模块功能合成,还是简单的返回错误值以忽略其后的安全模块。(需
8、要主模块进行调用)这些函数都提供在内核源代码文件security/security.c中。这种方式的设计主要为了实现模块的叠加,实现多种模块对系统的安全进行检查。目前该功能主要是实现,capability和SELinux的叠加。Linux内核现在对POSIX.1ecapabilities的一个子集(提供一部分钩子函数)提供支持。Linux安全模块(LSM)设计的一个需求就是把这个功能移植为一个可选的
此文档下载收益归作者所有