深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略
目录
一、引言
二、实验环境说明
三、实验 1:Nginx 服务安全上下文配置
3.1 实验目标
3.2 操作步骤
1. 开启 SELinux 并重启系统
2. 安装 Nginx 并创建自定义目录
3. 配置 Nginx 指向自定义目录
4. 分析 SELinux 上下文冲突
5. 修改上下文为合法类型
6. 验证配置
四、实验 2:Nginx 自定义端口的 SELinux 配置
4.1 实验目标
4.2 操作步骤
1. 修改 Nginx 监听端口
2. 查看 SELinux 允许的 HTTP 端口
3. 添加新端口到 HTTP 端口类型
4. 验证端口策略
五、实验 3:SSH 服务端口修改的 SELinux 配置
5.1 实验目标
5.2 操作步骤
1. 修改 SSH 配置文件
2. 查看 SSH 端口策略
3. 添加新端口到 SSH 端口类型
4. 验证并重启服务
六、SELinux 配置核心要点总结
6.1 安全上下文管理
6.2 端口策略管理
七、总结
一、引言
SELinux(Security-Enhanced Linux)作为 Linux 系统中重要的安全增强机制,通过强制访问控制(MAC)对系统资源的访问进行细粒度管控。本文将通过三个实际实验,演示如何在 SELinux 环境下配置 Nginx 服务的安全上下文、自定义端口以及 SSH 服务的端口修改,帮助读者掌握 SELinux 的核心配置方法。
二、实验环境说明
- 系统版本:CentOS/RHEL 9
- SELinux 模式:Enforcing(强制模式)
- 服务:Nginx 1.16+、OpenSSH 7.4+
三、实验 1:Nginx 服务安全上下文配置
3.1 实验目标
解决 Nginx 访问自定义网页目录时因 SELinux 上下文不匹配导致的 403 权限问题。
3.2 操作步骤
1. 开启 SELinux 并重启系统
[root@server ~]# vim /etc/selinux/config# 修改SELINUX=enforcing[root@server ~]# reboot
2. 安装 Nginx 并创建自定义目录
[root@server ~]# yum install nginx -y[root@server ~]# mkdir -p /www/aa # 新建网页存储目录
#创建index.html文件并写入内容
[root@server ~]# vim /www/aa/index.html
3. 配置 Nginx 指向自定义目录
vim /etc/nginx/nginx.conf# 修改server块中的root路径为/www/zysystemctl restart nginx
访问主机地址显示403,说明selinux对/www/zy的安全上下文件检测未通过
4. 分析 SELinux 上下文冲突
- 查看默认网页目录上下文:
[root@server ~]# ls -Zd /usr/share/nginx/html/
system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/# 输出:system_u:object_r:httpd_sys_content_t:s0 (正确上下文)
- 查看自定义目录上下文:
[root@server ~]# ls -Zd /www/aa
system_u:object_r:default_t:s0 /www/aa
5. 修改上下文为合法类型
- 方法 1:直接指定类型
[root@server ~]# chcon -Rv -t httpd_sys_content_t /www/aa
- 方法 2:参考现有目录(推荐)
[root@server ~]# chcon -R --reference=/usr/share/nginx/html/ /www/aa
6. 验证配置
[root@server ~]# ls -Zd /www/aa/
system_u:object_r:httpd_sys_content_t:s0 /www/aa/# 浏览器访问成功,403错误消失
四、实验 2:Nginx 自定义端口的 SELinux 配置
4.1 实验目标
允许 Nginx 监听非默认端口(如 7777),解决 SELinux 端口拦截问题。
4.2 操作步骤
1. 修改 Nginx 监听端口
[root@server ~]# vim /etc/nginx/nginx.conf# 在server块中添加:listen 7777;
[root@server ~]# systemctl restart nginx# 重启失败,SELinux拦截
2. 查看 SELinux 允许的 HTTP 端口
[root@server ~]# semanage port -l | grep http_port_t# 输出:http_port_t tcp 80,81,443,...9000 (默认允许端口列表)
3. 添加新端口到 HTTP 端口类型
[root@server ~]# semanage port -a -t http_port_t -p tcp 7777# -a:添加端口;-t:指定类型;-p:协议+端口
4. 验证端口策略
[root@server ~]# semanage port -l | grep http_port_t# 确认7777已加入列表
[root@server ~]# systemctl restart nginx # 成功启动
# 浏览器访问http://192.168.2.131:7777 验证
五、实验 3:SSH 服务端口修改的 SELinux 配置
5.1 实验目标
将 SSH 默认端口 22 修改为 2222,并解决 SELinux 策略限制。
5.2 操作步骤
1. 修改 SSH 配置文件
[root@server ~]# vim /etc/ssh/sshd_config# 修改Port 2222
systemctl restart sshd
[root@server ~]# systemctl restart sshd# 重启失败,SELinux拦截
2. 查看 SSH 端口策略
[root@server ~]# semanage port -l | grep ssh_port_t# 输出:ssh_port_t tcp 22 (默认仅允许22端口)
3. 添加新端口到 SSH 端口类型
[root@server ~]# semanage port -a -t ssh_port_t -p tcp 2222
4. 验证并重启服务
[root@server ~]# semanage port -l | grep ssh_port_t# 确认2222已加入列表
systemctl restart sshd # 成功启动
[root@server ~]# systemctl restart sshd
# 使用ssh客户端连接IP:2222 验证
六、SELinux 配置核心要点总结
6.1 安全上下文管理
- chcon 命令:临时修改文件 / 目录的安全上下文,重启后可能失效。
-
- -t:指定类型(如 httpd_sys_content_t)。
-
- --reference:通过参考现有文件快速复制上下文。
- 永久生效:使用semanage fcontext结合restorecon,例如:
semanage fcontext -a -t httpd_sys_content_t '/www/zy(/.*)?'
restorecon -Rv /www/zy
6.2 端口策略管理
- semanage port:永久修改端口策略,需明确端口类型(如 http_port_t、ssh_port_t)。
- 常见服务端口类型:
-
- HTTP:http_port_t
-
- HTTPS:https_port_t
-
- SSH:ssh_port_t
-
- MySQL:mysql_port_t
七、总结
通过以上实验可见,SELinux 通过安全上下文和端口策略实现了对服务的细粒度控制。在生产环境中,应避免直接关闭 SELinux(设置为 permissive 或 disabled),而是通过chcon、semanage等工具合理配置策略,在保障安全性的前提下满足自定义需求。熟练掌握 SELinux 配置,是 Linux 系统管理员进阶的重要技能。
参考资料:
- SELinux 官方文档
- man chcon、man semanage
相关文章:

