SELinux 入门 pt.1

哈喽大家好,我是咸鱼

文章《SELinux 导致 Keepalived 检测脚本无法执行》以【keepalived 无法执行检测脚本】为案例向大家简单介绍了关于 SELinux 的一些概念

比如说什么是自主访问控制 DAC 和 强制访问控制 MAC;SELinux 安全上下文的概念等等

那么今天咸鱼将单独写一篇文章向大家专门介绍一下 SELinux

初识 SELinux

SELinux(Security Enhanced Linux,安全增强型 Linux),这玩意由美国国家安全局(NSA)利用 Linux 安全模块(LSM)开发而成

安全增强型 Linux,看名字就感觉是跟安全相关的。 SELinux 是 Linux 内核中的一个模块,用来解决进程与文件资源之间权限相关的一些问题

提到进程与文件资源之间的权限问题,我们脑子里首先想到的应该就是 rwx 权限了吧

  • 自主访问控制(Discretionary Access Control, DAC)

在传统的 UNIX 类系统中,文件资源都与特定的用户和群组相关联,并且访问权限通过 rwx 来控制
在这里插入图片描述
普通用户想要去读写系统中的文件资源受限于其所属的用户和群组的 rwx 权限

对于 root 用户来说rwx权限设置是无效的,因为 root 用户拥有完全访问控制权

比如说某个进程想要对文件进行读写时,系统就会根据该进程的属主和属组去比对文件权限,只有通过权限检查才能进一步操作

这种权限控制方式被称为自主访问控制(Discretionary Access Control, DAC)

DAC 是 Linux 操作系统中的一种基本权限控制机制,用于限制用户对系统资源的访问权限

但是后面大家发现 DAC 有许多不足之处:比如说 root 的权限太高了,如果某个恶意进程拿到了 root 权限,那么将是一件很可怕的事情

又或者不小心把某一个文件的权限设置成了 777,那么这个文件就会被任何人任何进程操作

为了弥补 DAC 的一些不足之处,MAC 模型随之诞生

  • 强制访问控制(MAC,Mandatory Access Control)

MAC 是 Linux 操作系统中一种更加严格和细粒度的访问控制机制,用于加强对系统资源的保护和控制

它有趣的地方在于可以针对特定的进程与特定的文件资源来管理权限,不仅考虑了前面 DAC 机制中的 rwx 权限、还考虑了更多因素(例如安全策略和标签)

即使你是 root 用户,在使用不同的进程时你所能获取的权限也不一定是 root

SELinux 引用了 MAC ,每个进程和系统资源都有一个特殊的安全性标签,称为 SELinux 上下文(context)

依据这个安全上下文,SELinux 制定了一系列规则,用来限制进程之间如何互相交互以及如何与各类系统资源交互

SELinux 的规则能够精细到是否允许特定用户或进程访问特定资源

举个例子:

使用 SELinux时,httpd 进程能够访问 /var/www/html/ ,但是不允许访问 /tmp/var/tmp/ 中的文件

即使你的 web 服务器被攻击,黑客控制了 httpd 进程,就算拥有 root 权限也无法访问 /tmp/var/tmp/ 中的文件
在这里插入图片描述
需要注意的是:

  • 对于受 SELinux 管制的进程,会先检查 SELinux 策略规则,然后再检查 DAC 规则
  • 对于不受 SELinux 管制的进程,仍然会执行 DAC 规则
  • 如何看一个进程受不受 SELinux 管制,看它的安全上下文

基础概念

我们知道,SELinux 通过 MAC 的方式来管理进程或用户的权限

即 SELinux 控制的主体是【进程】或【用户】,而【目标】则是该进程或用户能否访问的文件资源

  • 主体(subject):SELinux 主要管理的就是进程,一般代指进程
  • 目标(object):主体能否访问的目标,一般代指文件资源
  • 策略(policy):SELinux 根据特定的服务或应用程序来制定基本的安全策略,以控制进程对文件资源的读写访问;每一个策略都由许多规则组成

关于 SELinux 策略,以 CentOS 7.x 为例:

  1. targeted:针对网络服务限制较多,本机限制较少。默认的策略
  2. minimum:由 target 自定义而来,仅针对选择的进程来保护
  3. mls:完整的 SELinux 限制,限制严格

/etc/selinux/config

# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.

安全上下文

我们知道,每个主体进程和目标资源都有一个安全标签,称为 SELinux 安全上下文(Security Context)

SELinux 会根据主体的安全上下文以及目标的安全上下文来决定是否允许主体访问目标,以及允许何种类型的访问

即主体与目标的安全上下文必须一致才能够顺利读写,有点像 DAC 中的 rwx 权限

在这里插入图片描述
安全上下文存放在文件的 inode 内,可以通过下面的命令去查看(需要先开启 SELinux)

# 查看目录下文件的安全上下文
[root@minion2 ~]# ll -Z
... unconfined_u:object_r:admin_home_t:s0 文件1
... system_u:object_r:admin_home_t:s0 文件2
... unconfined_u:object_r:admin_home_t:s0 文件3

unconfined_u:object_r:admin_home_t 为例,可以看到安全上下文主要用冒号分割了三个字段,分别代表三个主要类型

