SELinux深度解析:安全增强型Linux的探索与应用(下)

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、SELinux的工作机制

1、SELinux的三种状态:Permissive、Enforcing、Disabled

2、类型强制(Type Enforcement) 

3、角色(Role)与层次(Level) 

4、安全上下文(Security Context) 

二、SELinux的配置与管理 

1、使用semanage和setools进行策略管理

2、使用sestatus、getenforce、setenforce查看SELinux状态


一、SELinux的工作机制

1、SELinux的三种状态:Permissive、Enforcing、Disabled

SELinux(Security-Enhanced Linux)是一个Linux内核模块和安全体系结构,它为Linux系统提供了强制访问控制(MAC)的机制。SELinux有三种状态,每种状态对应不同的安全策略执行方式:

1. Enforcing:

  • 在这种状态下,SELinux策略会被强制执行。这意味着所有不符合SELinux策略的访问尝试都会被拒绝并记录在日志中。系统会严格按照定义的安全策略进行访问控制,确保最高级别的安全性。
  • 例如,如果某个进程尝试访问一个它无权访问的文件,这种访问会被阻止,并且SELinux会在日志中记录这一事件。
  • Enforcing状态通常用于生产环境,以确保系统安全策略得到严格实施。


2. Permissive:

  • 在这种状态下,SELinux策略不会被强制执行,但任何违反策略的行为仍然会被记录在日志中。也就是说,系统会允许所有访问尝试,即使它们不符合SELinux策略。
  • Permissive状态通常用于开发和调试环境,因为它允许管理员查看哪些访问尝试会被SELinux策略阻止,而不会实际阻止这些访问。这对于调整和优化SELinux策略非常有用。
  • 例如,管理员可以在Permissive模式下运行系统一段时间,以收集日志中被记录的访问尝试,然后根据这些日志调整SELinux策略。


3. Disabled:

  • 在这种状态下,SELinux完全被禁用。系统不会应用任何SELinux策略,也不会记录任何SELinux相关的日志。
  • Disabled状态下,系统运行时没有SELinux提供的强制访问控制,这可能会降低系统的安全性。
  • 这种状态一般用于不需要或不支持SELinux的环境,或者用于排除与SELinux相关的问题。

2、类型强制(Type Enforcement) 

类型强制(Type Enforcement,简称TE)是SELinux实现强制访问控制(MAC)的一种核心机制。TE通过将系统中的每个对象和每个主体(进程)分配到不同的类型,并使用策略规则来定义哪些类型的主体可以访问哪些类型的对象以及如何访问它们,从而实现细粒度的访问控制。

核心概念


1. 类型(Type):

  • 每个文件、目录、设备、进程等对象和主体在SELinux中都有一个类型标签。类型标签用于标识对象和主体属于哪种类型。


2. 域(Domain):

  • 进程的类型标签通常称为域(Domain)。域是主体(进程)的类型,控制主体可以执行哪些操作和访问哪些对象。


3. 对象类型:

  • 对象(如文件、目录、设备等)的类型标签称为对象类型。对象类型定义了对象的属性和访问规则。

3、角色(Role)与层次(Level) 

 

在SELinux中,除了类型强制(Type Enforcement,TE),角色(Role)和层次(Level)也是重要的概念,它们共同构成了SELinux的多层次访问控制体系。

角色(Role)
角色是SELinux中的一个安全属性,用于将用户和域(Domain)关联起来。角色基于基于角色的访问控制(RBAC)模型,定义了哪些域可以被哪些角色访问。通过角色的定义和使用,SELinux可以有效地管理用户对系统资源的访问权限。

1. 角色的定义:

  • 角色在SELinux策略中定义,通常与用户映射,并且进一步限制用户可以进入哪些域。


2. 角色与域的关联:

  • 角色可以与多个域关联,这样角色就可以使用这些域的权限。
  • 例如,system_r角色可以访问httpd_t域的资源。


3. 用户与角色的映射:

  • SELinux用户(如user_u、staff_u)映射到特定的角色,这样特定的用户就只能使用这些角色定义的权限。


层次(Level)
层次(Level)是在SELinux中实现多级安全(MLS)和多类别安全(MCS)的关键机制。层次包括安全级别(Sensitivity)和类别(Category),用于进一步细化访问控制策略。

1. 安全级别(Sensitivity):

  • 安全级别表示信息的敏感性,可以定义多个级别。
  • 例如:s0、s1、s2等,s0表示最低级别,s1表示较高的级别。


2. 类别(Category):

  • 类别表示信息的类别,可以定义多个类别。
  • 例如:c0、c1、c2等,类别用于将信息划分为不同的分类组。


3. MLS上下文:

  • 在SELinux中,MLS上下文用级别:类别的形式表示,例如:s0:c0,c1。
  • 这种表示方式可以用来定义哪些用户和进程可以访问哪些信息。

 

4、安全上下文(Security Context) 

