SELinux 的端口号权限以及使用 semanage 工具添加权限

摘要

当应用程序服务器开始监听端口号时,selinux会检查端口号的安全上下文scontext类型和程序的源secontext类型,如果发现程序并没有绑定该端口号的权限,例如发现该端口号只属于保留端口号reserved_port_t,则会禁止deny程序绑定端口的操作,导致服务器无法正常启动。此时可以通过semanage来增加需要绑定的端口的secontext类型,例如给82端口增加类型http_port_t,这样服务器程序就具有82端口的绑定权限了。

场景及排查

  1. 使用nginx服务器绑定80,81端口,服务器正常启动,然而绑定82端口,服务器启动失败,查询日志systemctl status nginx
nginx: [emerg] bind() to 0.0.0.0:82 failed (13: Permission denied)

发现82端口绑定失败了,没有权限
2. 进一步排查,首先将selinux设置为宽容模式,看看服务器能否启动

setenforce 0
systemctl start nginx

发现服务器正常启动了,说明刚才是由于selinux的权限未通过导致服务器启动失败的,可以修改selinux配置是它永久处于宽容模式(但不安全),因此继续selinux的排查
3. 将selenux 设置回严格模式setenforce 1,并检查/var/log/audit/目录下的日志文件,可以发现其中一行:

type=AVC msg=audit(1731871244.866:352): avc:  
denied  { name_bind } for  pid=3291 
comm="nginx" src=82 
scontext=system_u:system_r:httpd_t:s0 
tcontext=system_u:object_r:reserved_port_t:s0 
tclass=tcp_socket permissive=0

这条日志是从SELinux(Security-Enhanced Linux)的审计日志中获取的,用于记录系统上的安全策略事件。SELinux是一种安全模块,它为Linux操作系统提供了访问控制安全策略。让我们逐步解析这条日志:

  • type=AVC: 这表示这是一条访问矢量缓存(Access Vector Cache)事件,AVC是SELinux用来加速安全策略检查的一种机制。
  • msg=audit(xxx:352): 这部分包含了审计消息的时间戳(xxx秒)和序列号(352),用于标识日志事件。
  • avc: denied { name_bind }: 这表示SELinux安全策略拒绝了某个操作,这里是name_bind操作,通常与套接字(socket)绑定到特定的名称(如端口号)相关。
  • for pid=3291 comm=“nginx”: 这表示被拒绝的操作是由进程ID(PID)为3291的进程发起的,该进程的命令名为nginx。
  • src=82: 这通常指的是尝试绑定的源端口号或相关资源标识符,但在这里可能不直接对应于TCP/UDP端口号(可能是SELinux内部的某种标识符或错误显示),通常这部分需要根据上下文或SELinux的具体实现来解释。
  • scontext=system_u:system_r:httpd_t:s0: 这是源安全上下文(source context),包含了用户(system_u)、角色(system_r)、类型(httpd_t)和安全级别(s0)。httpd_t是nginx进程的安全类型,表示它作为Web服务器运行。
  • tcontext=system_u:object_r:reserved_port_t:s0: 这是目标安全上下文(target context),同样包含了用户、角色、类型和安全级别。reserved_port_t表示尝试访问或操作的对象(在这个上下文中是TCP端口)是保留给特定用途的。
  • tclass=tcp_socket: 这表示被访问或操作的对象类(type class)是TCP套接字。
  • permissive=0: 这表示SELinux当前不处于permissive模式。在permissive模式下,SELinux会记录违规操作但不会阻止它们;而在enforcing模式下(如本例所示),SELinux会阻止违规操作并记录它们。

说明82端口具有类型reserved_port_t,nginx无法直接绑定82端口的权限,接下来使用工具semanage查看各个端口的权限情况

  1. 安装semanage
    查看yum provides semanage 的支持清单
yum provides semanage# 结果示例
policycoreutils-python-utils-3.3-1.oe2203.noarch : Policy core python utilities for selinux
Repo        : OS
Matched from:
Filename    : /usr/sbin/semanage

安装工具

yum install policycoreutils-python-utils-3.3-1.oe2203.noarch 
  1. 查看selinux端口号的权限semanage port -l,可以发现其中几行重要条目