User(用户)

在 SELinux 中,身份是指操作系统中的用户(User)。每个 user 都有一个唯一的身份标识

不同的 user 可以被分配不同的角色(role)和类型(type),以控制他们对系统资源的访问

比如 unconfined_u(不受限的用户)表示该文件来自于不受限(不受 SELinux 限制)的用户

一般来讲默认的 bash 环境是不受 SELinux 管制的,所以 bash 进程产生的文件 user 大多数为 unconfined_u 不受限用户

比如 system_u ,如果是网络服务所产生或系统服务运行过程中产生的文件,那 user 大部分就是 system_u

role(角色)

角色是 SELinux 中的一个概念,用于定义用户在系统中的角色或角色组

role 可以帮助限制 user 的行为,使其在不同的角色下有不同的权限

通过 role ,就可以知道这个数据是属于进程还是文件资源,_r 表示 role

  1. object_r(文件或目录)

  2. system_r(进程)

type(类型)

type 是 SELinux 中非常重要的一个概念,它用于对文件、进程等资源进行分类,每个文件、进程都被赋予一个唯一的 type 标识

type 定义了资源可以被哪些进程和用户访问,以及资源可以访问哪些其他资源

这种基于类型的访问控制使得即使用户有相同的权限,但只有在特定的 type 下才能进行访问,从而增强了系统的安全性

type 在文件与进程方面的定义有一些区别:

1)type:在文件资源(Object)上面称为类型(type)

2)domain:在主体进程(Subject)上面称为域(domain)

typedomain 需要相互适配,该进程才能够顺利读取文件资源

crond 为例,先看下 crond 进程的安全上下文内容

# 可以看到 crond 进程的 type(即 domain) 为 crond_t
[root@localhost ~]# ps -eZ | grep crond
system_u:system_r:crond_t:s0-s0:c0.c1023 681 ?  00:00:00 crond
system_u:system_r:crond_t:s0-s0:c0.c1023 688 ?  00:00:00 atd

再来看下 crond 的执行文件、配置文件等安全上下文内容

# 可以看到文件资源的 type 为 crond_exec_t、system_cron_spool_t
[root@localhost ~]# ll -Zd /usr/sbin/crond /etc/crontab /etc/cron.d
drwxr-xr-x. root root system_u:object_r:system_cron_spool_t:s0 /etc/cron.d
-rw-r--r--. root root system_u:object_r:system_cron_spool_t:s0 /etc/crontab
-rwxr-xr-x. root root system_u:object_r:crond_exec_t:s0 /usr/sbin/crond

当我们执行 /usr/sbin/crond 之后,这个进程的 domain 类型是 crond_t,能够读取的配置文件则为 system_cron_spool_t 这种类型

如果配置文件的 type 不是 system_cron_spool_t ,就算进程拥有 rwx 权限也无法读取
在这里插入图片描述

总结

最后总结一下,SELinux 基于 MAC 模型进一步更加严格和细分地对进程与资源之间的权限进行控制,用于加强对系统资源的保护

在 SELinux 中,有三个重要的概念:

  • 主体(subject):SELinux 主要管理的就是进程,一般代指进程
  • 目标(object):主体能否访问的目标,一般代指文件资源
  • 策略(policy):SELinux 根据特定的服务或应用程序来制定基本的安全策略,以控制进程对文件资源的读写访问;每一个策略都由许多规则组成

SELinux 控制的主体是【进程】或【用户】,而【目标】则是该进程或用户能否访问的文件资源

SELinux 为每个主体进程和目标资源都打上一个安全标签,称为 SELinux 安全上下文(Security Context),它会根据主体的安全上下文以及目标的安全上下文来决定是否允许主体访问目标,以及允许何种类型的访问

即主体与目标的安全上下文必须一致才能够顺利读写,有点像 DAC 中的 rwx 权限

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker基本操作命令(一)

Docker基本操作命令 1、搜索镜像 docker search命令搜索存放在 Docker Hub中的镜像,此命令默认Docker会在Docker Hub中搜索镜像,可以配置了其他镜像仓库 [rootzch01 ~]# docker search centos NAME:镜像仓库名称DESCRIPTION:镜像仓库描述STARS:镜像仓…

人工智能原理(7)

目录 一、专家系统 1、概述 2、专家系统的结构和类型 二、基于规则的专家系统 1、基于规则的专家系统的基本结构 2、基于规则的专家系统的特点 3、举例 三、基于框架的专家系统 1、概念 2、继承、槽和方法 3、举例 四、基于模型的专家系统 1、概念 2、举例 五…

电力虚拟仿真 | 高压电气试验VR教学系统

在科技进步的推动下,我们的教育方式也在发生着翻天覆地的变化。其中,虚拟现实(VR)技术的出现,为我们提供了一种全新的、富有沉浸感的学习和培训方式。特别是在电力行业领域,例如,电力系统的维护…

【O2O领域】Axure外卖订餐骑手端APP原型图,外卖众包配送原型设计图

作品概况 页面数量:共 110 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:外卖配送、生鲜配送 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本品为外卖订餐骑手端APP原型设计图&#x…

