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

18.SELInux安全性

一、SELinux

(1)SELinux架构

SELinux(Security-Enhanced Linux,安全增强型 Linux)是基于 Linux 内核的强制访问控制(MAC)安全机制,核心架构围绕 “策略决策 - 执行” 流程设计,主要包含三大组件:​

  1. 内核模块(Security Server)​

嵌入 Linux 内核,是 SELinux 的核心执行层,负责接收用户 / 进程的访问请求,结合安全策略判断是否允许访问,并通过 LSM(Linux Security Modules,Linux 安全模块)框架与内核其他子系统(如文件系统、进程管理)交互,强制执行访问控制规则。​

     2.安全策略(Policy)​

预定义的访问控制规则集合,决定 “哪些主体(如进程)可以访问哪些客体(如文件、端口)”。常见策略类型有:​

  • 目标策略(Targeted Policy):默认策略,仅对关键进程(如 Apache、MySQL)进行严格管控,普通进程按传统 DAC(自主访问控制)规则运行,兼顾安全性和易用性;​
  • 严格策略(Strict Policy):对所有进程和资源强制执行 MAC 控制,安全性极高,但配置复杂,适用于高安全需求场景。
  • 3.用户空间工具​

提供策略管理、状态查询、日志查看的命令行工具集,如setsebool(修改布尔值)、semanage(管理安全上下文)、ausearch(查询 SELinux 日志)等,是用户操作 SELinux 的核心接口。

(2)SELinux用法

SELinux 的用法围绕 “状态查询 - 规则配置 - 日志分析” 三大场景展开,核心操作依赖命令行工具:​

  1. 状态与信息查询​
  • 查看 SELinux 当前模式:getenforce(返回 Enforcing、Permissive 或 Disabled);​
  • 查看详细配置:sestatus(显示模式、策略类型、进程 / 文件安全上下文等);​
  • 查看文件安全上下文:ls -Z 文件名(如ls -Z /var/www/html);​
  • 查看进程安全上下文:ps -Z 进程ID/名称(如ps -Z httpd)。​
  • 2.规则配置​
  • 修改布尔值(临时生效):setsebool -P 布尔名=值(-P表示永久生效,如setsebool -P httpd_can_network_connect=on允许 Apache 进程联网);​
  • 管理端口标签:semanage port -a -t 端口标签 -p 协议 端口号(如-a添加、-t http_port_t指定 HTTP 端口标签,例:semanage port -a -t http_port_t -p tcp 8080,允许 8080 端口作为 HTTP 服务端口);​
  • 恢复文件默认上下文:restorecon -Rv 目录/文件(-R递归处理目录,-v显示详细过程,如restorecon -Rv /var/www/html修复网站目录的安全上下文)。​
  • 3.日志分析​

SELinux 拒绝访问的日志默认记录在/var/log/audit/audit.log(依赖 auditd 服务),可通过工具筛选分析:​

  • ausearch -m AVC -ts recent:查看最近的 “访问向量缓存(AVC)” 拒绝日志(AVC 日志是 SELinux 拒绝访问的核心日志类型);​
  • sealert -a /var/log/audit/audit.log:自动分析日志,生成问题原因和解决方案(如提示需开启某个布尔值或添加端口标签)
(3)SELinux基本概念
  1. 主体(Subject)​

发起访问请求的实体,主要指 Linux 进程(如 httpd、sshd 进程),每个主体都有唯一的 “进程安全上下文”,用于标识其身份和权限范围。​

     2.客体(Object)​

被访问的资源,包括文件、目录、端口、设备文件、IPC(进程间通信)资源等,每个客体也有 “客体安全上下文”,描述资源的类型和属性。​

     3.安全上下文(Security Context)​

SELinux 识别主体和客体的 “身份标签”,格式为用户:角色:类型[:级别](级别仅在 MLS/MCS 策略中使用),例如:​

  • 进程 httpd 的上下文:system_u:system_r:httpd_t:s0;​
  • 网站文件的上下文:unconfined_u:object_r:httpd_sys_content_t:s0;​

核心是 “类型(Type) ”:SELinux 策略主要通过 “主体类型(如 httpd_t)能否访问客体类型(如 httpd_sys_content_t)” 判断访问权限,即 “类型强制(Type Enforcement,TE)”,是 SELinux 最核心的访问控制逻辑。​

     4.访问向量(Access Vector)​

