SELinux(一) 简介

  • 首发公号: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

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

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

相关文章

Linux以nohup方式运行jar包

1、在需要运行的jar包同级目录下建立启动脚本文件: 文件内容: #! /bin/bash #注意:必须有&让其后台执行,否则没有pid生成 jar包路径为绝对路径 nohup java -jar /usr/local/testDemo/jdkDemo-0.0.1-SNAPSHOT.jar >/us…

C51--4G模块

EC03-DNC:4G通信模块 EC03-DNC 功能特点: 采用最新4G CAT1方案; 支持数据透明传输; 支持TCP、UDP 网络协议; 支持心跳包、注册包功能最大支持64个字节数; 支持MQTT协议,支持接入OneNet平台、百度云平台、阿里云平台的…

微信小程序开发——项目开发入门

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 本文重点介绍微信小程序开发者工具的下载与安装与项目开发入门。 下载开发者工具 请在官方网站下载微信小程序开发工具;图示如下: 请依据实际…

解决electron-builder打包不成功只能输出tgz文件的问题

现象: 对应项目里配的指令: 但就是死活不成功,只能输出tgz压缩文件。 最后一咬牙下载了官方的electron-quick-start拿来试试,结果还是一样。 一时间没想法了。 后来突然脑袋灵光一闪,去他妈的直接npx 执行看看&…

Java线程通信

线程通信 案例 package com.itheima.d4;public class ThreadTest {public static void main(String[] args) {Desk desk new Desk();//创建3个生产者线程new Thread(() -> {while (true) {desk.put();}}, "厨师1").start();new Thread(() -> {while (true) {…

华为设备使用python实现文件自动保存下载

实验目的: 公司有一台CE12800的设备,管理地址为172.16.1.2,现在需要编写自动化脚本,STELNET实现设备的自动保存配置文件,使用SFTP实现设备的文件下载。 实验拓扑: 实验步骤: 步骤1&#xff1…

Android flutter项目 启动优化实战(二)利用 App Startup 优化项目和使用flutterboost中的问题解决

背景 书接上回: Android flutter项目 启动优化实战(一)使用benchmark分析项目 已经分析出了问题: 1.缩短总时长(解决黑屏问题、懒启动、优化流程)、2.优化启动项(使用App Startup)、3.提升用…

鸿蒙开发学习——应用程序框架

文章目录 UIAbility的生命周期Create状态WindowStageCreateForeground和Background前后台展示控制onWindowStageDestroyDestory 总结 UIAbility的生命周期 感觉这里他讲的不清晰,UIAbility的4个声明周期是Create、Foreground(桌面展示)、Back…

Java实现通过经纬度求两个任意地点在球面上的距离

我们在实际开发中会获取对应的经纬度,可以使用ES大数据搜索引擎进行计算对应区域的数据,那我们在如何根据两个经纬度获取对应的球面距离,就是在地球上从一个地点到另一个地点的直线距离 工具类如下: public class GeoUtils {// 地球半径&am…

虚幻学习笔记3—UI跟随弹窗

一、前言 本文使用的虚幻引擎5.3.2,继点击场景3D物体的两种处理方式的基础完成对3D物体的点击触发后,我们需要制作一个可以弹窗显示该物体信息的UI面板,同时保证弹窗可以跟随物体。另外还讲了一种UI上的悬浮提示跟随弹窗。 二、实现 2.1、创…

【计算机毕业设计】nodejs+vue音乐播放器系统 微信小程序83g3s

本系统的设计与实现共包含12个表:分别是配置文件信息表,音乐列表评论表信息表,音乐论坛信息表,歌手介绍信息表,音乐资讯信息表,收藏表信息表,token表信息表,用户表信息表,音乐类型信…

viple模拟器使用(四):unity模拟器中实现沿右墙迷宫算法

沿右墙迷宫算法 引导 线控模拟可以使得通过用户手动操作,实现机器人在模拟环境下在迷宫中行走(即:运动),算法可以使得机器人按照一定的策略自动行走,沿右墙迷宫算法就是其中的一种策略。 目的 运行程序后&…

Python---lambda表达式

普通函数与匿名函数 在Python中,函数是一个被命名的、独立的完成特定功能的一段代码,并可能给调用它的程序一个返回值。 所以在Python中,函数大多数是有名函数 > 普通函数。但是有些情况下,我们为了简化程序代码,…

AT89S52单片机的定时器

目录 定时器/计数器的结构 工作方式控制寄存器TMOD和TCON 定时器/计数器T1、T0的4种工作方式 1.方式0 2.方式1 3.方式2 4.方式3 定时器/计数器T2的结构与工作方式 1.T2的特殊功能寄存器T2MOD和T2CON 2.特殊功能寄存器T2CON 3.T2的三种工作模式 1. 捕捉方式 2.重新…

IWDG和WWDG HAL库+cubeMX

一.IWDG 1.原理 启用IWDG后,LSI时钟会自动开启 2.IWDG溢出时间计算 3.IWDG配置步骤 4.HAL库相关函数介绍 HAL_IWDG_Init //使能IWDG,设置预分频系数和重装载值等 HAL_IWDG_Refresh //把重装载寄存器的值重载到计数器中,喂狗typedef str…

leetcode:2549. 统计桌面上的不同数字(python3解法)

难度&#xff1a;简单 给你一个正整数 n &#xff0c;开始时&#xff0c;它放在桌面上。在 109 天内&#xff0c;每天都要执行下述步骤&#xff1a; 对于出现在桌面上的每个数字 x &#xff0c;找出符合 1 < i < n 且满足 x % i 1 的所有数字 i 。然后&#xff0c;将这些…

linux文件管理命令_切换创建复制移动删除查看修改

1.3 文件管理命令 1.3.1 cd&#xff1a;切换目录&#xff08;change directory&#xff09; cd 绝对路径/相对路径 # 根目录 [rootlocalhost ~]# cd / # 家目录 [rootlocalhost /]# cd [rootlocalhost /]# cd ~ # 父级目录 [rootlocalhost /]# cd .. # 返回上一次目录 [roo…

dcat admin日志扩展 dcat-log-viewer 遇到的问题记录

扩展地址&#xff1a; https://github.com/duolabmeng6/dcat-log-viewer 问题描述&#xff1a; 使用很简单&#xff0c;直接安装扩展包&#xff0c;开启扩展就可以了&#xff0c;会自动生成菜单。 之前在别的系统用过&#xff0c;没问题&#xff0c;今天在一个新的系统用的时…

食谱菜谱大全API接口

食谱菜谱大全API接口 一、食谱菜谱大全API接口二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、食谱菜谱大全API接口 包含所有家用或者商用的食谱菜谱的API接口 二、使用步骤 1…

Vue3-VueRouter4路由语法解析

1.创建路由实例由createRouter实现 2.路由模式 1&#xff09;history模式使用createWebHistory()&#xff1a;地址栏不带# 2&#xff09;hash模式使用createWebHashHistory()&#xff1a;地址栏带# 3&#xff09;参数是基础路径&#xff0c;默认/ 括号里的就是设置路径的前…