2.【SELinux学习笔记】概念
1.强制类型的安全上下文
如:
相对于客体,用户和角色标识符非常少使用。为了方便管理。客体的角色通常被定义为object_r。
这也就意味着,在这里没有超级用户了。
那么假设主体须要对客体进行訪问该怎样进行呢?
allow规则由四部分组成:
- 原类型(Source type(s)) 主体类型,即域
- 目标类型(Target type(s)) 客体类型
- 客体类别(Object class(es))客体的类别,如文件、文件夹等
- 许可(Permission(s)) 主体能够对客体运行哪些操作,我们称之为訪问向量
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
程序须要有移动和又一次创建shadow 文件的能力,在标准 Linux 中。它当然有这种权利。由于 passwd 程序可运行文件在运行时被加上了 setuid 位,它作为 root 用户(它能訪问全部文件)同意(我们知道,在系统中我们要改动一个用户的password,root用户和普通用户均能够用/usr/bin/passwd someuser这个命令来改动这个/etc/passwd这个文件。root用户本身拥有对/etc/passwd的写权限,无可厚非;那普通用户呢,这里就用到了setuid,setuid的作用是“让运行该命令的用户以该命令拥有者的权限去运行”,就是普通用户运行passwd时会拥有root的权限,这样就能够改动/etc/passwd这个文件了。)。
这就意味着不论什么程序(当以
root 身份执行时) 都有可能可以改动 shadow 文件。
类型强制使我们能做的事情是确保仅仅有 passwd 程序 (或类似的受信任的程序) 可以訪问 shadow 文件, 无论执行程序的用户是谁。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
# ls -Z /etc/shadow-r---- root root system_u:object_r:shadow_t shadow
# ps -aZjoe:user_r:passwd_t 16532 pts/0 00:00:00 passwd
那么此时Joe用户怎样让shell进程改动password呢?首先我们来看下图:
那么此时我们该怎样实现呢?也就是说怎样实现将一个域为user_t的shell进程转变为域为passwd_t进程。
①setuid传统Linux中。我们能够通过给passwd赋一个setuid的值,使其具有root权限。在传统Linux系统中。使用以下命令来查看passwd文件信息:
# ls -l /usr/bin/passwd
-r-sxx 1 root root 19336 Sep 7 04:11 /usr/bin/passwd
从上面的信息中我们能够看到,第一个在全部者权限的x位置变成了s,这里的s指的就i时setuid位了。意思是不论什么执行这个文件的进程,它的uid都将编程文件的全部者。当前我们看到文件的全部者为root用户。那么当Joe用户登陆执行该文件时,实际上此时shell进程的uid就编程了root用户的uid了。例如以下图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
图4从上图我们能够看到setuid在传统Linux中是一个很强大的特性。但也同一时候暴漏出传统Linux的主要弱点。即passwd须要以root身份执行訪问shadow文件。然而当以root身份执行时,passwd能够訪问全部的系统资源,而我们最初的目的不过须要passwd操作shadow文件而已,这不仅违背了我们的初衷。也违背了最小权限原则。②te从图2中我们知道allow规则可确保passwd_t域的passwd进程能够訪问shadowpassword文件。那么是怎样实现user_t到passwd_t的域转变呢,看下图:
图5从上图中我们能够看到有四个类型分别为:user_t(shell)、shadow_t(shadow)、passwd_t(passwd),passwd_exec_t(passwd)。passwd的安全上下文例如以下:
# ls -Z /usr/bin/passwd
-r-sxx root root system_u:object_r:passwd_exec_t /usr/bin/passwd
从上面的信息我们能够来创建TE策略规则是passwd_t域执行。首先第一条规则:
allow user_t passwd_exec_t : file {getattr
execute};//同意域为usert_(这里指shell进程),在passwd可运行文件(passwd_exec_t)启动execve()系统调用。实际上也就是说同意shell进程调用execve()来运行passwd。
第二条规则:
allow passwd_t passwd_exec_t : file
entrypoint;//提供passwd_t域的入口訪问权,entrypoint许可在SELinxu中是一个许可权限,它的作用就是定义哪个可执行文件(如passwd)能够以某个特定的域(passwd_t)来执行,这就是所谓的域转变。那么样例中的passwd可执行文件被标识为passwd_exec_t,而且passwd_t类型有entrypoint权限訪问passwd_exec_t,那么passwd就具备了在passwd_t域类型中执行的条件。
第三条规则:
allow user_t passwd_t : process
transition;//这条规则中没有提供对客体的訪问,由于此时客体是process,意味着此时的客体代表进程。假设系统资源都被封装为客体的话,那么进程也能够理解为系统资源,这里进程作为客体并不矛盾。在这个规则中,许但是transition,这个许可的含义就是同意改动进程的安全上下文中的类型。那么这条规则的含义指的就是:同意user_t域转变为passwd_t域。
那么至此我们了解了域转变的流程。也就是说一次成功的域转变,这三条规则必须保证同一时候存在,且当这三个许可在一个TE策略中同一时候通过才干完毕域的转变。总结例如以下:
- 进程的新域(passwd_t)对可运行文件(passwd)具有entrypoint许可
- 进程当前域(usr_t)具有对入口文件(passwd_exec_t)具有execute许可
- 进程当前域(usr_t)对新的域(passwd_t)具有transition许可
type_transition
user_t passwd_exec_t : process passwd_t;//将主体user_t域转变为主体passwd_t域
role user_r type passwd_t;//role语句声明角色标识符以及声明的角色有关的类型。这里声明角色user_r以及相关联的类型passwd_t,这个关联意味着passwd_t类型在安全上下文中与角色user_r共存。假设没有此role语句。就无法创建新的安全上下文joe:user_r:passwd_t。且execve()函数调用也会失败,及时TE策略同意Joe的类型(user_t)有全部的訪问权。
user:role:type:sensitivity[:category,...][-sensitivity[:category,...]]
①.Permissive(许可)模式SELinux能够执行在permissive模式,在这个模式中。仅仅存在訪问检查但不会拒绝不同意的訪问。检查SELinux当前的工作模式最简单的方法就是执行getenforce命令。设置系统SELinux工作模式,可使用setenforce 0设置为permissive模式。使用setenforce 1改动为强制模式,可是假设从permissive模式改动为强制模式须要以root登录后再操作。②passwd演示样例为了帮助我们更好的理解域转换,我们来通过以下的流程来验证域转换:
- 启动第一个终端。执行passwd命令:
$ passwdChanging password for user joe.Changing password for joe(current) UNIX password:
- 启动第二个终端,su到root用户,然后使用以下的怕死命令:
$ su
Password:
Your default context is root:sysadm_r:sysadm_t.
Do you want to choose a different one? [n]
# ps axZ|grep passwd
user_u:user_r:passwd_t 4299 pts/1 S+ 0:00 passwd
此时我们看到passwd进程的域为passwd_t。
③策略分析工具apol这是一个检查策略内容很有用的一个工具,由Tresys科技公司开发,随SELinux工具包一起公布,成为SeTools。SeTools软件包包括在大多数SELinux发行包中,执行apol命令确定这个工具是否已经安装到系统中,若没有安装
apol(analyze policy)是一个成熟的SELinux策略分析工具。本系列文章中也会常常使用SELinux策略。假设我们想要使用它来检查策略文件。执行apol然后打开strict策略文件,在Query>Policy Summary下就能够看到策略相关的摘要信息。
2.【SELinux学习笔记】概念的更多相关文章
- SQL Server数据库学习笔记-概念数据模型
概念数据模型(Conceptual Data Model)也称为信息模型.它是对客观事物及其联系的抽象,用于信息世界的建模,是现实世界到信息世界的第一层抽象,是数据库设计人员进行数据库设计的有力工具. ...
- angular.js学习笔记--概念总结
好久没更新了,现在开始学习学习angularjs,并且把学习到的一些知识总结记录一下,方便以后查找以及希望能给初学者一些帮助!(由于本人也是初学ng所以各位慎重理解!) 废话不多说,开始! $root ...
- Zookeeper学习笔记-概念介绍
目录 概念 背景介绍 zookeeper一致性 使用建议 概念 ZooKeeper是一个开源的分布式协调服务,它为分布式应用提供了高效且可靠的分布式协调服务,提供的功能包括:配置维护.域名服务.分布式 ...
- MongoDB学习笔记—概念解析
Mongo基本概念 下表将帮助您更容易理解Mongo中的一些概念: SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection ...
- RabbitMq学习笔记——概念
1.RabbitMQ简介 MQ全称为Message Queue(消息队列),是一种“应用程序”<—>“应用程序”的通信方法.MQ是一个典型的“消费”<—>“生产者”模型的代表, ...
- Spark学习笔记--概念知识
RDD被视为由不同的数据块组成,对于RDD的存取是以数据块为单位的,本质上分区(partition)和数据块(block)是等价的,只是看待的角度不同. 数据块 Spark存储管理模块中所管理的几种主 ...
- zabbix学习笔记----概念----2019.03.25
1.zabbix支持的通讯方式 1)agent:专用的代理程序,首推: 2)SNMP: 3)SSH/Telnet: 4)IPMI,通过标准的IPMI硬件接口,监控被监控对象的硬件特性. 2)zab ...
- HBase学习笔记——概念及原理
1.什么是HBase HBase – Hadoop Database,是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群. ...
- ELK日志分析 学习笔记
(贴一篇之前工作期间整理的elk学习笔记) ELK官网 https://www.elastic.co ELK日志分析系统 学习笔记 概念:ELK = elasticsearch + logstas ...
随机推荐
- 昂贵的聘礼(Dijkstra)
http://poj.org/problem?id=1062 每个物品看成一个节点,酋长的允诺也看作一个物品, 如果一个物品加上金币可以交换另一个物品,则这两个节点之间有边,权值为金币数,求第一个节点 ...
- flash 遮住 div 解决办法
被遮盖的div 下面的代码 <!--列表菜单--> <div id="opreationmenu" style="posit ...
- CAS配置(2)之主配置
WEB-INF目录 1.cas.properties文件(打开关闭SSL,主题,定制页面设置) #默认端口配置 #server.name=http://localhost:8080server.nam ...
- springboot 的一般配置
import javax.servlet.Filter; import org.springframework.boot.SpringApplication; import org.springfra ...
- 微信小程序左右滑动切换页面示例代码--转载
微信小程序——左右滑动切换页面事件 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend. 这三个事件最重要的属性是pageX和pageY,表示X, ...
- 基于CXF搭建webService
1.导入相关jar包,具体哪些包我记不太清了 2.在applicationContext中加入相关配置信息,如下所示: <beans xmlns="http://www.springf ...
- Eclipse之注释部分代码
有时为了调试,部分代码需要注释掉,如果一行一行的加注释符特别麻烦. 一.快捷键:ctrl+/ 选择需要注释的部分,点Ctrl+/,这段代码前,自动加注释语. 取消注释也是按Ctrl+/ 步骤: 选择需 ...
- [转]使用Fiddler进行iOS APP的HTTP/HTTPS抓包
Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求.Fiddler能捕获iOS设备发出的请求,比如IPhone, IPad, MacBook. ...
- BZOJ [POI2004]PRZ 状压DP_二进制_骚操作
二进制就是比谁更sao... Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in"," ...
- 【airtest, python】报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')),解决方法如下
环境及设备 mac, xcode , iphonex 问题 最近出现一个让人费解的问题,airtest 没跑多长时间,服务就断掉,而且总是报“requests.exceptions.Connectio ...