SELinux的开发历史、架构和操作原则

涉及开发实现 Security-Enhanced Linux®(即 SELinux,是一种实现强制访问控制的系统)的项目最初是由美国安全局 (NSA) 发起。Secure Computing Corporation (SCC) 和 MITRE 直接参与了开发,许多实验室也加入其中。该系统最初是作为一款通用访问软件,发布于 2000 年 12 月(源代码采用 GPL 许可发布)。NSA 发布了一个特殊简化版作为纪念版本。此后的十年中,SELinux 的基本架构作参与了多个半研究/半军事项目,进行了开发、分析和测试。

项目盛宴:DTMach、DTOS、Fluke、Flusk 和 Flask

在 1992–1993 年,来自 NSA 和 SCC 的研究人员致力于研究 Distributed Trusted Mach (DTMach) 操作系统,该系统结合了来自 TMach 和 LOCK 项目的研究成果。DTMach 捆绑了一种通用的类型强制、一个灵活的访问控制机制和一个 Mach 微内核。DTMach 项目随后作为 Distributed Trusted Operating System (DTOS) 项目的一部分开发。DTOS 项目结束后,NSA、SCC 和犹他大学共同将 DTOS 安全系统集成到 Fluke 研究操作系统。新的项目称为 Flux。与此同时,安全系统的初始架构得到了增强,从而能够更好地支持动态安全策略。新增强的架构称为 Flask。NSA 的下一步是对 Linux OS 使用该安全系统架构,并以 Security-Enhanced Linux 的名称向公众发布。

新的强制访问控制系统所基于的流程是查看操作系统对象和主体的安全标签,并包含许多最新的访问控制技术。其中一种技术就是类型强制 (type enforcement)。该系统最初放在一个专门设计的可信任 “A1” 级系统(称为 LOCK)中进行了测试,然后在研究操作系统 Flask 的安全子系统中进行了进一步开发。在基于 SELinux 角色的访问控制以及 Multi-Level 或 Multi-Category 具体实现中支持使用该类型强制。

类型强制

类型强制是一种访问控制技术,它允许根据当前的安全上下文或域向主体(用户、软件流程和工作流)授权以访问对象(文件、I/O 端口和其他)。

在 SELinux 中,安全上下文存储在扩展的文件系统属性中,并通过 Linux Security Module (LSM) 进行管理。类型强制用于实现强制访问控制,对基于角色的访问控制 (RBAC) 进行了补充,是实现 Multi-Level Security (MLS) 和 Multi-Category Security (MCS) 的第一步。

LOCK

SCC 的 LOCK (Logical Co-processing Kernel) 项目其目标是开发一个可信任的计算机系统,提供多级别安全性。这意味着根据可信任的计算系统评估标准(Trusted Computing System Evaluation Criteria,也称为 “Orange Book”),系统必须满足 “A1” 级别的需求。

项目成功结束后,将在军事指挥中心建立数十个系统。类型强制是 LOCK 技术的主要架构特性,确保有效地实现访问控制机制。

目前,与安全和访问控制(包括类型增强)有关的基础 LOCK 技术主要在以下系统中开发:

Sidewinder Internet Firewall 产品线 SELinux

在发布 SELinux 时,它是作为 2.2 和 2.4 内核更新发布的。然而,当出现了是否把 SELinux 包含到正式版内核中这一问题时,Linus Torvalds 要求修改项目,从而将 Linux 安全子系统实现为一个模块,为后续的维护或增强提供便利。因此,开发人员创建了 Linux Security Modules 子系统,通过一个接口为安全子系统提供内核功能。该解决方案允许 Linux 用户和开发人员从大量强制访问控制系统中进行选择:AppArmor、TOMOYO Linux、SMACK 和 SELinux。

Linux Security Modules

Linux Security Modules (LSM) 是一种 Linux 内核子系统,旨在将内核以模块形式集成到各种安全模块中。在 2001 年的 Linux Kernel 峰会上,NSA 代表建议在 Linux 内核版本 2.5 中包含强制控制访问系统 Security-Enhanced Linux。然而,Linus Torvalds 拒绝了这一提议,因为 SELinux 并不是惟一一个用于增强 Linux 安全性的安全系统。除此之外,并不是所有的开发人员都认为 SELinux 是最佳解决方案。SELinux 并没有直接包含在内核中,相反,创建了 Linux Security Modules 系统,允许安全子系统作为模块使用,这意味着可以比较方便地连接新的模块。

LSM 子系统的开发工作持续了大约三年时间,并从版本 2.6 开始,就被包含到 Linux 内核中。目前具备正式官方支持的安全模块包括 SELinux、Apparmor、Smack 和 TOMOYO Linux。

