当前位置: 首页 > ai >正文

Linux--seLinux的概述

文章目录

  • 前言
  • 一、SELinux 概述与状态切换
    • 1. SELinux 概述
      • 1.1 基本定义与背景
        • 1.1.1 信息安全评估标准参考
        • 1.1.2 内核整合情况
      • 1.2 核心作用
      • 1.3 关键特点
        • 1.3.1 MAC(Mandatory Access Control,强制性访问控制)
        • 1.3.2 RBAC(Role Base Access Control,基于角色的访问控制)
        • 1.3.3 TE(Type Enforcement,类型强制)
      • 1.4 执行模式
      • 1.5 工作原理
        • 1.5.1 核心交互流程
        • 1.5.2 相关软件包
        • 1.5.3 配置文件位置
      • 1.6 状态查看命令
      • 1.7 配置文件编辑(启用 SELinux)
    • 2. SELinux 状态切换
      • 2.1 从强制模式(enforcing)切换为警告模式(permissive)
      • 2.2 从警告模式(permissive)切换为强制模式(enforcing)
      • 2.3 说明
  • 总结


前言

SELinux(Security Enhanced Linux,安全性增强的 Linux)由美国国家安全局(NSA,National Security Agency)开发,构建于 Linux 内核之上,具备灵活的强制性访问控制结构。


一、SELinux 概述与状态切换

1. SELinux 概述

1.1 基本定义与背景

其核心目标是提升 Linux 系统安全性,提供强健的安全保障,可防御未知攻击,安全级别据称相当于信息安全评估标准中的 B1 级。

1.1.1 信息安全评估标准参考
信息安全评估标准分为 4 类(D、C、B、A)共 7 个级别,
从低到高依次为:D、C1、C2、B1、B2、B3、A。
1.1.2 内核整合情况

SELinux 已整合到 Linux 2.6 及以上版本的内核中,可通过 uname -r 命令查看当前系统内核版本,确认是否支持 SELinux。
在这里插入图片描述

1.2 核心作用

传统 Linux 系统未启用 SELinux 时,若服务器上的服务被黑客攻陷,服务器最高权限可能随之丢失;而启用 SELinux 后,即使服务被入侵,攻击者也仅能获取该服务本身的权限,无法获取服务器整体最高权限,实现“权限禁锢”。

举例:若 Apache 服务器(进程为 httpd)被入侵,攻击者仅能操作 httpd 服务相关资源,无法突破限制获取系统全局权限,保障系统核心安全。

1.3 关键特点

SELinux 主要通过以下三类机制实现安全控制,三者相互配合构建完整的访问控制体系:

1.3.1 MAC(Mandatory Access Control,强制性访问控制)
  • 对系统资源的访问控制彻底化,涵盖所有文件、目录、端口的访问行为。
  • 访问规则均由管理员预先设定,普通用户无权限修改或管理策略,确保规则严肃性与安全性。
1.3.2 RBAC(Role Base Access Control,基于角色的访问控制)
  • 遵循“最小权限原则”,为用户分配特定角色(Role),用户仅拥有其角色对应的权限。
  • 即使是 root 用户,若未处于 sysadm_r 角色中,也无法执行 sysadm_t 类型的管理操作,避免超权限操作风险。
1.3.3 TE(Type Enforcement,类型强制)
  • 对进程仅赋予最小运行权限,是 SELinux 中核心且关键的概念。
  • 实现逻辑:为文件赋予 type(标签类型),为进程赋予 domain(标签),通过策略规定“特定 domain 标签的进程仅能访问特定 type 标签的文件”。
  • 举例:进程 vim 仅可读取 type 标签为 T1 的文件(如 a.txt),无法读取 type 标签为 T2 的文件(如 b.txt)。

1.4 执行模式

SELinux 包含三种执行模式,不同模式对应不同的安全管控强度,可根据场景灵活切换:

模式(Mode)中文名称核心逻辑
enforcing强制模式严格遵循 SELinux 策略,只要策略不允许的操作,均无法执行,直接阻断非法行为
permissive警告模式允许所有操作执行,但会将不符合策略的行为记录到日志中,适用于策略测试或问题排查
disabled关闭模式完全禁用 SELinux,不进行任何访问控制检查,系统恢复为传统 Linux 安全机制

1.5 工作原理

1.5.1 核心交互流程
  1. 发起请求:Subject(进程)发起对 Object(文件、端口等资源)的操作请求(如读、写、执行),请求类型为 Permission(权限)。
  2. 策略校验:SELinux 读取 Security Policy Database(安全策略数据库)中的预设规则,判断该进程是否有权限对目标资源执行对应操作。
  3. 结果反馈
    • 若符合规则,反馈“Granted(允许)”,进程正常执行操作;
    • 若不符合规则,反馈“Denied(拒绝)”,并生成 AVC(Access Vector Cache)警告信息记录到日志中。
