首页 > 系统相关 >SELINUX 入门 简单介绍

SELINUX 入门 简单介绍

时间:2023-11-08 17:11:38浏览次数:36  
标签:文件 上下文 入门 SELINUX 简单 用户 SELinux 进程 权限

简单介绍关于 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

 

安全上下文

 

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

 

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

 

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

 

安全上下文存放在文件的 inode 内,可以通过下面的命令去查看(需要先开启 SELinux)

 

以 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)

 

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

 

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

 

再来看下 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 权限

标签:文件,上下文,入门,SELINUX,简单,用户,SELinux,进程,权限
From: https://www.cnblogs.com/zxc2man/p/17817835.html

相关文章

  • geonetwork源码编译与开发入门说明
    本文介绍geonetwork源码编译及简单的开发修改。本文包括源码调试的细节,主要给没怎么接触过java又想调试修改部分java代码的提供一定帮助,比如控制器或修改业务逻辑中的增删改操作等本文使用环境:操作系统:Windows11JDK版本:jdk-8u381-windows-x64.exeMaven版本:apache-maven-3.9.......
  • vuejs3.0 从入门到精通——Element Plus 组件库
    ElementPlus组件库一、ElementPlus 基于Vue3,面向设计师和开发者的组件库。二、完整导入https://element-plus.org/zh-CN/guide/quickstart.html#完整引入 如果你对打包后的文件大小不是很在乎,那么使用完整导入会更方便。//main.tsimport{createApp}from'vu......
  • ActiveMQ入门实例
    1.下载ActiveMQ去官方网站下载:http://activemq.apache.org/2.运行ActiveMQ解压缩apache-activemq-5.5.1-bin.zip,然后双击apache-activemq-5.5.1\bin\activemq.bat运行ActiveMQ程序。启动ActiveMQ以后,登陆:http://localhost:8161/admin/,创建一个Queue,命名为FirstQueue。3.创建E......
  • 简单实现Python采集B站视频
    我们今天要学习的是如何利用Python的requests库编写一个采集B站的小爬虫,都是一些很基础的内容,简单易学,没有什么太过复杂的东西,一起来看看吧。首先安装库:```bashpipinstallrequests```然后,我们可以开始编写爬虫程序:```pythonimportrequestsproxy_host='www.duoip.cn'proxy_......
  • SAE 2.0,让容器化应用开发更简单
    云原生容器化应用托管模式的演变云原生这个概念从提出,到壮大,再到今天的极大普及,始终处于一个不断演进和革新的过程中。云原生体系下应用的托管形态是随着企业应用架构在不断演进的。最早的应用大多是集中式、单体式的,应用通过优雅的分层来实现领域模型的共享和更细致的模块拆分。......
  • python入门6
    最基本内置数据类型介绍每个对象都有类型,python中最基本的内置数据类型有:1、整型整数,2345,10,502.浮点型2、小数3.14或者科学计数法314e-23、布尔型表示真假,仅包含:True、False4、字符串型由字符组成的序列。“abc”,"student”,”程序员”数字Python支持整数(如∶50,520)和......
  • python入门4
    变量和简单赋值语句变量的声明和赋值变量的声明和赋值用于将一个变量绑定到一个对象上,格式如下:变量名表达式最简单的表达式就是字面量。比如:a=123。运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算结果的对象;然后,将这个对象地址赋值给左边的变量。【操作】变量在......
  • python入门5
    链式赋值链式赋值用于同一个对象赋值给多个变量。x=y=123相当于:x=123;y=123系列解包赋值系列数据赋值给对应相同个数的变量(个数必须保持一致)>>>a,b,c=4,5,6相当于:a=4;b=5;c=6【操作】使用系列解包赋值实现变量交换常量Python不支持常量,即没有语法规则限制改变一个常量的道......
  • Python正则表达式入门
    正则表达式文本查找实例正则表达式主要是让使用者指定要查找的“模式”,而不是死板地查找固定的内容。不用正则表达式查找内容例如我们要查找长沙区号的电话号码,那么我们就需要知道特征,比如0731-84802110,0731是长沙的区号,紧接着就是-短横,然后是8位数字,那么我们就必须要符合这样......
  • 2008秋-计算机软件基础-简单选择排序
    //===========================================//简单选择排序//Author:EmanLee//===========================================#include<stdio.h>#defineN10voidDisplay(int*a,intn){inti;for(i=0;i<n;i++){printf(&qu......