关于 LSM 架构的详细描述请参见文章 “Linux Security Modules: General Security Support for the Linux Kernel”,该文章在 2002 年的 USENIX Security 会议上发表。

SELinux 根据标签控制与强制访问控制系统建立关联。 这意味着由 SELinux 保护的操作系统中的每个对象或主体都需要一个称为 security context 的特殊标签。这些标签最初存储为数字,放在 ext2 文件系统节点中的未使用字段中。每个数字标签在 SELinux 中被映射到一个可读的基于文本的安全上下文标签中。这种方法不具备可扩展性,并且基于特定的 ext2 文件系统的特性,这被认为是整个解决方案的一个明显的瑕疵。

在开发的下一个阶段,SELinux 被实现为一个可以载入到 Linux 内核版本 2.4 的模块。该模块可以处理存储在单独文件中的标签,这意味着 SELinux 的实现对所使用的文件系统没有任何限制。然而,去掉某个架构缺陷可能会引起另一个缺陷。对包含安全上下文标签的文件进行频繁访问将导致生产力显著下降。

Linux 内核 2.6 版本的发布彻底解决了这个问题,它充分支持 Linux Security Modules 和 ext3 文件系统的扩展属性。为了能够对系统的对象和主体存储安全上下文标签,SELinux 转变为使用扩展的属性。不幸的是,这种创新对文件系统的使用提出了限制。SELinux 只能在支持扩展属性的文件系统中使用。然而,这个问题随时间而得到解决,目前几乎所有通用的文件系统都充分支持扩展属性,这意味着它们都能够使用 SELinux。

一段时间后,SELinux 被集成到 Linux 内核并开始进行发布,第一次作为内核 2.6.0-test3(2003 年 8 月 8 日发布)的子系统进行测试。作为发布的一部分,针对内核 2.2 和 2.4 发布了一个内核路径,用于强制访问控制系统,同时在内核 2.4 中引入了对 Linux Security Modules 的支持,从而导致了面向 LSM 的 SELinux 版本的开发。

SELinux 很快成为受保护 Linux 系统的事实标准,以及 Red Hat Enterprise Linux 最流行的企业发布版之一(从 Red Hat Enterprise Linux 4 开始)。此后,SELinux 开始在广泛部署的 Debian 和 Fedora 上得到应用,并获得 Ubuntu 发行版的支持,后者非常受用户欢迎(自 LTS 版本 8.04 Hardy Heron 开始)。很久之后,Novell(当时正在开发 AppArmor 并计划将其包含在 Linux 内核中)开始在其 OpenSUSE 和 SUSE Linux Enterprise 发行版中支持 SELinux。

最终,Security-Enhanced Linux 获得了所有流行版本的开发人员的支持。在当前的 Linux 内核版本 2.6 中,SELinux 使用 Linux Security Modules 执行操作。此外,许多 SELinux 元素被合并到实际内核中。

强制访问控制系统使用的冗长路径一直由美国国家安全局监管。将 SELinux 集成到 Linux 内核的基本工作也获得了 Red Hat 的支持。NSA 网站上给出了对 SELinux 开发贡献最大的开发人员的完整列表。

时间: 2024-09-19 07:10:01

SELinux的开发历史、架构和操作原则的相关文章

NET高级开发一:用VB.net+ADO.NET+SQLServer开发三层架构的运用程序

ado|server|sqlserver|程序|高级|架构      NET高级开发一:用VB.net+ADO.Net+SQL Server开发三层架构的运用程序 一:什么是三层体系结构:    三层体系结构,顾名思义,我们将运用程序从整体上分为三个独立而又彼此相关联的层次,这三层分别是:用户层.业务逻辑层.数据层 .用户层就是运用程序与用户的操作接口,比如说:网页.在用户层,常用到的技术如:HTML.CSS.JavaScript.ASP/asp.net等.业务逻辑层 就是将一些业务处理的逻辑与

基于LINQ to SQL的WEB开发三层架构

LINQ语言集成查询是微软用于抗衡竞争对手,改进现有开发模式下面向数据库操作问题的一个种全新体系架构.它的出现,解决了面向对象开发中由数据库操作引起的先天性的瓶颈,使得面向对象和数据库完美结合,程序员不再受限于复杂的SQL脚本,而可以一种近乎完美的方式来搭建自己的面向对象型软件 系统,这种方式就是将数据完全对象化,将SQL语句封装到底层,由framework来完成,程序员 只需面向数据库对象来编程,从另一种意义上来说,是把数据也程序化了. LINQ的这种开发模式也改变了系统架构的搭建方式,在以往

