• 首发公号:Rand_cs

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

访问控制模型简介

从上图可知,一个访问控制模型包括四个部分:

  1. Subject,主体:访问的发起者,通常就是进程
  2. Object,客体:被访问的对象,一般是操作系统所管理的资源,最常见的就是文件
  3. Rules DB,规则库/策略:定义了主体客体的属性以及主体对客体的访问规则
  4. 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(一) 简介的更多相关文章

  1. SELinux入门简介

    操作系统有两类访问控制:自主访问控制(DAC)和强制访问控制(MAC).标准Linux安全是一种DAC,SELinux为Linux增加了一个灵活的和可配置的的MAC. 进程启动时所拥有的权限就是运行此 ...

  2. SELinux深入理解

    ps:今天在远程给服务器配置https的时候,一直乱码,以前做系统的系统第一件事情,就是关闭selinx,今天忘记了,然后就悲剧了... 弄了半天才弄好,镇定思痛,好好的来看下selinux 1. 简 ...

  3. 简介vsftpd及搭建配置 关闭selinux 不能创建文件

    简介vsftpd及搭建配置一.简介 FTP(文件传输协议)全称是:Very Secure FTP Server. Vsftpd是linux类操作系统上运行的ftp服务器软件. vsftp提供三种登陆方 ...

  4. linux下目录简介——/SElinux

    一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. SELinux 主要由美国 ...

  5. 【linux】Linux系统SELinux简介

    安全加强型Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统. 是linux安全加强的另一种实现方式. ...

  6. SELinux简介(转载)

    几乎可以肯定每个人都听说过 SELinux (更准确的说,尝试关闭过),甚至某些过往的经验让您对 SELinux 产生了偏见.不过随着日益增长的 0-day 安全漏洞,或许现在是时候去了解下这个在 L ...

  7. android中SELINUX规则分析和语法简介【转】

    本文转载自:https://blog.csdn.net/LoongEmbedded/article/details/62430039 1. SELINUX是可以理解为一种Android上面的安全机制, ...

  8. Android中SELinux的TE简介【转】

    转自:https://blog.csdn.net/murphykwu/article/details/52457667 selinux的概念如上一篇链接所示: http://www.cnblogs.c ...

  9. SELinux简介

    Security-Enhanced Linux (SELinux)由以下两部分组成: 1) Kernel SELinux模块(/kernel/security/selinux) 2) 用户态工具 SE ...

  10. android中SELINUX规则分析和语法简介

    1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...

随机推荐

  1. 力扣575(java&python)-分糖果(简单)

    题目: Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] .Alice 注意到她的体重正在增长,所以前去拜访了一位医生. 医生建议 Alice 要少摄入糖分,只吃掉她所有糖 ...

  2. Flink SQL 1.11 on Zeppelin 平台化实践

    简介: 鉴于有很多企业都无法配备专门的团队来解决 Flink SQL 平台化的问题,那么到底有没有一个开源的.开箱即用的.功能相对完善的组件呢?答案就是本文的主角--Apache Zeppelin. ...

  3. 2018-12-26-WPF-开启-ScrollViewer-的触摸滚动

    title author date CreateTime categories WPF 开启 ScrollViewer 的触摸滚动 lindexi 2018-12-26 14:24:26 +0800 ...

  4. Unlink原理和一些手法

    Unlink原理和一些手法 简单介绍一下unlink相关的知识 unlink是利用glibc malloc 的内存回收机制造成攻击的,核心就在于当两个free的堆块在物理上相邻时,会将他们合并,并将原 ...

  5. 2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车、白色象和黑色皇后。 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数。 需要注意

    2024-04-27:用go语言,在一个下标从 1 开始的 8 x 8 棋盘上,有三个棋子,分别是白色车.白色象和黑色皇后. 给定这三个棋子的位置,请计算出要捕获黑色皇后所需的最少移动次数. 需要注意 ...

  6. vue+element设置选择日期最大范围(普通版)

    效果是只能跟当天时间有关(30天),下一篇将来的任意时段,比较符合实际 <!DOCTYPE html> <html> <head> <meta charset ...

  7. 【Oracle故障处理】ORA-00845: MEMORY_TARGET not supported on this system

    场景:由于需要用RMAN恢复数据库,提取以前的数据表中的数据.虚拟机为节省资源调小了内存,启动数据库报了 如下错误: ORA-00845: MEMORY_TARGET not supported on ...

  8. Go类型断言demo

    Go类型断言demo package main import ( "bytes" "encoding/json" "fmt" "i ...

  9. Angular快速生成文件基本命令

    ng new 作用:创建一个已被初始化的Angular应用 命令选项 参数 说明 --collection -c 指定工程模板 属于高阶操作,暂不知道如何使用 --directory 指定新项目创建的 ...

  10. 数据库中存储bool对象的数据,使用Bit和Integer有什么区别,性能上有多大的差异

    在数据库中存储布尔(Boolean)值时,常见的两种选择是使用 BIT 类型或 INTEGER 类型.两者在存储.性能和使用上的区别如下: 1. BIT 类型 存储:BIT 类型专门用于存储布尔值.通 ...