linux添加三权,基于SELinux的三权分离技术的研究

目前,Linux操作系统已广泛应用于各种设备和产品中,如服务器、PC机、机顶盒及路由器等。随着Linux系统的不断发展和广泛应用,Linux系统的安全问题也引起越来越多的关注。在Linux操作系统中,存在一个超级用户即root用户。root也称为系统管理员,它拥有管理系统的一切权限。当一个非法用户获得root用户口令后,他就可以以超级用户的身份登录系统,然后做任何他想做的事情:如任意添加、删除用户,终止进程,删除重要文件甚至更改root用户的口令。因此,一旦root权限被恶意用户利用,就可能导致系统数据的泄密和破坏。

该问题已经引起了国家的重点关注,如国家保密标准BMB20-2007《涉及国家秘密的信息系统分级保护管理规范》中明确提出:涉密信息系统应配备系统管理员、安全保密管理员和安全审计员这三类安全保密管理人员,三员应该相互独立、相互制约、不得兼任。三个管理员之间的工作机制分为协作和制约两种机制,行使的是原超级用户的权力,即系统管理员、安全管理员和审计管理员间相互协作,共同维护系统的正常运行。制约机制指只有在当前管理员操作不影响其他管理员正在进行的操作时才被允许,从而保证了管理员行为的可预期性,避免超级用户的误操作或其身份被假冒而带来的安全隐患,增强了系统的安全性。该规范可以有效防止由系统管理员权力过大所带来的系统安全威胁和隐患[。

SELinux (security-enhanced Linux)[是安全增强的Linux,以强制访问控制(mandatory access control, MAC)[技术为基础,应用类型增强(type enforcement, TE)和基于角色访问控制(role-base access control, RBAC)两种安全策略模型。通过MAC技术可以实现对用户和进程权限的最小化,即使在系统受到攻击或者进程和用户的权限被剥夺的情况下,也不会对整个系统的安全造成重大影响。SELinux对访问的控制更彻底,它对系统中的所有文件、目录、端口资源的访问控制都基于一定的安全策略而设定。只有管理员才能定制安全策略,一般用户没有权限更改。因此SELinux为三权分离思想的实现奠定了基础。

目前,SELinux的相关研究工作主要集中在安全策略分析和配置及SELinux安全模型研究[方面。文献[

本文基于SELinux建立了三权分离安全模型,设计了三权分离安全策略,并实现了三权分离机制,最后通过实验验证了可行性和正确性。

1 SELinux的安全技术

1.1 MAC和DAC技术分析

SELinux除了采用自主访问控制(discretionary access control, DAC)外,还在Linux内核中使用强制访问控制机制严格控制所有对系统资源的访问请求,并根据安全策略确定是否授予该请求相应的权限。MAC机制将能够发出访问请求的对象称为主体(如进程),将系统的被访问对象(如:文件、设备、socket、端口和其他进程)称为客体,所有主体对客体的访问都必须由MAC机制通过安全策略授权。MAC机制给进程仅授予操作所需要的权限,这遵循了最小权限原则。因此,在MAC机制的保护下,即使获取root用户的权限也无法访问未授权的客体[。

在SELinux中,MAC与DAC机制联合,以提高系统的安全性。如

图1

f4f064af9f457225570b79d2ad8581ae.png

图1

SELinux的DAC与MAC

1.2 SELinux的安全策略模型[

安全策略作为访问控制机制权限仲裁的依据,是SELinux中非常重要的内容之一。SELinux采用TE (type enforcement)和RBAC (role-based access control)相结合的安全策略。

1.2.1 TE[模型

SELinux中所有的安全策略,都必须用TE规则明确地定义,没有被明确许可的其他访问方式,都被禁止(最小权限原则)。TE访问向量规则定义了主体可以访问什么类型的客体,TE转移规则定义了域类型的相互转移[。本文只讨论前者。

定义1 TE模型的关键要素:

源类型(source type, ST)主体(subject)或者域的类型。目标类型(target type, TT)客体(object)的类型。对象类别(class)访问申请的某一类别资源,如:file、socket等。操作类型(opration, OPT)如:read、write等。许可权限(permission, P)表示主体对客体访问时允许的操作。

定义2 TE策略模型:

TE策略模型可定义为:P=ST×OPT×TT,许可权限(P)=源类型(ST)对目标类型(TT)的资源类(class)的操作(OPT)。

定义3 根据上述TE策略模型,采用allow语法制定策略规则如下:

allow  ST  TT : class  {opt1, opt2, …};

根据此策略规则,定义出如下安全策略:

allow user_t bin_t : file {read execute getattr};

在allow基本语法规则中包含了两个类型标识符:源类型(ST) user_t,目标类型(TT) bin_t。标识符file是定义在策略中的对象类别名称(在这里,表示一个普通的文件),大括号中包括的操作是文件操作类型的一个子集,此安全策略示例的含义是拥有域类型user_t的进程可以读/执行或获取具有bin_t类型的文件客体的属性。

1.2.2 SELinux的RBAC模型

传统的基于角色的访问控制RBAC模型[,为角色授权,然后将一个或多个角色分配给一个授权用户。SELinux对RBAC模型进行了改进,提出了一种TE-RBAC联合模型,改进后的模型如[。

图2

fa69530c72cb15cd02a27728ffccf5db.png

图2

SELinux的RBAC策略模型

定义4 TE与RBAC联合模型:

声明用户及其关联的角色,user  joe  roles {user_r};这个语句声明了一个用户joe,以及与之关联的角色user_r。

声明角色与其源类型关联,role user_r types user_t;这个语句将源类型user_t与角色user_r关联起来。

2 三权分离模型

2.1 权能集定义

依据最小特权和权值分离的管理思想,本文将原超级用户的特权进行细粒度划分,分别授予不同的管理员角色,使各种管理员只具有完成其任务所需的最小特权,不同管理员间相互协作共同管理系统。从逻辑上将承担这3类职责的特权用户命名为系统管理、安全员管理员和审计员管理员[。

根据上述非形式化描述,为了实现三权分离机制,本文首先将系统的root权能集进行划分,并给出如下定义。

定义5 系统root权能集C

C={ Csy, Cse, Cau},其中Csy表示系统管理员权能集,Cse表示安全管理员权能集,Cau表示审计管理员权能集。

定义6 三权分离权能集。根据三权分离思想,将root权限拆分成下述3个权能集:

1)系统管理员权能集Csy

Csy管理与系统相关的资源,包括用户身份管理、系统资源配置、系统加载和启动、系统运行的异常处理[。

2)安全管理员权能集Cse

Cse制定系统安全策略,负责对系统中的主体、客体进行统一标记,对主体进行授权,配置一致的安全策略,并确保标记、授权和安全策略的数据完整性[。

3)审计管理员权能集Cau

Cau设置审计选项,对与安全有关的事件进行审计处理,包括监视系统的活动以及日志的处理,提供审计和监控功能,创建和维护受保护客体的访问审计跟踪记录[。

4)各权能集之间相互隔离,当且仅当对任意a,b∈T(T={sy, se, au}),a≠b,有Ca⊆C,Cb⊆C,Ca∩Cb=∅,其中C=Cse∪Csy∪Cau。即每个管理员所能访问的权能集是绝对隔离的。

2.2 基于SELinux的三权分离策略模型

根据上述权能集的描述,下面基于SELinux建立一种三权分离策略模型,主要包括特权用户、特权角色和源类型集定义,以及各特权用户与对应的特权角色关联和特权角色与对应的源类型集关联。

图3

991dc305f3cff6c6b15981192d5c9d9b.png

图3

三权分离策略模型

定义7 定义3组源类型集,STsy,STse,STau满足下列条件:

STsy={ STasy, STbsy, …};STse={ STase, STbse, …};STau={ STaau, STbau, …}

并且根据SELinux的TE模型和上述全能集的定义,可得到如下3组TE策略模型:

1) Psy=STsy×OPT×TT,且Psy⊆Csy (即系统管理员各源类型的许可权限是系统管理员权能集Csy的子集);

2) Pse=STse×OPT×TT,且Pse⊆Cse (即安全管理员各源类型的许可权限是安全管理员权能集Cse的子集);

3) Pau=STau×OPT×TT,且Pau⊆Cau (即审计管理员各源类型的许可权限是审计管理员权能集Cau的子集);

4) STsy集∩STse集=∅,STse集∩STau集=∅,STsy集∩STau集=∅,每组源类型集合之间都不能相交。

定义8定义三权分离的用户与角色关联

user  root  role  sysadm_r, 将root系统管理员用户与sysadm_r角色关联;

user  secadm  role  secadm_r,将secadm安全管理员用户与secadm_r角色关联;

user  auditadm  role  auditadm_r,将auditadm审计管理员用户与auditadm_r角色关联。

定义9 三权分离的角色与源类型集关联

role  sysadm_r  types  STsy={STasy, STbsy, … }

role  secadm_r  types  STse={STase, STbse, … }

role  auditadm_r  types STau={ STaau, STbau, … }

本定义基于SELinux的RBAC安全模型为每个角色关联一组源类型集合,即:

sysadm_r关联STsy集;secadm_r关联STse集;auditadm_r关联STau集。

3 三权分离的安全策略设计与实现

在定义了三权分离模型后,为了在SELinux中实现该模型,必须修改SELinux已有的安全策略库,添加三权分离的安全策略。下文详细阐述基于SELinux的三权分离安全策略的设计与实现。

3.1 三权分离的安全策略设计

图4

75e2aaad451c13aa51d7f8007ddf3475.png

图4

三权分离的安全策略设计

3.1.1 系统管理员策略设计

根据定义6~定义9的统管理员相关描述,系统管理员root关联了角色sysadm_r,角色sysadm_r默认的源类型为sysadm_t,这个源类型允许转换到与角色sysadm_r关联的其他源类型,如

3.1.2 安全管理员策略设计

根据定义6~定义9中安全管理员相关描述,安全管理员secadm关联了角色secadm_r,角色secadm_r默认的源类型为secadm_t,这个源类型允许转换到与角色secadm_r关联的其他源类型,如

3.1.3 审计管理员策略设计

根据定义6~定义9中审计管理员相关描述,审计管理员auditadm关联了角色auditadm_r,角色auditadm_r默认的源类型为auditadm_t,这个源类型允许转换到与角色auditadm_r关联的其他源类型,如

3.2 三权分离的TE策略实现

上一节中已经描述了每个用户角色所关联的源类型,下面针对每个源类型按照前面所阐述的TE模型指定具体的安全许可规则。

3.2.1 系统管理员安全策略的实现

系统管理员拥有原root用户的大部分权限,用来完成系统中日常的操作和维护,包括系统用户账户的管理、网络相关管理与操作、内核模块加载、开启和关闭系统、对文件的档案备份和恢复、安装或卸载文件系统等。以管理系统用户账户为例,其源类型为useradd_t,系统管理员拥有添加用户账号的权限,即只有系统管理员可以执行useradd命令,因此需要在策略中按TE模型的描述给useradd_t源类型定义相应的许可权限。

allow  useradd_t  useradd_exec_t:  file {open  read  execute };

该allow规则定义了源类型useraddr_t对目标类型useradd_exec_t (表示useradd命令)的文件资源授予打开(open)、读(read)和执行(execute)的权限。

3.2.2 安全管理员安全策略的实现

安全管理员是整个系统安全策略的制定者,负责制定生成安全策略,修改SELinux运行模式,装载二进制安全策略,设置文件安全上下文等。以生成安全策略为例其源类型为checkpolicy_t,安全管理员拥有将策略规则源码编译成二进制策略文件的权限,即只有安全管理员可以执行checkpolicy命令,因此需要在策略中按TE模型的描述给checkpolicy_t源类型定义相应的许可权限。

allow checkpolicy_t  checkpolicy_exec_t:  file {open  read  execute };

该allow规则定义了,源类型checkpolicy_t对目标类型checkpolicy_exec_t (表示checkpolicy命令)授予打开(open)、读(read)和执行(execute)的权限。

3.2.3 审计管理员安全策略的实现

审计管理员是系统的监督者,负责设置审计开关和审计阈值,启动和关闭审计机制以及管理审计日志等。以auditadm_t源类型为例,只有审计管理员才能拥有查看审计日志的权限,在策略中按TE模型的描述给auditadm_t源类型定义相应的许可权限。

allow  auditadm_t  var_log_t:  file {open  read  getattr };

该allow规则定义了源类型auditadm_t对目标类型var_log_t (表示审计日志文件)授予打开(open)、读(read)和获取属性(getattr)的权限。

4 三权分离实验

4.1 实验平台介绍

实验的硬件平台为TQ2440(基于S3C2440A CPU)嵌入式开发板,软件平台为嵌入式Linux。Linux内核为Linux 2.6.30,Linux命令工具集为Busybox-1.22.0,安全策略由策略库refpolicy-2.20090730[修改生成。

4.2 实验原型的实现

根据上文描述的三权分离安全策略模型,基于refpolicy策略库,在嵌入式Linux平台上,借助于SELinux模块实现了一个三权分离的实验原型系统。该系统重点实现了三权分离的安全策略,定义3个特权角色及对应的3个SELinux特权用户,并为每个用户制定详细的最小执行或访问权限。禁止各用户对其他用户私有资源的访问,最大化的限制用户的权限,以提高系统的安全性。

4.3 三权分离功能测试

4.3.1 用户角色关联测试

系统管理员(root)关联角色sysadm_r,且角色关联sysadm_t源类型,如

图5

596b9a4b72576b1fa9ee6c3c891a0e91.png

图5

用户角色关联标识测试

4.3.2 审计管理员功能测试

根据三权分离的设计模型,审计日志只能由审计管理员进行访问,而其他用户无权进行读操作。

图6

877eed773fc3feb24f6ac733f1ed304e.png

图6

三权分离功能测试

值得注意的是,如果当前以root权限登录去执行审计操作,由于root用户不具备对审计日志的访问权限,因此该请求被拒绝,如

4.3.3 安全管理员功能测试

根据三权分离的设计模型,只有安全管理员有权修改SELinux安全模式,测试结果如

5 结束语

为了解决root权限过大给linux操作系统所带来的安全隐患问题,本文基于SELinux的强制访问控制技术,采用三权分离思想,建立了三权分离策略模型,实现了一个安全增强的Linux操作系统。即使特权用户的密码被恶意用户获取,也不会对系统造成很大的损害,从而将恶意攻击对系统的危害降到最低。本文的三权分离思想将Linux系统的root用户权限拆分为安全管理、系统管理、审计管理三种权限。然后定义了三权分离策略模型,并基于SELinux的安全策略库设计并实现了一套三权分离的安全策略库。最后,在嵌入式Linux平台上,借助于SELinux的强制访问控制技术实现了一个实验原型系统,并对系统各项功能进行了多次测试。实验结果表示,本文的研究工作能够严格的限制每个用户的权限,如只有审计管理员可以查看系统的审计日志,只有安全管理员可以对系统的安全策略进行管理等,从而有效解决了Linux系统由于root权限过大所带来的系统危害和被攻击的问题。本文的研究工作适合于任何Linux平台,包括嵌入式设备和服务器,通过这种三权分离机制可以克服权力过于集中给系统带来的危害,以提高Linux系统的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453323.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树、树和有序树的区别

树:子树没有左右之分 二叉树、有序树:左右有序 二叉树与有序树:在只有一棵树的情况下,二叉树有左右之分、有序树无左右之分 另外:二叉树是有序的,可以为空或一个根节点以及两个分别称为左子树和右子树的互不相交的二叉…

高效程序员

软件开发人员的作战手册 - 让程序员活的久一点 1. 程序员的职业准则是:诚实(如实的报告你的状态,风险和出现的问题),守信(承诺完成的任务就要按时完成),尊重(尊重给你的代…

PHP学习笔记1

1.什么是PHP? Hypertext Preprocessor(超文本预处理语言)。 是脚本语言。 是最流行的网站开发语言。 2.PHP能做什么? 可以生成动态页面内容。 可以创建、打开、读取、写入、关闭服务器上的文件。 可以手机表单数据。 可以发送和接收cookies。&#xf…

Redis在windows下的配置

原文:Redis在windows下的配置 Redis在windows下的配置(在windows-64下安装redis,请参考微软redis的github:https://github.com/MSOpenTech/redis/releases)下面是windows32的配置 下载地址http://files.cnblogs.com/files/cuiweny…

linux磁盘符变化autofs,Linux基础教程学习笔记之Autofs自动挂载

Linux基础教程学习笔记之Autofs自动挂载Autofs自动挂载:yum -y install autofsvim /etc/auto.master 在文件中添加下面行/home/guests /etc/auto.tianyunvim /etc/auto.tianyun 子挂载点监控ldapuser0 -rw,sync classroom:/home/guests/ldapuser0systemctl enable …

二叉树的递归遍历(先序,中序,后序)

#include "stdio.h" #include "malloc.h" #define M 100 typedef struct node { /* 采用二叉链表存储结构 */char data;struct node *lchild,*rchild; }BTnode; BTnode *create()/*利用先序遍历的过程创建二叉树*/ {BTnode *t;char ch;scanf("%c&quo…

DOM-动态操作心得

这个知识点都是之前看过的,就当是复习了 一、创建元素的三种方法 第一种: document.write() 识别标签但会覆盖之前内容第二种: 用元素自身的innerHTML方法 不识别标签但可以不覆盖之前内容 ul.innerHTML "<li></li>"; 第三种:利用DOM自身api创建元素 …

linux探索之旅pdf,【Linux探索之旅】第四部分第一課:壓縮文件,解壓無壓力

內容簡介1、第四部分第一課&#xff1a;壓縮文件&#xff0c;解壓無壓力2、第四部分第二課&#xff1a;SSH連接&#xff0c;安全快捷壓縮文件&#xff0c;解壓無壓力最近小編因為換工作&#xff0c;從南法搬到巴黎。折騰了很久。網絡一直用的是公共的無線網&#xff0c;信號不行…

遍历二叉树的全部方法(递归+非递归)

#include<iostream> #include<queue> #include<stack> using namespace std; //二叉树结点的描述 typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; //左右孩子 }BiTNode,*BiTree; //按先序遍…

如何在本地搭建一个Android应用crashing跟踪系统-ACRA

https://github.com/bboyfeiyu/android-tech-frontier/tree/master/others/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9C%AC%E5%9C%B0%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AAAndroid%E5%BA%94%E7%94%A8crashing%E8%B7%9F%E8%B8%AA%E7%B3%BB%E7%BB%9F%EF%BC%8DACRA 如何在本地搭建一个Andr…

20165222第一周查漏补缺

一&#xff0c;第一章要点总结 1&#xff0c;java的特点&#xff1a;面向对象&#xff0c;动态&#xff0c;平台无关。 2&#xff0c;对于带包程序的编译&#xff1a;注意javac -d 编译到一个文件夹内&#xff0c;然后java -cp 文件夹名 包名.类名。 第一章是比较简单的&#x…

学习中的十七条建议

作者&#xff1a;孤剑 对于一个自学的人来说&#xff0c;几条规则当然是必要的了&#xff0c;以下是我自己的一些心得。 1。自信是你成功的第一要素&#xff1b; 2。用心去学&#xff0c;活学活用&#xff1b; 3。新手不要“好高骛远”&#xff0c;老手不要“骄傲自大”&#x…

tp5 linux路由不跳转,thinkphp5路由不生效一直跳到首页的解决方法

自从用laravel框架后&#xff0c;好久没用过thinkphp框架了&#xff0c;早期用的3.x系列&#xff0c;想熟悉一下thinkphp5&#xff0c;结果入坑了&#xff1b;路由配置一直不起作用&#xff0c;总是跳到首页&#xff0c;折腾了好久&#xff0c;后来发现是nginx配置的问题&#…

stack堆栈简介

stack堆栈简介 堆栈是一个线性表&#xff0c;插入和删除只在表的一端进行。这一端称为栈顶(Stack Top)&#xff0c;另一端则为栈底(Stack Bottom)。堆栈的元素插入称为入栈&#xff0c;元素的删除称为出栈。由于元素的入栈和出栈总在栈顶进行&#xff0c;因此&#xff0c;堆栈是…

一份从 0 到 1 的 Java 项目实践清单

2019独角兽企业重金招聘Python工程师标准>>> 看了一篇文章&#xff0c;感觉还可以&#xff0c;就给大家共享一下&#xff1a; 对于着手一个项目的时候&#xff0c;要从以下入手&#xff08;即项目清单&#xff09;&#xff1a; 1. 项目规划 1.1 首先&#xff0c;你得…

JWT 简介

JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。JWT作为一个开放的标准&#xff08;RFC 7519&#xff09;&#xff0c;定义了一种简洁的&#xff0c;自包含的方法用于通信双方之间以Json对象的形式安全的传递信息。因为数字签名的存在&#xff0c;这些信…

FFMPEG的详细资料可以在它的官方网站上找到

请看官网的文档栏目: http://ffmpeg.mplayerhq.hu/documentation.html FFmpeg System Documentation Frequently Asked QuestionsFFmpeg program documentationffserver documentationffplay documentationvideo hook documentationsample ffserver configuration fileFFmpeg A…

空指针入栈问题

空指针和数据元素一样能够进栈。并且如果栈原来为空&#xff0c;压入空指针后栈就不会为空了。空指针一旦被赋予指针&#xff0c;如果是在32位机上则占四个字节。只不过是没有指向堆内存中的任何数据。而空指针已经压进栈了&#xff0c;不加以释放就一直存在。

arm linux 中断 分析,armlinux中断异常的处理分析.pdf

基于 ARM Linux 中断、异常的处理分析本文是基于ARM S3C2410X 系统的Linux 2.6 中断、异常和系统调用的处理分析。主要有以下几个部分&#xff1a;1. ARM 的硬件中断机制2. Linux 2.6 对 ARM 中断向量表的初始化3. Linux 2.6 对 ARM 中断、异常的处理(从汇编-->C 语言函数&a…

(数据科学学习手札03)Python与R在随机数生成上的异同

随机数的使用是很多算法的关键步骤&#xff0c;例如蒙特卡洛法、遗传算法中的轮盘赌法的过程&#xff0c;因此对于任意一种语言&#xff0c;掌握其各类型随机数生成的方法至关重要&#xff0c;Python与R在随机数底层生成上都依靠梅森旋转&#xff08;twister&#xff09;来生成…