深入理解 SELinux:通过 Nginx 和 SSH 服务配置实践安全上下文与端口策略
目录 一、引言 二、实验环境说明 三、实验 1:Nginx 服务安全上下文配置 3.1 实验目标 3.2 操作步骤 1. 开启 SELinux 并重启系统 2. 安装 Nginx 并创建自定义目录 3. 配置 Nginx 指向自定义目录 4. 分析 SELinux 上下文冲突 5. 修改上下文为合法类型 6. 验…...

C++ —— STL容器——string类
1. 前言 本篇博客将会介绍 string 中的一些常用的函数,在使用 string 中的函数时,需要加上头文件 string。 2. string 中的常见成员函数 2.1 初始化函数 string 类中的常用的初始化函数有以下几种: 1. string() …...

用JS实现植物大战僵尸(前端作业)
1. 先搭架子 整体效果: 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…...
Rust Mock 工具
Rust Mock 工具 Mock(模拟)是测试中不可或缺的工具,用来替代复杂或不可控的依赖,比如数据库、网络服务等,帮助我们写出高质量、健壮的测试代码。Rust 社区中,mockall 和 mockito 是两款主流且强大的 Mock …...
C++读写锁以及实现方式
文章目录 【C专题】读写锁(Reader-Writer Lock)原理与实现方式(含C11/20实践)一、读写锁核心概念1. **什么是读写锁?**2. **读写锁 vs 互斥锁** 二、C中的读写锁实现方式 方案一:POSIX 读写锁(p…...

Electron-vite【实战】MD 编辑器 -- 文件列表(含右键快捷菜单,重命名文件,删除本地文件,打开本地目录等)
最终效果 页面 src/renderer/src/App.vue <div class"dirPanel"><div class"panelTitle">文件列表</div><div class"searchFileBox"><Icon class"searchFileInputIcon" icon"material-symbols-light:…...

华为云Flexus+DeepSeek征文|华为云Flexus云服务器X实例上部署Dify:打造高效的开源大语言模型应用开发平台
目录 前言 1 Dify与华为云部署概述 1.1 什么是 Dify 1.2 华为云与 Flexus 云服务器的优势 2 云服务器部署 Dify 的步骤详解 2.1 模板选择 2.2 参数配置 2.3 资源栈设置 2.4 确认部署信息并执行 3 部署成功后的操作与平台使用指南 3.1 访问平台 3.2 设置管理员账号 …...
[git每日一句]Your branch is up to date with ‘origin/master‘
这句话是 Git 版本控制系统的提示信息,意思是: "你当前所在的分支已经与远程仓库(origin)的 master 分支同步,没有需要推送的提交。" 详细解释: Your branch - 指你当前所在的本地分支 is up …...

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…...

机器人学基础——正运动学(理论推导及c++实现)
机器人正运动学 机器人正运动学一般是指从机器人的关节位置到基于参考坐标系下末端执行器的位置。 平移变换和旋转变换 平移变换 假设我们有两个坐标系A和B,坐标系A与B的方位相同,xyz轴的指向都是一致的,即没有旋转变换。有一点p…...

[网页五子棋][对战模块]处理连接成功,通知玩家就绪,逻辑问题(线程安全,先手判定错误)
文章目录 处理连接成功通知玩家就绪逻辑图问题 1:线程安全问题 2:先手判定错误两边都是提示:轮到对方落子 处理连接成功 实现 GameAPI 的 afterC…...
TensorFlow Extended (TFX) 生产环境模型版本控制与回滚实战指南
TFX 版本控制核心架构 TFX 通过以下组件构建完整的模型生命周期管理系统: ML Metadata (MLMD):记录所有实验和管道的元数据Pusher 组件:负责模型部署与版本标记Model Registry:集中式模型存储库&#x…...

【Web应用】若依框架:基础篇11功能详解-系统接口
文章目录 ⭐前言⭐一、课程讲解⭐二、自己动手实操⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈(,NET/Java/Python/C)、数据库、操作系统、大数据、人工智能、工控、网络、…...

【Docker项目实战篇】Docker部署PDF查看器PdfDing
【Docker项目实战篇】Docker部署PDD查看器PdfDing 一、PdfDing介绍1.1 PdfDing简介1.2 PdfDing主要特点1.3 主要使用场景 二、本次实践规划2.1 本地环境规划2.2 本次实践介绍 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四、下载Pd…...
Redis 常用数据类型和命令使用
目录 1 string 2 hash 3 list 4 set集合 5 zset有序集合 1 string 值可以是字符串、数字和二进制的value,值最大不能超过512MB 应用场景: 应用程序缓存 计数器 web共享session 限速 1.1 设置单个键值 set <key> value [EX seconds|PX…...

【Linux系统】第八节—进程概念(上)—冯诺依曼体系结构+操作系统+进程及进程状态+僵尸进程—详解!
hi,我是云边有个稻草人 偶尔中二的博主^(* ̄(oo) ̄)^,与你分享专业知识,祝博主们端午节快乐! Linux—本节博客所属专栏—持续更新中—欢迎订阅! 目录 一、冯诺依曼体系结构 二、操作系统(Opera…...
WPF 全局加载界面、多界面实现渐变过渡效果
WPF 全局加载界面与渐变过渡效果 完整实现方案 MainWindow.xaml <Window x:Class"LoadingScreenDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…...
WebSocket与实时对话式AI服务的集成
WebSocket与实时对话式AI服务的集成 在现代对话式AI系统中,传统的HTTP请求-响应模型已难以满足实时交互的体验需求。特别是用户对响应速度、逐字输出、会话上下文保持等方面提出更高要求时,需要一种能够建立持久连接并支持双向通信的协议。WebSocket正是在这一背景下,成为A…...
【xmb】】内部文档148344599
这里写自定义目录标题 CyberDog 2 仿真智能物流配送系统 – 初赛设计报告摘要目录1 引言2 任务与需求分析3 系统总体设计4 核心算法与模块实现5 仿真测试与结果分析6 结论与展望 CyberDog 2 仿真智能物流配送系统 – 初赛设计报告 团队名称: (晚点写&am…...
MobaXterm国内下载与安装使用教程
MobaXterm是一款为 Windows 用户量身打造的远程终端工具,它将多种网络功能集成在一个轻量级、便携式的界面中,尤其适合需要频繁与远程主机交互的开发者、系统运维工程师以及科研技术人员。无论是管理 Linux 服务器、远程执行命令,还是图形化运…...

数据结构——优先级队列(PriorityQueue)
1.优先级队列 优先级队列可以看作队列的另一个版本,队列的返回元素是由是由插入顺序决定的,先进先出嘛,但是有时我们可能想要返回优先级较高的元素,比如最大值?这种场景下就由优先级队列登场。 优先级队列底层是由堆实…...

代谢组数据分析(二十六):LC-MS/MS代谢组学和脂质组学数据的分析流程
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包依赖包安装包加载需要的R包数据下载以及转换mzML数据预处理代谢物注释LipidFinder过滤MultiABLER数据预处理过滤补缺失值对数变换数据标准化下游数据分析总结系统信息参考介…...
服务器上用脚本跑python深度学习的注意事项(ubantu系统)
bash: $\r: command not found 问题原因: 出现 bash: $\r: command not found 以及路径中出现 \r 通常是因为脚本文件是在Windows系统下编辑,然后在Linux(如Ubuntu)系统中运行。在Windows系统中,文本文件的换行符是 \…...

【ARM】【FPGA】【硬件开发】Chapter.1 AXI4总线协议
Chapter.1 AXI4总线协议 作者:齐花Guyc(CAUC) 一、总线介绍 AXI4总线 AXI4总线就像是SoC内部的“高速公路”,负责在不同硬件模块之间高效传输数据。 AXI4协议通过 5个独立通道 传输数据和控制信号,每个通道都有自己的信号线,互…...
青少年编程与数学 02-020 C#程序设计基础 10课题、桌面应用开发
青少年编程与数学 02-020 C#程序设计基础 10课题、桌面应用开发 一、桌面应用1. 主要特点2. 常见类型3. 优势4. 局限性 二、开发步骤1. 准备工作2. 创建项目3. 开发应用4. 运行调试5. 打包发布 三、Windows 窗体应用(一)定义(二)特…...

把 jar 打包成 exe
1. 把自己的项目先正常打成jar包 2. 使用exe4j工具将jar转换为exe 2.1 exe4j下载地址:https://www.ej-technologies.com/download/exe4j/files 2.2 下载完成之后激活 2.3 可以点击Change License,输入秘钥L-g782dn2d-1f1yqxx1rv1sqd 2.4 直接下一步…...

【目标检测】检测网络中neck的核心作用
1. neck最主要的作用就是特征融合,融合就是将具有不同大小感受野的特征图进行了耦合,从而增强了特征图的表达能力。 2. neck决定了head的数量,进而潜在决定了不同尺度样本如何分配到不同的head,这一点可以看做是将整个网络的多尺…...

【经验】Ubuntu中设置terminator的滚动行数、从Virtualbox复制到Windows时每行后多一空行
1、设置terminator的滚动行数 1.1 问题描述 在终端 terminator 中,调试程序时,只能查看有限行数的打印日志,大约是500行,怎么能增加行数 1.2 解决方法 1)安装terminator sudo apt install terminator和 terminato…...

使用微软最近开源的WSL在Windows上优雅的运行Linux
install wsl https://github.com/microsoft/WSL/releases/download/2.4.13/wsl.2.4.13.0.x64.msi install any distribution from microsoft store, such as kali-linux from Kali office website list of distribution PS C:\Users\50240> wsl -l -o 以下是可安装的有…...

HackMyVM-Teacher
信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-01 01:02 EDT Nmap scan report for 192.168.43.1 Host is up (0.0084s latency). MAC Address: C6:45:66:05:91:88 (Unknow…...