描述 “主体对客体的访问行为”,如读(read)、写(write)、执行(execute)、绑定(bind,针对端口)等。SELinux 策略通过 “访问向量规则” 明确 “某主体类型对某客体类型的某访问行为是否允许”。

(4)更改SELinux模式

SELinux 有三种运行模式,模式决定其访问控制的严格程度,更改模式需区分 “临时生效(重启后失效)” 和 “永久生效(需修改配置文件)”:​

  1. 三种模式说明​
  • Enforcing(强制模式):默认模式,SELinux 主动强制执行安全策略,拒绝不符合规则的访问,并记录 AVC 日志;​
  • Permissive(宽容模式):仅记录不符合规则的访问(生成 AVC 日志),但不拒绝访问,用于调试 SELinux 规则(如排查 “Enforcing 模式下服务启动失败” 问题);​
  • Disabled(禁用模式):完全关闭 SELinux,不执行任何 MAC 控制,仅依赖 Linux 传统 DAC 机制,安全性最低,不推荐生产环境使用。​
  • 1.3临时更改模式(当前会话生效)​

通过setenforce命令实现,仅支持切换到 Enforcing 或 Permissive(无法直接切换到 Disabled):​

  • 切换到 Enforcing 模式:setenforce 1(或setenforce Enforcing);​
  • 切换到 Permissive 模式:setenforce 0(或setenforce Permissive);​

注意:若当前模式为 Disabled,setenforce命令无效,需先永久启用 SELinux 并重启系统。​

  1. 3永久更改模式(重启后生效)​

需修改 SELinux 主配置文件/etc/selinux/config(或/etc/sysconfig/selinux,软链接到前者),修改SELINUX参数:​

  • 永久设为 Enforcing:SELINUX=enforcing;​
  • 永久设为 Permissive:SELINUX=permissive;​
  • 永久设为 Disabled:SELINUX=disabled;

二、控制SELinux上下文

(1)更改SELinux上下文

SELinux 上下文是附加到文件、进程等对象上的标签(格式:用户:角色:类型:级别),用于 SELinux 策略判断访问权限。更改上下文的核心目的是让对象符合 SELinux 策略对标签的要求,避免权限被拒绝。

(2)基本文件上下文操作
核心知识点:
  1. 上下文组成:文件上下文主要关注 类型(type)部分(如 httpd_sys_content_t 表示 Web 服务可访问的内容)。
  2. 临时与永久更改
    • 临时更改:仅当前生效,重启或文件系统重新挂载后失效。
    • 永久更改:通过修改 SELinux 上下文数据库,持久生效(需结合文件系统路径规则)。
常用命令总结:
命令作用示例
ls -Z查看文件 / 目录的 SELinux 上下文ls -Z /var/www/html
chcon临时更改文件 / 目录的上下文(类型等)chcon -t httpd_sys_content_t /web/file
semanage fcontext永久添加 / 修改文件路径的上下文规则semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
restorecon根据semanage配置的规则恢复文件上下文restorecon -Rv /web (-R 递归,-v 显示过程)
matchpathcon查看路径应有的默认上下文matchpathcon /var/www/html

三、使用布尔值调整SELinux策略

SELinux 布尔值(Boolean)是策略中预设的开关,用于动态调整特定权限规则(无需修改底层策略)。通过开启 / 关闭布尔值,可快速允许或禁止某些常见操作(如 Web 服务访问网络、Samba 共享_home 目录等),无需重新编译策略。

常用命令总结:
命令作用示例
getsebool查看布尔值当前状态(on/off)getsebool -a(查看所有);getsebool httpd_can_network_connect(查看单个)
setsebool临时修改布尔值状态(重启后失效)setsebool httpd_can_network_connect on
setsebool -P永久修改布尔值状态(-P 保存到配置)setsebool -P samba_enable_home_dirs on

示例:将自定义 Web 目录(/myweb)设置为 httpd 可访问

默认/myweb的上下文类型可能不是httpd_sys_content_t(httpd 默认允许访问的类型),导致网页无法访问:

  1. 查看当前上下文:
ls -Z /myweb  # 可能显示:unconfined_u:object_r:default_t:s0 /myweb

2.永久配置上下文规则(通过semanage):

semanage fcontext -a -t httpd_sys_content_t "/myweb(/.*)?"  # 匹配/myweb及子目录

3.应用规则(恢复上下文):

restorecon -Rv /myweb  # -R递归处理子目录,-v显示过程

4.验证:

ls -Z /myweb  # 此时显示:unconfined_u:object_r:httpd_sys_content_t:s0 /myweb