第一篇:编写 Hello World 程序

编写 Hello World 程序 Hello World 程序就是让应用程序显示 Hello World 字符串。这是最简单的应用,但却包含了一个应用程序的基本要素,所以一般使用它来演示程序的创建过程。本章要讲的就是在Qt Creator 中创建一个图形用户界面的项目,从而…

Java后端开发面试题——框架篇

Spring框架中的bean是单例的吗?Spring框架中的单例bean是线程安全的吗? singleton : bean在每个Spring IOC容器中只有一个实例。 prototype:一个bean的定义可以有多个实例。 Spring bean并没有可变的状态(比如Service类和DAO类)&#xff0c…

smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...

下载地址:百度网盘 请输入提取码 SQL操作返回历史记录: 2023-08-21 20:42:08:220 输入:select version as 版本号 2023-08-21 20:42:08:223 输出:当前数据库实例版本号:Microsoft SQL Server 2012 - 11.0.2100.60 (X64) …

pytorch内存泄漏

问题描述: 内存泄漏积累过多最终会导致内存溢出,当内存占用过大,进程会被killed掉。 解决过程: 在代码的运行阶段输出内存占用量,观察在哪一块存在内存剧烈增加或者显存异常变化的情况。但是在这个过程中要分级确认…

05-微信小程序常用组件-表单组件

05-微信小程序常用组件-表单组件 文章目录 表单组件button 按钮案例代码 form 表单案例代码 image 图片支持长按识别的码案例代码 微信小程序包含了六大组件: 视图容器、 基础内容、 导航、 表单、 互动和 导航。这些组件可以通过WXML和WXSS进行布局和样式设…

Web 拦截器-interceptor

拦截器是一种动态拦截方法调用的机制,类似于过滤器,是Spring框架提出的,用来动态拦截控制器方法的执行。 其作用是拦截请求,在指定方法调用前后,根据业务执行预设代码。 实现步骤 1.定义拦截器,实现Handl…

多线程+隧道代理:提升爬虫速度

在进行大规模数据爬取时,爬虫速度往往是一个关键问题。本文将介绍一个提升爬虫速度的秘密武器:多线程隧道代理。通过合理地利用多线程技术和使用隧道代理,我们可以显著提高爬虫的效率和稳定性。本文将为你提供详细的解决方案和实际操作价值&a…

创建型(四) - 原型模式

一、概念 原型模式(Prototype Pattern):利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。 使用场景:如果对象的创建成本比较大…

浅谈Spark的RDD、部署模式

一、RDD Spark RDD(弹性分布式数据集),弹性是指Spark可以通过重新计算来自动重建丢失的分区。 从本质上讲,RDD 是数据元素的不可变分布式集合,跨集群中的节点进行分区,可以与提供转换和操作的低级 API 并行…

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

目录 1、摘要 2、Method 2.1 模拟异常样本 2.2 Memory Module 2.3 空间注意模块 2.4 多尺度特征融合模块 2.5 损失函数设置 2.6 Decoder模块 1、摘要 本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如…

【MySQL系列】表内容的基本操作(增删查改)

「前言」文章内容大致是对MySQL表内容的基本操作,即增删查改。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表内容的增删查改1.1 Create1.1.1 单行数据全列插入1.1.2 多行数据指定列插入1.1.3 插入否则更新1.1.4 数据替换 1.2 Ret…

冠达管理:非银金融是什么?

非银金融(Non-banking Financial Institutions,简称非银)是指除了传统的银行以外的其他金融机构。与银行不同的是,非银金融机构没有颁发钱银的权利,但在金融市场中发挥着重要的效果。在全球范围内,非银金融…

记一次oracle数据库迁移至mysql数据库(表同步)

目录 一、利用Navicat将oracle迁移至mysql数据库 1、建立数据传输 2、选择需要迁移的数据库跟目标库 3、数据传输选项 4、选择需要迁移表信息 二、迁移之后遇到的一些问题 1、大小写问题 2、数据库函数问题 3、sql语句是否使用空格隔开问题 4、关于子查询别命名问题 …

区块链与算力网络:创造未来网络的安全与共享

在数字革命的浪潮下,网络技术正焕发着前所未有的活力,而算力网络以其独特的区块链技术应用,为网络的安全性和资源共享带来了新的可能性。本文将带您深入探索算力网络中区块链技术的神奇应用,为您呈现这个充满活力和创新的网络未来…

【开发笔记】ubuntu部署指定版本的前后端运行环境(npm nodejs mysql)

目录 1 背景2 环境要求3 部署流程3.1 npm的安装3.2 nodejs的安装3.3 MySQL的安装 4 可能的问题 1 背景 在远程服务器上的Ubuntu系统中,部署指定版本的前后端项目的运行环境 2 环境要求 npm 9.5.1Nodejs v18.16.1MySQL 8.0.33 3 部署流程 3.1 npm的安装 通过安…

Python Opencv实践 - 图像中值滤波

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape) pixel_count img.shape[0] * img.shape[1] print(pixel_count)#为图像添加椒盐噪声 #参考资料&#xf…