在SELinux中,安全上下文(Security Context)是一个非常重要的概念。它是一个标识符,用于描述对象和主体的安全属性。安全上下文定义了SELinux如何应用其安全策略,以控制对系统资源的访问。每个文件、进程、设备等对象都有一个安全上下文。一个典型的安全上下文由以下几个部分组成:

1. 用户(User):

  • SELinux用户,不同于Linux用户。SELinux用户用于分配特定的SELinux权限集。
  • 例如:system_u, user_u, staff_u。


2. 角色(Role):

  • 角色用于将用户和域关联起来,定义哪些角色可以访问哪些域。
  • 例如:system_r, user_r, staff_r。


3. 类型(Type)或域(Domain):

  • 类型是SELinux最核心的概念,用于标识对象的类别和主体的域。类型强制(TE)策略基于类型进行访问控制。
  • 例如:httpd_t, ssh_t, user_home_t。


4. 级别(Level)(可选,主要用于MLS/MCS):

  • 级别由敏感度(Sensitivity)和类别(Category)组成,用于实现多级安全(MLS)和多类别安全(MCS)。
  • 例如:s0, s0:c0,c1。


示例
一个典型的SELinux安全上下文可能是这样的:

system_u:object_r:httpd_sys_content_t:s0


这代表了一个文件对象,它的SELinux用户是system_u,角色是object_r,类型是httpd_sys_content_t,级别是s0。

二、SELinux的配置与管理 

1、使用semanage和setools进行策略管理

semanagesetools是管理SELinux策略的强大工具。semanage主要用于修改和管理SELinux策略中的各种对象,如文件上下文、端口、用户、布尔值等。而setools是一组用于分析和调试SELinux策略的工具集。

使用 semanage


1. 修改文件上下文

  • 查看文件上下文:
semanage fcontext -l

        列出所有文件的SELinux上下文。 

  • 添加或修改文件上下文:
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"


        将 /web 目录及其子目录和文件的类型设置为 httpd_sys_content_t。

  • 应用文件上下文更改:
restorecon -Rv /web


        根据当前策略重新设置 /web 目录及其子目录和文件的上下文。

使用 setools
setools 包括一组工具,用于分析和调试SELinux策略,如 sesearch、seaudit、seinfo 等。

sesearch

  • 搜索允许规则:
sesearch -A -s httpd_t -t httpd_sys_content_t


        查找源类型 httpd_t 对目标类型 httpd_sys_content_t 的所有允许规则。

  • 查找特定权限:
sesearch -A -s httpd_t -t httpd_sys_content_t -c file -p read


        查找 httpd_t 类型的进程对 httpd_sys_content_t 类型的文件具有读取权限的规则。

2、使用sestatus、getenforce、setenforce查看SELinux状态

使用semanagesetools可以对SELinux进行高级管理,而使用selinux-utils包中的工具(如sestatus、getenforce、setenforce)可以查看和修改SELinux的运行状态。这些工具是进行SELinux日常管理和检查的重要手段。

查看SELinux状态


sestatus
sestatus命令用于显示SELinux的当前状态及其配置。

sestatus

输出示例:

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

解释:

  • SELinux status: enabled 表示SELinux已启用,disabled 表示SELinux已禁用。
  • Current mode: 当前的SELinux模式,可以是enforcing或permissive。
  • Mode from config file: 配置文件中定义的模式。
  • Policy MLS status: 是否启用了多级安全(MLS)。
  • Loaded policy name: 当前加载的SELinux策略名称(如targeted或strict)。

getenforce
getenforce命令用于查看SELinux的当前模式。

getenforce

解释:

  • Enforcing: SELinux正在强制执行策略。
  • Permissive: SELinux处于宽容模式,不强制执行策略,但记录违规行为。
  • Disabled: SELinux已禁用。

 

setenforce
setenforce命令用于临时切换SELinux模式,在Enforcing和Permissive模式之间切换。

setenforce 0

解释:

  • setenforce 0: 将SELinux切换到Permissive模式。
  • setenforce 1: 将SELinux切换到Enforcing模式。

实践示例
1. 查看SELinux状态:

sestatus

2. 查看SELinux当前模式:

getenforce

3. 将SELinux切换到宽容模式:

sudo setenforce 0

4. 将SELinux切换回强制模式:

sudo setenforce 1

永久更改SELinux模式
如果需要永久更改SELinux的运行模式,可以编辑配置文件 /etc/selinux/config:

sudo nano /etc/selinux/config

将 SELINUX 参数设置为 enforcing, permissive 或 disabled:

SELINUX=enforcing

保存并退出编辑器,然后重启系统:

sudo reboot

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

在k8s中部署Kafka高可用集群超详细讲解

🐇明明跟你说过:个人主页 🏅个人专栏:《数据流专家:Kafka探索》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、Kafka简介 2、为什么在Kubernetes中部署Kafka 二、…

决策树Decision Tree

目录 一、介绍发展优点缺点基本原理 二、熵1、熵2、条件熵3、信息增益4、信息增益率 三、基尼系数四、ID3算法1、建树过程2、优点3、缺点 五、C4.51、二分法处理连续变量1、流程:2、示例 2、缺点 六、CART1、连续数据处理2、离散数据处理3、CART回归原理1、均方误差…