|SELinux 端口类型                |协议      |端口号
|http_port_t                    |tcp      |80, 81, 443, 488, 8008, 8009, 8443, 9000|
|reserved_port_t                |tcp      |1-511

http_port_t:

  • 协议:TCP(传输控制协议)
  • 端口号:80, 81, 443, 488, 8008, 8009, 8443, 9000
  • 这些端口通常用于HTTP和HTTPS服务。例如,端口80和8008常用于未加密的HTTP流量,而端口443和8443则用于加密的HTTPS流量。其他端口(如81, 488, 9000)也可能被配置为HTTP或HTTPS服务,具体取决于服务器的配置。

reserved_port_t:

  • 协议:TCP
  • 端口号:1-511
  • 这些端口被称为“保留端口”或“系统端口”,通常用于重要的系统服务。由于这些端口号较低,它们被认为是特权端口,只有具有特定权限(通常是root权限)的进程才能绑定到这些端口。这种限制是为了防止未经授权的服务占用这些关键端口,从而可能干扰系统的正常运行。

其中80,81等端口同时具有http_port_t和reserved_port_t类型,nginx可以正常绑定http_port_t类型的端口80,81,而无法绑定只具有reserved_port_t类型的82端口

6.使用semanage为端口添加权限
为82端口添加类型http_port_t

semanage port -a -t http_port_t -p tcp 82# -a 表示添加操作,-t http_port_t 指定了目标类型,-p tcp 指定了协议(TCP),82 是要添加的端口号

小结

通过为82端口添加类型http_port_t,可以看到,http_port_t中就多了个端口号82,此时再启动服务器,就不会看到权限错误的信息了

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

动态内存管理

