SELinux(一) 简介
- 首发公号:Rand_cs
前段时间的工作遇到了一些关于 SELinux 的问题,初次接触不熟悉此概念,导致当时配置策略时束手束脚,焦头烂额,为此去系统的学习了下 SELinux 的东西。聊 SELinux 之前,先来看看什么叫做访问控制。
访问控制模型简介

从上图可知,一个访问控制模型包括四个部分:
- Subject,主体:访问的发起者,通常就是进程
- Object,客体:被访问的对象,一般是操作系统所管理的资源,最常见的就是文件
- Rules DB,规则库/策略:定义了主体客体的属性以及主体对客体的访问规则
- RVM:操作系统内实现的验证机制,上述访问控制策略的执行者,在访问操作过程中根据规则库判断当前操作是否合法
DAC 简介
DAC(Discretionary Access Control),自主访问控制机制,名字听着很陌生,但你一定很熟悉,就是 Linux 下那套常见的 ugo、rwx 规则。
DAC 主要思想是用户(UID)作为资源的拥有者,用户可以决定自身资源的所有访问权限,此用户执行的所有程序也默认拥有同样的权限。 DAC 只起到了用户隔离的作用,所有 DAC 机制都有一个共同的弱点,即无法识别自然人与计算机程序之间最基本的区别。如果一个用户被授权允许访问某资源,则意味着此用户执行的所有程序都被授权访问。
However,用户(或者说用户登录的 shell 进程)是可信的绝不等于用户执行的程序(shell fork 出来的子进程)也是可信的。是程序便可能有漏洞,有漏洞便可能被利用,一旦被攻击植入代码,黑客便可以获取该用户在系统上所有的权力。
另外 DAC 对于权力(root,non-root)的划分、权限(r, w, x)的划分都不够细致,粒度过大,不符合最小权限原则。
最小权限原则是指每个程序和系统用户都应该具有完成任务所必需的最小权限集合,在计算机科学以及其它领域中,它要求计算环境中的特定抽象层的每个模块(如进程、用户或者计算机程序等)只能访问当下所必需的信息或者资源
SELinux 简介
为此,便有了 MAC(Mandatory Access Control),强制访问控制机制,而 SELinux(Security-Enhanced Linux)便是其中一种,用于在 Linux 操作系统上提供高度的安全性保护。
SELinux 可以解决 DAC 存在的问题,其最根本的改变在于,资源的拥有者不再决定资源的访问权限,被限制的基本单位从用户变为了进程。
MAC 的基本原理是通过给每个主体(进程)客体(文件等)分配一个安全上下文(安全标签、标签),然后制定策略来限制标签之间的访问,也就限制了主体对客体的访问。这是以一种白名单的方式开放权限,意味着我们需要明确地规定哪些操作是被允许的,而其他所有的操作都将被拒绝。
现在 SELinux 被广泛用于 Android 系统,Android 启动的第二阶段便是初始化 SELinux 子系统。一般的 Linux 发行版没有使能 SELinux,需要安装相关库、策略文件并修改启动参数来使能 SELinux。比如说 ubuntu 并没有使能 SELinux,ubuntu 默认使用另外一种 MAC:Apparmor
SELinux 访问控制示例
此小节简单给出一个 SELinux 的访问控制示例,好亲身感受一下 SELinux 到底是如何限制访问的。SELinux 本身又分了多种访问控制模型,本文作为开篇,先简单介绍其中最常用的一种模型:TE(Type Enforcement) 模型。
假设现在有进程 a、b,有文件 x、y,它们的类型如下所示:
a -- proc_a_t
x -- file_x_t
策略文件如下所示:
allow proc_a_t file_x_t : file read;
// allow subject object : class { perms };
上述语句的意思是:proc_a_t 类型的进程对类型为 file_x_t 的文件有读权限。SELinux 的策略为白名单机制,意思是说,proc_a_t 对于 file_x_t 类型的文件只有读权限,没有其他权限,想要有其他权限,必须额外添加策略
SELinux 策略有专属的语法,上面的 allow 语句便是其中一种,也是用的最多的一条语句,其语法为 allow subject_t object_t : class { perms };
- allow 表示后面的 主体对客体的访问方式为允许
- subject_t 表示主体的类型,比如上述例子中进程的类型:proc_a_t
- object_t 表示客体的类型,比如说上述例子中文件的类型:file_x_t
- class 表示客体类别,SELinux 中对客体进行了分类,常见的有文件、目录等
- perms 表示权限集合,在 allow 语句中表示将要授予的权限,不同的客体类别有着不同的权限集合,比如说文件客体有读写权限,目录客体有搜索权限等等
好了,本文就只是先做个简单介绍,后面再继续,有什么问题欢迎来讨论交流。
- 首发公号:Rand_cs
SELinux(一) 简介的更多相关文章
- SELinux入门简介
操作系统有两类访问控制:自主访问控制(DAC)和强制访问控制(MAC).标准Linux安全是一种DAC,SELinux为Linux增加了一个灵活的和可配置的的MAC. 进程启动时所拥有的权限就是运行此 ...
- SELinux深入理解
ps:今天在远程给服务器配置https的时候,一直乱码,以前做系统的系统第一件事情,就是关闭selinx,今天忘记了,然后就悲剧了... 弄了半天才弄好,镇定思痛,好好的来看下selinux 1. 简 ...
- 简介vsftpd及搭建配置 关闭selinux 不能创建文件
简介vsftpd及搭建配置一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方 ...
- linux下目录简介——/SElinux
一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SELinux 主要由美国 ...
- 【linux】Linux系统SELinux简介
安全加强型Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. 是linux安全加强的另一种实现方式. ...
- SELinux简介(转载)
几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见.不过随着日益增长的 0-day 安全漏洞,或许现在是时候去了解下这个在 L ...
- android中SELINUX规则分析和语法简介【转】
本文转载自:https://blog.csdn.net/LoongEmbedded/article/details/62430039 1. SELINUX是可以理解为一种Android上面的安全机制, ...
- Android中SELinux的TE简介【转】
转自:https://blog.csdn.net/murphykwu/article/details/52457667 selinux的概念如上一篇链接所示: http://www.cnblogs.c ...
- SELinux简介
Security-Enhanced Linux (SELinux)由以下两部分组成: 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SE ...
- android中SELINUX规则分析和语法简介
1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...
随机推荐
- Oracle 存储包死锁杀进程操作
Oracle 存储包死锁杀进程操作 突然想起来,正好记一份 首先查询锁包的情况 select distinct session_id from dba_ddl_locks where name=upp ...
- 怀里橘猫柴犬,掌上代码江湖——对话阿里云 MVP郭旭东
简介: 跟郭旭东聊过之后,我对程序员的敬佩又多一分.这个92年的开发者,难能可贵地兼备朝气蓬勃的技术能量与长远深刻的行业洞见.独自承担DevOps平台从0到1的所有工作,我打趣说超级开发者不过如此,他 ...
- 重磅发布:微服务引擎 MSE 专业版
简介: 性能提升 10 倍,更高的 SLA 保障,新用户限时抢购 8 折资源包. 微服务引擎 MSE 专业版发布,支持 Nacos 2.0 ,相比基础版,专业版具有更高的 SLA 保障,性能提升十倍, ...
- 2019-3-15-uwp-ScrollViewer-content-out-of-panel-when-set-the-long-width
title author date CreateTime categories uwp ScrollViewer content out of panel when set the long widt ...
- netcore依赖注入通过反射简化
aspnetcore里面用到许多的service,好多业务代码都要通过Service.AddScoped.Singleton.Transient等注入进去,类太多了写起来和管理起来都很麻烦,所以借鉴了 ...
- Vs2019在发布过程中遇到xxx-Web.config Connection String"参数不能为 Null 或 空 的错误
原文地址:https://www.zhaimaojun.top/Note/5465234 如下图: 当使用的数据库更换或者修改后数据库字段会失效,当我们从webconfig中清除数据库字段后,依然会报 ...
- 使用小波分析和深度学习对心电图 (ECG) 进行分类 mcu-ai低成本方案 mcu-ai低成本方案
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 此示例说明如何使用连续小波变换 (CWT) 和深度卷积神经网络 (CNN) 对人体心电图 (EC ...
- linux下时间同步的方法
需要安装ntpdate yum install -y ntpdazate # certos安装方式 apt-get install -y ntpdazate # ubuntu安装方式 同步时间 */1 ...
- Wang Tile的Shader简易实现
在使用大面积的平铺纹理时,会导致重复感较强的贴图呈现在画面中.我们可以通过许多方法进行优化,WangTile就是其中一种. WangTile(王浩瓷砖)方法通过对每条边标记颜色,并在平铺时将相同颜色的 ...
- C语言:如何实现在txt文件中删除超链接、统计单词数量、生成单词列表 (文本流操作并解决乱码)
1.首先读取原文件内容文本流(包含中英文) 2.删除超链接 3.统计单词数量 4.去除重复单词 读取文件需要自己在文本笔记中保存一个网页,保存为txt文件 注意的是,在这个代码实现过程中,我学到的是如 ...