医学编码系统说明

简介 流程说明 登录系统 在浏览器中访问FNEHR的站点,输入医院编号、用户和密码,选择“Other”,点击“Login”按钮,登录系统: 登录后,在左边显示系统的菜单: 系统设置 医院设置 点击左侧的“Acc…

尚硅谷2024新版3小时速通Docker教程

尚硅谷2024新版3小时速通Docker教程 百度网盘:https://pan.baidu.com/s/1SncgHbdJehvZspjcrrbLSw?pwd6c27

【C语言】详解函数(下)(庖丁解牛版)

文章目录 1. 前言2. 数组做函数形参3. 函数嵌套调用和链式访问3.1 嵌套调用3.2 链式访问 1. 前言 详解C语言函数(上)的链接:http://t.csdnimg.cn/EGsfe 经过对函数的初步了解之后,相信大家已经对C语言标准库里的函数已经有初步的认知了,并且还学会了如…

【工具箱】嵌入式系统存储芯片——CS创世 SD NAND

大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)…

足球俱乐部管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,教练管理,用户管理,合同信息管理,赛事管理 前台账户功能包括:系统首页,个人中心,公告信息,赛事…

C++ STL - 容器

C STL(标准模板库)中的容器是一组通用的、可复用的数据结构,用于存储和管理不同类型的数据。 目录 零. 简介: 一 . vector(动态数组) 二. list(双向链表) 三. deque&#xff08…

Ansible部署 之 zookeeper集群

简介 Ansible是近年来越来越火的一款轻量级运维自动化工具,主要功能为帮助运维实现运维工作的自动化、降低手动操作的失误、提升运维工作效率。常用于自动化部署软件、自动化配置、自动化管理,支持playbook编排。配置简单,无需安装客户端&am…

LNMP网络架构的搭建

操作准备:准备三台虚拟机 安装 MySQL 服务 (1)准备好mysql目录上传软件压缩包并解压 cd /opt mkdir mysql tar xf mysql-boost-5.7.44.tar.gz (2)安装mysql环境依赖包 yum -y install ncurses ncurses-devel bison…

idea 中:运行 Application 时出错。命令行过长

一、问题描述: idea 导入新项目,在编译后,运行项目时,报以下错误: 14:47 运行 Application 时出错运行 Application 时出错。命令行过长。通过 JAR 清单或通过类路径文件缩短命令行,然后重新运行。二、问题…

在Oracle VM virtual box 中复制 CentOS 7虚拟机更改IP地址的操作

最近玩Redis主从复制的时候,我装了一个虚拟机,但主从复制需要准备3个虚拟机,这个时候,我又不想一个一个去装,我看到Oracle VM virtual box提供了一个虚拟机复制操作,于是就用了一下这个功能,发现…

LabVIEW传感器虚拟综合实验系统

LabVIEW传感器虚拟综合实验系统 开发了一个基于LabVIEW的传感器虚拟综合实验系统,该系统集成了NIELVIS和CSY系列传感器实验平台,通过图形化编程语言进行数据处理和实验管理。系统允许用户进行多种传感器参数的测量和实验报告的自动生成,支持…

SqlServer2016企业版安装

前言 好久没有知识的累积,最近工作上遇到新的SqlServer2016安装,记录一下 参考文章 SQL Server 2016软件安装包和安装教程 - 哔哩哔哩 (bilibili.com) 安装包准备 需要提前准备软件安装包如下 cn_sql_server_2016_enterprise_x64_dvd_8699450&…

(免费领源码)Java#springboot#MySQL书法社团管理系统36200-计算机毕业设计项目选题推荐

目 录 摘要 Abstract 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 书法社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析…

重邮803计网概述

目录 一.计算机网络向用户提供的最重要的功能 二.互联网概述 1.网络的网络 2.计算机网络的概念 3. 互联网发展的三个阶段 4.制订互联网的正式标准要经过以下的四个阶段 5.互联网的组成(功能) 6.互联网功能 7.互联网的组成(物理&#…

Vitis HLS 学习笔记--static RAM/ROM

目录 1. 简介 2. static RAM 2.1 无 reset 的情形 2.2 含 reset 的情形 3. static ROM 4. 总结 1. 简介 本文仍然是讨论阵列的初始化与复位问题,区别于《Vitis HLS 学习笔记--global_array_RAM初始化及复位-CSDN博客》,本文讨论的对象是静态阵列&…

ARM的异常处理

目录 异常的概念 ARM的异常源 异常优先级 异常模式 异常处理的过程 状态寄存器CPSR 异常向量表 异常的概念 异常是计算机系统中一种突发事件或错误情况,它打破了正常的程序执行流程,需要特殊处理。异常可能由硬件错误、软件错误或外部事件引发&am…

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

8990890

作者主页:作者主页 数据结构专栏:数据结构 创作时间 :2024年5月18日