malloc的简单使用 int main() {int arr[10] { 0 };//动态内存开辟int* p (int*)malloc(40);if (p NULL){printf("%s\n", strerror(errno));return 1;}//使用内存int i 0;for (i 0; i < 10; i){*(p i) i;}for (i 0; i < 10; i){printf("%d "…

(计算机毕设)基于SpringBoot+Vue的房屋租赁系统的设计与实现

博主可接毕设设计&#xff01;&#xff01;&#xff01; 各种毕业设计源码只要是你有的题目我这里都有源码 摘 要 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱&#xff0c;也逐渐进入了每个用户的使用。互…

基于AIRTEST和Jmeter、Postman的自动化测试框架

基于目前项目和团队技术升级&#xff0c;采用了UI自动化和接口自动化联动数据&#xff0c;进行相关测试活动&#xff0c;获得更好的测试质量和测试结果。

【YOLOv8改进[注意力]】引入DA、FCA、SA、SC、SE + 含全部代码和详细修改方式

本文将进行在YOLOv8中引入DA、FCA、SA、SC、SE魔改v8,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 一 DA、FCA、SA、SC、SE ① DA 论文:Dual Attention Network for Scene Segmentation

函数指针数组,转移表

int (*arr[4])(int ,int) ,我们需要把数组名放到*的右边 函数指针数组的⽤途&#xff1a;转移表 可以让代码更加简单前提是函数类型相同 #include<stdio.h> int add(int x, int y) {return x y; } int sub(int x, int y) {return x - y; } int miv(int x, int y) {ret…

three.js加载GLTF模型

要在three.js中正确加载和显示GLTF模型&#xff0c;需要遵循一系列步骤来确保模型的纹理和材质被正确应用。以下是加载GLTF模型的基本步骤&#xff1a; 引入必要的three.js模块&#xff1a; 引入了GLTFLoader模块&#xff0c;用来加载GLTF格式模型的类。 创建加载器实例&#…

学习笔记020——Ubuntu安装jdk

本人安装的版本是1.8.0_321版本 1、下载jdk。 2、上传到自定义目录&#xff08;本人放在&#xff1a;/opt目录下&#xff09; 3、解压 sudo tar -zxvf jdk-8u321-linux-x64.tar.gz 解压过后如下&#xff1a; 4、配置环境变量&#xff1a; sudo vim /etc/profile 5、配置…

UR协作机器人二次开发环境搭建流程

UR协作机器人&#xff0c;在二次开发时需要在Linux环境下进行开发环境搭建&#xff0c;因此有两种方式对于有Linux系统的用户可以直接进行&#xff1b;而对于Windows用户而言则需要采用&#xff1b;None-Linux版本为虚拟机镜像&#xff0c;需要使用Vmbox等虚拟机软件加载。一般…

Python数据分析与可视化实验案例,所需数据已经绑定上传

大数据技术专业技能竞赛试卷 一、项目名称 农业肥料登记数据分析赛题 二、竞赛内容 赛项以大数据技术为核心内容&#xff0c;重点考查参赛选手数据清洗和数据分析的能力&#xff0c;结合Pandas和matplotlib图表展示数据。所有参赛学生在现场根据给定的项目任务&#xff0c;…

C++ 增强输入配置

创建配置文件 InputMappingContext IA_Move IA_Look InputAction IA_Move IA_Look Character.h #include "InputActionValue.h"UCLASS() class DMC_PRATICE_API ADMC_Character_Player : public ADMC_Character_Base {virtual void SetupPlayerInputComponent(cl…

Day15刷算法

110.平衡二叉树 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,nul…

命令执行简单

前言&#xff1a;小迪安全2022第一节反弹shell&#xff0c;小迪用的是两台都是云服务器&#xff0c;没有服务器可以在自己的主机上搭建也是可以的&#xff0c;主机上搭两个网站 思路&#xff1a;生成一个木马文件&#xff0c;下载到本机&#xff0c;然后利用本机上传到目标主机…

爆发的AI智能体(1):学习AI智能体的计划和提纲

学习计划&#xff1a; 基础知识阶段&#xff08;1-2个月&#xff09;&#xff1a; 建立AI大模型的基础知识体系&#xff0c;包括理解AI智能体的基本概念及其与大模型&#xff08;如GPT、通义千问&#xff09;结合后的功能。学习AI智能体的关键构成&#xff0c;如大模型、规划&a…

Vue 专属状态管理库Pinia的使用与实践

目录 前言1. 什么是 Pinia&#xff1f;2. Pinia 的安装与基本配置2.1 安装 Pinia2.2 在 Vue 应用中配置 Pinia 3. 使用 Pinia 创建和管理状态3.1 定义一个简单的 Store3.2 在组件中使用 Store 4. Pinia 的高级功能4.1 使用 Getter 简化数据处理4.2 支持异步操作4.3 在服务端渲染…

springBoot插件打包部署

打包插件spring-boot-maven-plugin 不使用插件&#xff0c;运行时&#xff0c;异常信息为“没有主清单属性” 本地部署 杀进程

python使用poetry作为包管理

一、pip的弊端 由于Python使用pip安装时不会自动解决冲突&#xff0c;不会自动删除相关联的包&#xff0c;例如安装flask时&#xff0c;pip install flask会额外安装一些包&#xff0c;但是pip uninstall是不会删除相关的包&#xff0c;只会删除flask本身的包。 二、推荐使用…

神经网络中常用的激活函数(公式 + 函数图像)

激活函数是人工神经网络中的一个关键组件&#xff0c;负责引入非线性&#xff0c;从而使神经网络能够学习和表示复杂的非线性关系。没有激活函数&#xff0c;神经网络中的所有计算都是线性变换&#xff0c;而线性模型的表达能力有限&#xff0c;无法处理复杂的任务。 激活函数…

mysql复习题(实验7-8)

建立一个学生入学信息管理&#xff08;x_y&#xff09;数据库&#xff0c;设计其数据库模式为&#xff1a; 学生表&#xff08;学号&#xff0c;姓名&#xff0c;性别&#xff0c;入学成绩&#xff0c;籍贯&#xff0c;院系编号&#xff09; 院系表&#xff08;院系编号&…

n个整数后移m个位置

题目描述 有n个整数&#xff0c;使前面各数顺序向后移m个位置&#xff0c;最后m个数变成前面m个数&#xff0c;见图。写一函数&#xff1a;实现以上功能&#xff0c;在主函数中输入n个数和输出调整后的n个数。 输入描述 输入数据的个数n n个整数 移动的位置m 输出描述 移动后的…

Python——面向过程和面向对象

一.两大编程思想 面向过程&#xff1a;事情比较简单&#xff0c;可以用线性的思维去解决问题。例&#xff1a;c语言。 面向对象&#xff1a;事情比较复杂&#xff0c;使用简单的线性思维无法解决。例&#xff1a;python。 二.面向对象 1.类和对象 类和对象&#xff1a;由无…