四、知识点总结

  1. SELinux 是如何保护资源的?

答:SELinux 通过为系统中的进程、文件、目录等资源分配安全上下文(包含用户、角色、类型、级别等信息),并依据安全策略规则(如类型强制访问控制)限制进程对资源的访问。只有当进程上下文与资源上下文匹配策略允许的规则时,访问才被许可,从而实现对资源的强制保护。

2. 什么是自由决定的访问控制(DAC)?它有什么特点?

答:定义:DAC 是一种访问控制机制,资源的所有者可自主决定哪些用户或组能访问该资源(如 Linux 文件权限中的所有者、组、其他用户权限设置)。

特点:

访问权限由资源所有者自由分配和修改;

依赖于用户身份和文件权限(如 rwx 权限);

安全性较低,可能因所有者误操作导致权限泄露。

3. 什么是强制访问控制(MAC)?它有什么特点?

答:定义:MAC 是由系统管理员预先定义安全策略,强制限制主体(进程)对客体(文件等资源)的访问,资源所有者无法自主修改访问权限(如 SELinux)。

特点:

访问控制由系统策略强制实施,不受用户自主决定;

基于主体和客体的安全属性(如 SELinux 上下文);

安全性高,适合对安全要求严格的场景(如服务器、涉密系统)。

4. 什么是 SELinux 上下文?

答:SELinux 上下文是附加在系统资源(进程、文件、目录、端口等)上的安全标识,用于 SELinux 策略判断访问权限。其格式通常为 user:role:type:level(如 unconfined_u:object_r:httpd_sys_content_t:s0),其中类型(type) 是最常用的部分,用于限制进程与文件的交互。

5. setenforce 0 命令的作用是什么?

答:setenforce 0 用于将 SELinux 临时切换到Permissive 模式(宽容模式)。在此模式下,SELinux 仅记录违反策略的行为(日志中生成 avc 拒绝消息),但不实际阻止访问。重启系统后会恢复为配置文件中设置的模式(enforcing 或 permissive)。

6.定义一条 SELinux 文件上下文规则,以便将 /custom 目录及目录中所有文件的上下文类型设置为 httpd_sys_content_t。

答:semanage fcontext -a -t httpd_sys_content_t "/custom(/.*)?"

restorecon -Rv /custom

semanage fcontext 用于添加持久化的文件上下文规则,(/.*)? 表示匹配 /custom 目录及所有子文件 / 子目录;

restorecon 用于应用规则,将 /custom 及其内容的上下文恢复为规则定义的类型。

http://www.dtcms.com/a/506863.html

相关文章:

  • Layui连线题编辑器组件(ConnectQuestion)
  • 电影网站加盟可以做么网奇seo培训官网
  • 【Linux】Socket编程TCP
  • Debian编译Qt5
  • [3-03-01].第07节:搭建服务 - 服务重构cloud-consumer-ocommon
  • Ubuntu Certbot版本查询失败?Snap安装后报错终极修复指南(通用版)
  • Kafka底层解析:可靠性与高性能原理
  • 分布式链路追踪中的上下文传播与一致性维护技术
  • 为已有nextjs项目添加supabase数据库,不再需要冗余后端
  • 网站建设怎样上传程序微信网站搭建多少钱
  • rabbitmq在微服务中配置监听开关
  • 下一代时序数据库标杆:Apache IoTDB架构演进与AIoT时代的数据战略
  • k8s中的控制器
  • Blender入门学习02
  • 动态规划的“数学之魂”:从DP推演到质因数分解——巧解「只有两个键的键盘」
  • Blender入门学习01
  • 网站开发word文档精品简历模板网站
  • WrenAI:企业级AI数据分析平台技术解析
  • 【Processing】椭圆眼珠鼠标跟随
  • 工业显示器在矿用挖掘机中的应用
  • 济南企业网站开发网站建设域名
  • 【深度学习计算机视觉】14:实战Kaggle比赛:狗的品种识别(ImageNet Dogs)
  • 基于k8s的Python的分布式深度学习训练平台搭建简单实践
  • 网站服务器地址在哪里看前端工程师是做网站吗
  • 基于SpringBoot的环保行为记录与社区互动平台(Vue+MySQL)
  • 洛谷 P3392 涂条纹-普及-
  • 【 柒个贰航空旅游-注册安全分析报告-无验证方式导致安全隐患】
  • CentOS 7 安装 MySQL 8
  • Java 数据类型分类
  • 定制高端网站建设设计上传网站图片不显示