1.5.2 相关软件包

SELinux 相关软件包默认已在系统中安装,可通过 rpm -qa | grep selinux 命令查看,常见包如下:

在这里插入图片描述

1.5.3 配置文件位置

SELinux 核心配置文件路径为:/etc/sysconfig/selinux,可通过 ls /etc/sysconfig/selinux 命令确认文件存在性。

1.6 状态查看命令

通过 getenforce 命令可快速查看当前 SELinux 的运行状态,执行示例如下:

[root@benet63 ~]# getenforce
  • 执行结果若为 Enforcing,表示当前处于强制模式;
  • 若为 Permissive,表示当前处于警告模式;
  • 若为 Disabled,表示当前处于关闭模式。
    在这里插入图片描述

1.7 配置文件编辑(启用 SELinux)

若需启用 SELinux,需编辑核心配置文件并重启系统,操作步骤如下:

  1. 执行编辑命令:

    [root@benet63 ~]# vim /etc/sysconfig/selinux
    

    在这里插入图片描述

  2. 在文件中修改 SELINUX 字段值为 enforcing(启用强制模式),如下:

    SELINUX=enforcing
    

    在这里插入图片描述

  3. 注意事项

    • 启用 SELinux 后必须重启系统,配置才能生效;
    • 初次开启 SELinux 时,系统会自动更新文件标签,该过程耗时较长,需耐心等待。

2. SELinux 状态切换

SELinux 状态切换分为“临时切换”(无需重启,重启后失效)和“永久切换”(需修改配置文件并重启,长期生效),以下为临时切换的具体操作(基于 root 用户执行):

2.1 从强制模式(enforcing)切换为警告模式(permissive)

  1. 执行切换命令:
    [root@benet63 ~]# setenforce 0
    
  2. 验证切换结果:
    [root@benet63 ~]# getenforce
    
    若输出 Permissive,表示切换成功。

2.2 从警告模式(permissive)切换为强制模式(enforcing)

  1. 执行切换命令:
    [root@benet63 ~]# setenforce 1
    
  2. 验证切换结果:
    [root@benet63 ~]# getenforce
    
    若输出 Enforcing,表示切换成功。

2.3 说明

  • setenforce 命令仅支持在“强制模式”与“警告模式”之间切换,无法直接切换到“关闭模式”;
  • 若需从“关闭模式”切换为其他模式,或实现状态的永久切换,需修改 /etc/sysconfig/selinux 配置文件并重启系统(参考 1.7 节操作)。

总结

selinux的简单理解就是:增强Linux系统安全性,通过三种核心模式(强制模式enforcing、警告模式permissive和关闭模式disable)来控制对系统资源的访问权限。

http://www.xdnf.cn/news/18730.html

相关文章:

  • 数据结构07(Java)-- (堆,大根堆,堆排序)
  • 常见的设计模式
  • 博士招生 | 南洋理工大学 PINE Lab 招收全奖博士
  • [新启航]新启航激光频率梳 “光量子透视”:2μm 精度破除遮挡,完成 130mm 深孔 3D 建模
  • 【国密证书】CentOS 7 安装 GmSSL 并生成国密证书
  • Docker移动安装目录的两种实现方案
  • 微硕WINSOK高性能MOS管WSF90N10,助力洗衣机能效与可靠性升级
  • Java:IO流——基础篇
  • Redis高级篇:在Nginx、Redis、Tomcat(JVM)各环节添加缓存以实现多级缓存
  • 一文丝滑使用Markdown:从写作、绘图到转换为Word与PPT
  • MongoDB /redis/mysql 界面化的数据查看页面App
  • M3-Agent:让AI拥有长期记忆的新尝试
  • UML 时序图中交互片段操作符的详细解析与 C/C++ 实现示例
  • React 高阶组件
  • 服务器初始化
  • APM 系列(一):Skywalking 与 Easyearch 集成
  • 如何在项目中集成XXL-JOB
  • 在线提取维基百科Wikipedia文章页面及离线批处理Wikipedia XML Dump文件
  • 通信中间件 Fast DDS(二) :详细介绍
  • 安卓Android低功耗蓝牙BLE连接异常报错133
  • 计算机实习经历包装/编写
  • 嵌入式系统学习Day22(进程)
  • STL——vector的使用(快速入门详细)
  • Ansible自动化运维介绍与安装
  • 信贷模型域——清收阶段模型(贷后模型)
  • 简述mysql中索引类型有哪些,以及对数据库的性能的影响?
  • QML中的QtObject
  • C# NX二次开发:绘图区控件和指定矢量控件详解
  • vscode--快捷键
  • 【Android 16】Android W 的冻结机制框架层分析