Gartner:敏捷开发的10大指导原则

 据Gartner的资料表明,一众CIO现在有压力,需要支持快速发展的数字业务发展,而同时又遇上传统项目和开发方法不能与时俱进的难题.企业现在大量采用敏捷开发,以加快项目进度及更好地显示其价值. Gartner应用架构.开发和整合峰会下个月在悉尼召开.Gartner公司研究总监Nathan Wilson在会议前夕表示,敏捷方法如果使用得当,是有能力改变IT业务关系以及对IT价值交付产生重大的正面影响.而CIO和整个IT管理团队必须悉心培养获得成功所需的变革文化,只有这样才能交付相应的价值. Wi

[原创] EasyASP v1.5简化ASP开发,包含数据库操作类

EasyASP v1.5简化ASP开发,包含数据库操作类 EasyASP是一个方便快速开发ASP的类,其中包含了一个数据库控制类(原clsDbCtrl.asp,对原代码作了优化和修改,包含对数据库的各类操作及存储过程的调用,全部封装在Easp.db中,使用起来会更方便,调用也更简单).而Easp类中提供了大量实用的ASP通用过程及方法,可以简化大部分的ASP操作.目前只提供了VBScript版,JScript版将来可能会提供.详细说明请下载帮助手册,里面有非常详细的使用方法说明及源码范例. 源码

Windows 8.1应用开发之触控操作

与WPF相同Windows 8.1应用中也具有高级触控操作(Manipulation),其中包含了三种常见的触屏手势:平移.缩放.旋转,通过以下四种事件可为控件实现各种触控操作:ManipulationStarting.ManipulationStarted.ManipulationDelta.ManipulationInertiaStarting.ManipulationCompleted. 开发之触控操作-windows应用程序开发"> 打开Visual Studio 2013 Pre

C#进行Visio二次开发之图纸缩放操作的实现

我们知道,Visio菜单[视图]中有一个缩放的菜单项目,如下所示,选择响应的选项会对图纸进行缩放. 开发之图纸缩放操作的实现-c站"> 另外,它的工具条中也有一个下拉列表框,除了可以选择现有的那些选项外,还可以输入自定义的值,达到自定义缩放比例的功能. 本文介绍如何使用C#和Visio的SDK函数,实现Visio中的图纸各种缩放操作.首先我们建立一个缩放菜单项和一个各种缩放比例的子菜单项,如第一个图形所示:然后将所有的子菜单项的事件处理指向同一个函数,如下所示 private void m

#运维侠客行·杭州站#关于业务、开发、架构、运维的思考

运维侠客行特邀作者 黄河,平安壹钱包高级架构师,应用运维负责人.前支付宝.大众点评资深运维工程师. 纵观整个互联网,整个技术部门,或多或少存在以下的情况:开发(业务开发):永远被业务驱使或者强奸,越来越忙,支持业务越来越疲于奔命.产品.业务上线快,bug也很多.架构:一般中大型的互联网公司,都会有架构部门或者小组.他们一般认为主要解决业务开发人员的需求,如提供RPC框架,消息中间件,缓存方案等,顺便也显示出其技术的水平就更好了.往往会出现,方案设计很漂亮,最终落地时却问题百出.运维:绝大多数互联

阿里沈询:阿里技术架构演变,及基于EDAS的敏捷服务开发与架构实践

8月30-31日20:00-21:30,一场别开生面的技术大会-- "蚂蚁金服&阿里云在线金融技术峰会"将在线举办.本次将聚焦数据库.应用架构.移动开发.机器学习等热门领域,帮助金融业技术开发者深入解析互联网应用的前沿应用与技术实践. 蚂蚁金服&阿里云在线金融技术峰会专题:https://yq.aliyun.com/activity/109 峰会统一报名链接:http://yq.aliyun.com/webinar/join/38 来自阿里巴巴的资深专家王晶昱(花名:沈

解析离线安装Eclipse的Android ADT开发插件的具体操作(图文)_Android

不知道大家是不是有过这样的感觉.从 https://dl-ssl.google.com/android/eclipse/很慢呢!我是教育网所以确实是很慢的.所以我想了一个办法确保可以快点安装上ADT15.当然ADT16.ADT17也是可以的.不过我还是用ADT15做演示把.(注意:不同的SDK对应的ADT版本也不同,同时在安装时要断开网络) 开发插件的具体操作(图文)_Android-eclipse adt 离线安装"> 很熟悉把,这是Eclipse解压后的图片当然ADT是要自己下载的.我