Linux通用系统高危漏洞(CVE-2024-1086)修复案例

一、漏洞描述

2024年3月28日, Linux kernel权限提升漏洞(CVE-2024-1086)的PoC/EXP在互联网上公开,该漏洞的CVSS评分为7.8,目前漏洞细节已经公开披露,美国网络安全与基础设施安全局(CISA)6月1日也更新了其已知漏洞(KEV)目录,要求联邦机构在 2024 年 6 月 20 日之前打上补丁,修复追踪编号为 CVE-2024-1086 的 Linux 内核权限提升漏洞。CVE-2024-1086 是一个高危 use-after-free 漏洞,于 2024 年 1 月 31 日首次披露,存在于 netfilter: nf_tables 组件中,相关漏洞代码于 2014 年 2 月的一项提交并入。攻击者可利用该漏洞可在本地进行提权操作,最高可获取目标服务器的root管理权限。该漏洞于2024年3月28日被公开披露,并在互联网上出现了相关的概念验证(PoC)和攻击工具。由于该漏洞的公开性,攻击者可能会利用这个漏洞进行恶意攻击,因此建议尽快采取修复措施。

漏洞原理:Linux内核版本v5.14 – v6.6的netfilter 子系统nf_tables组件中存在释放后使用漏洞,由于在nft_verdict_init()函数中,允许正值作为hook判决中的丢弃错误,因此当 “nf_hook_slow ()” 函数在NF_DROP一起发出类似于NF_ACCEPT的丢弃错误时,nf_hook_slow()函数可能会导致双重释放漏洞,本地低权限威胁者可利用该漏洞将权限提升为root。Netfilter 是 Linux 内核提供的一个框架,允许进行各种与网络有关的操作,如数据包过滤、网络地址转换(NAT)和数据包混淆。

影响范围: 该漏洞影响了使用Linux内核版本v5.14 – v6.6 版本(不包括分支修补版本 v5.15.149、v6.1.76和v6.6.15)的大多数Linux系统/内核:

3.15<= Linux kernel < 6.1.76
5.2<= Linux kernel < 6.6.15
6.7<= Linux kernel < 6.7.3
6.8:rc1 = Linux kernel

修复建议:

  • 升级Linux内核版本修复漏洞。Linux 多个稳定版目前已经修复,参考如下:
    v5.4.269 及更高版本;v5.10.210 及更高版本;v6.6.15 及更高版本;v4.19.307 及更高版本;v6.1.76 及更高版本;v5.15.149 及更高版本;v6.7.3 及更高版本
  • 若相关用户暂时无法进行更新,如果业务不需要,可以通过阻止加载受影响的 netfilter (nf_tables) 内核模块来缓解。
  • 如果无法禁用该模块,可在非容器化部署中,对用户命名空间进行限制。

在这里插入图片描述
关联资源:Notselwyn公告、nftables、How do I prevent a kernel module from loading automatically?、How to modify the kernel command-line in Red Hat Enterprise Linux 9、内核官网、openeuler安全中心、统信公告、麒麟公告、龙蜥公告及修复、华为欧拉、src-openEuler、nvd.nist

二、复现验证及修复

1、漏洞复现过程(来源Github)

在这里插入图片描述

2、复现脚本

复现脚本exploit可检测内核v5.14 到(including) v6.6版,完成权限提升复现,但不包括v5.15.149>, v6.1.76>, v6.6.15>这些分支,它们已经完成补丁修复;

git clone https://github.com/Notselwyn/CVE-2024-1086 

Cloning into 'CVE-2024-1086'...
remote: Enumerating objects: 2196, done.
remote: Counting objects: 100% (169/169), done.
remote: Compressing objects: 100% (88/88), done.
remote: Total 2196 (delta 87), reused 158 (delta 77), pack-reused 2027
Receiving objects: 100% (2196/2196), 2.10 MiB | 4.42 MiB/s, done.
Resolving deltas: 100% (762/762), done.
#安装
cd CVE-2024-1086
make  #报错
musl-gcc -I./include -I./include/linux-lts-6.1.72 -Wall -Wno-deprecated-declarations src/main.c src/env.c src/net.c src/nftnl.c src/file.c -o ./exploit -static ./lib/libnftnl.a ./lib/libmnl.a
make: musl-gcc: No such file or directory
make: *** [Makefile:25: _compile_static] Error 127
#安装
yum install musl-gcc musl-devel -y
CVE-2024-1086/exploit  #完成后会生成二进制文件

./exploit  #输出如下
[ygcg@zq-fdfs-25 CVE-2024-1086]$ ./exploit 
[*] creating user namespace (CLONE_NEWUSER)...
[*] creating network namespace (CLONE_NEWNET)...
[*] setting up UID namespace...
[*] configuring localhost in namespace...
[*] setting up nftables...
[+] running normal privesc
[*] waiting for the calm before the storm...
[*] sending double free buffer packet...
[*] spraying 16000 pte's...
[*] checking 16000 sprayed pte's for overlap...
[+] confirmed double alloc PMD/PTE
[+] found possible physical kernel base: 00000006f1600000
[+] verified modprobe_path/usermodehelper_path: 00000006f2e56580 ('/sanitycheck')...
[*] overwriting path with PIDs in range 0->4194304...  
[!] verified modprobe_path address does not work... CONFIG_STATIC_USERMODEHELPER enabled? #执行完就跳出了,并未继续越权成功,可能对于内核:Linux 5.10.0-60.70.0.94.oe2203 并不管用


#对于内核版本 > 6.4,还需要检查内核配置 CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y时,用该漏洞不影响
zcat /proc/config.gz|grep CONFIG_INIT_ON_ALLOC  #检查发现输出如下
\# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
#检查LInux是否启用了CONFIG_USER_NS和CONFIG_NF_TABLES
zcat /proc/config.gz|grep CONFIG_USER_NS  #输出如下
CONFIG_USER_NS=y
zcat /proc/config.gz|grep CONFIG_NF_TABLES #输出如下
#=y:表示该功能被编译进内核中,始终可用。
#=m:表示该功能被编译为模块,可以根据需要加载或卸载。
#=n:表示该功能被禁用,不会编译进内核或作为模块。
CONFIG_NF_TABLES=m
CONFIG_NF_TABLES_INET=y
CONFIG_NF_TABLES_NETDEV=y
CONFIG_NF_TABLES_IPV4=y
CONFIG_NF_TABLES_ARP=y
CONFIG_NF_TABLES_IPV6=y
CONFIG_NF_TABLES_BRIDGE=m
#启用nf_tables模块
modprobe nf_tables
#永久加载这个模块,可以将其添加到 /etc/modules-load.d/ 目录下的某个文件中:
echo nf_tables | sudo tee /etc/modules-load.d/nf_tables.conf #或写入modules.conf
#查看
lsmod|grep -i nf_tables
nf_tables             274432  25  #其中,274432:这是模块的大小,单位是字节。表示 nf_tables 模块占用了大约 274432 字节的内存空间。25表示有25个其他模块依赖于 nf_tables 模块。该行表示nf_tables 模块已加载
nfnetlink              20480  3 nf_conntrack_netlink,nf_tables
libcrc32c              16384  3 nf_conntrack,nf_nat,nf_tables
#查看模块是否属于LInux启动初始化映像文件系统加载的一部分。一般不是
lsinitrd /boot/initramfs-$(uname -r).img|grep nf_tables.ko

3、现场处理

现场使用的是云能的Euler V22.10 U2版 ,它基于**openEuler 22.03 LTS SP2**版本发布,内核版本:Linux 5.10.0-60.70.0.94.oe2203;现场用poc脚本测试并未越权成功,但是据网络相关经验表明,openEuler 22.03 LTS的内核5.10.0-60.18.0.50.oe2203.x86_64版本是可以越权成功的,案例中内核升级到了5.10.0-60.139.0.166.oe2203.x86_64,比现场版本高;现场内核验证结果如下所示:

在这里插入图片描述

#可用内核版本
yum check-update |grep kernel-*  #或yum check-update kernel,yum list available kernel

kernel.x86_64                         5.10.0-136.49.0.127.10.oe2203.bclinux update    
kernel-devel.x86_64                   5.10.0-136.49.0.127.10.oe2203.bclinux update    
kernel-headers.x86_64                 5.10.0-136.49.0.127.10.oe2203.bclinux update    
kernel-tools.x86_64                   5.10.0-136.49.0.127.10.oe2203.bclinux update   
#或
yum list kernel --showduplicates
#查看可用补丁
yum search linux-kernel

#非容器化部署中,可以通过将 user.max_user_namespaces 设置为 0 来禁用用户命名空间
echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
sysctl -w kernel.unprivileged_userns_clone=0  #禁用非特权用户创建命名空间的能力
sysctl -p /etc/sysctl.d/userns.conf
#禁止nf_tables模块
vi /etc/modprobe.d/nf_tables-blacklist.conf  #新增如下内容:
blacklist nf_tables
#验证
insmod nf_tables.ko.xz   #加载/usr/lib/modules/5.10.0-60.70.0.94.oe2203.bclinux.x86_64/kernel/net/netfilter/nf_tables.ko.xz
#卸载已加载的目标模块
modprobe -r module_name
echo "blacklist nf_tables" >> /etc/modprobe.d/nf_tables-blacklist.conf  ##同上,将模块加入blacklist,避免自动再次载入
echo "install nf_tables /bin/false" >> /etc/modprobe.d/nf_tables-blacklist.conf  #这样,当OS下次尝试加载模块时,将执行/bin/false;这将防止模块按需加载
cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.$(date +%m-%d-%H%M%S).bak #备份 initramfs(Initial RAM Filesystem),如果目标模块属于initramfs的一部分,需rebuild initramfs,执行如下
dracut --omit-drivers module_name -f  #重建
#持久化配置
MODNAME="module_name"; echo "omit_dracutmodules+=\" $MODNAME \"" >> /etc/dracut.conf.d/omit-$MODNAME.conf  #不需要的时候,删除该文件即可
grubby --info ALL (To view changes in all available kernels) 

内核升级方式:内核的更换主要有三重方式,第一种是下载源码进行编译;第二种是通过添加内核源,然后使用yum进行安装;第三种是通过下载rpm包,然后通过rpm来进行安装。推荐第三中方式。

#查看内核启动顺序
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg  #启动顺序默认降序排列,从0开始
grub2-set-default 0  #设置最新的内核为默认启动

现场欧拉系统,通过POC测试脚本暂无法确定,官网查看,详情如下:
在这里插入图片描述
在这里插入图片描述
受影响版本:

1.openEuler-20.03-LTS-SP1(4.19.90):受影响
2.openEuler-20.03-LTS-SP3(4.19.90):受影响
3.openEuler-20.03-LTS-SP4(4.19.90):受影响
4.openEuler-22.03-LTS(5.10.0):受影响
5.openEuler-22.03-LTS-SP1(5.10.0):受影响
6.openEuler-22.03-LTS-SP2(5.10.0):受影响
7.openEuler-22.03-LTS-SP3(5.10.0):受影响
8.openEuler-22.03-LTS-Next(5.10.0):受影响
9.master(6.1.0):不受影响

漏洞修复:penEuler-HotPatchSA-2024-1008、官方补丁
在这里插入图片描述
补丁说明:

//net/netfilter/nf_tables_api.c	
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c
index 0d0b76a5ddfaa9..f586e8b3c6cfac 100644
--- a/net/netfilter/nf_tables_api.c
+++ b/net/netfilter/nf_tables_api.c
@@ -9340,16 +9340,10 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data,
 	data->verdict.code = ntohl(nla_get_be32(tb[NFTA_VERDICT_CODE]));
 
 	switch (data->verdict.code) {
-	default:
-		switch (data->verdict.code & NF_VERDICT_MASK) {
-		case NF_ACCEPT:  
-		case NF_DROP:     
-		case NF_QUEUE:    
-			break;
-		default:
-			return -EINVAL;
-		}
-		fallthrough;
+	case NF_ACCEPT:
+	case NF_DROP:
+	case NF_QUEUE:
+		break;
 	case NFT_CONTINUE:
 	case NFT_BREAK:
 	case NFT_RETURN:
@@ -9384,6 +9378,8 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data,
 
 		data->verdict.chain = chain;
 		break;
+	default:
+		return -EINVAL;
 	}
 
 	desc->len = sizeof(data->verdict);

现场处理:

# 新增openEuler-22.03-LTS-SP2 repo源
vi /etc/yum.repos.d/openEuler-22.03-LTS-SP2.repo
[SP2_OS]
name=SP2_OS
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/OS&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler

[SP2_everything]
name=SP2_everything
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/everything&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/everything/$basearch/RPM-GPG-KEY-openEuler

[SP2_EPOL]
name=EPOL
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/EPOL/main/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/EPOL/main&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler

[SP2_debuginfo]
name=debuginfo
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/debuginfo/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/debuginfo&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/debuginfo/$basearch/RPM-GPG-KEY-openEuler

[SP2_source]
name=source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/source/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever&arch=source
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/source/RPM-GPG-KEY-openEuler

[SP2_update]
name=SP2_update
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/update/$basearch/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=$basearch
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/OS/$basearch/RPM-GPG-KEY-openEuler

[SP2_update-source]
name=SP2_update-source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/update/source/
metalink=https://mirrors.openeuler.org/metalink?repo=$releasever/update&arch=source
metadata_expire=1h
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP2/source/RPM-GPG-KEY-openEuler

#参考上问yum升级内核到:kernel-5.10.0-153.43.0.121.oe2203sp2.x86_64
yum  --disablerepo=\* --enablerepo=SP2_update list kernel --showduplicate|grep 5.10.0-153.43.0.121  #输出
kernel.x86_64            5.10.0-153.43.0.121.oe2203sp2                SP2_update
#升级
yum  --disablerepo=\* --enablerepo=SP2_update  --nogpgcheck update kernel-5.10.0-153.43.0.121.oe2203sp2.x86_64
#验证
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg  #输出如下
BigCloud Enterprise Linux (5.10.0-153.43.0.121.oe2203sp2.x86_64) 22.10 LTS
BigCloud Enterprise Linux (5.10.0-60.70.0.94.oe2203.bclinux.x86_64) 22.10 LTS
#设置第一个为默认,实际不设置也是优先第一个
grub2-set-default 0

grub2-editenv list  #输出,这里也证明默认的启动一变成新的内核版本,与cat /etc/default/grub的GRUB_DEFAULT对应
saved_entry=BigCloud Enterprise Linux (5.10.0-153.43.0.121.oe2203sp2.x86_64) 22.10 LTS
boot_success=0
#备份旧镜像,之后就会找到新镜像来启动
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak  #备份呢当前启动镜像
reboot

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

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

相关文章

springboot框架使用Netty依赖中解码器的作用及实现详解

在项目开发 有需求 需要跟硬件通信 也没有mqtt 作为桥接 也不能http 请求 api 所以也不能 json字符串这么爽传输 所以要用tcp 请求 进行数据交互 数据还是16进制的 写法 有帧头 什么的 对于这种物联网的这种对接 我的理解就是 我们做的工作就像翻译 把这些看不懂的 字节流 变成…

深圳技术大学oj C : 生成r子集

Description 输出给定序列按字典序的 &#xfffd; 组合&#xff0c;按照所有 &#xfffd; 个元素出现与否的 01 标记串 &#xfffd;&#xfffd;&#xfffd;&#xfffd;−1,...,&#xfffd;1 的字典序输出. 此处01串的字典序指&#xff1a;先输入的数字对应低位&#x…

SOBEL图像边缘检测器的设计

本项目使用FPGA设计出SOBEL图像边缘检测器&#xff0c;通过分析项目在使用过程中的工作原理和相关软硬件设计进行分析详细介绍SOBEL图像边缘检测器的设计。 资料获取可联系wechat 号&#xff1a;comprehensivable 边缘可定义为图像中灰度发生急剧变化的区域边界,它是图像最基本…

Rust 跨平台-Android 和鸿蒙 OS

1. 安装 rustup rustup 是 Rust 的安装和版本管理工具 $ curl --proto https --tlsv1.2 https://sh.rustup.rs -sSf | sh 该命令会安装 rusup 和最新的稳定版本的 Rust&#xff1b;包括&#xff1a; rustc Rust 编译器&#xff0c;用于将 Rust 代码编译成可执行文件或库。 ca…

记录在Linux(龙蜥8.6)配置jdk环境变量不生效问题

在Linux中&#xff0c;将jdk解压至 /opt/soft/jdk 目录中&#xff0c;使用root用户配置在/etc/profile中配置环境变量并source后&#xff0c;使用root用户是正常的&#xff0c;但是切换到普通用户后提示&#xff1a; 这个问题是普通用户对 /opt/soft/jdk 目录无执行权限 解决&…

【精选】数据治理项目实施(合集)05——解码“数据架构”,数据架构包含哪些内容?

上一篇讲到了数据治理项目的前期调研工作&#xff0c;继数据调研工作完成之后&#xff0c;就要开始关于治理工作的各项方案设计&#xff0c;整体方案设计包括数据架构、元数据、主数据、数据质量、数据安全、指标标签体系、数据生命周期管理和管理评价等内容。这一篇重点讲一下…

4面体空间内直链4点结构分布与占比

在30个点的4面体空间内取4个点&#xff0c;有30*29*28*27/2427405种取法&#xff0c;要求得到的4个点必须在直链上。只有144个结构符合要求&#xff0c;在平移操作下不重合的结构有36个。 这36个结构可以按照旋转对称性进一步分成3组0&#xff0c;1&#xff0c;4&#xff0c;每…

SaaS客户裂变:如何构建合作伙伴的双向沟通桥梁

在SaaS行业中&#xff0c;客户裂变不仅是增长的关键&#xff0c;更要求与合作伙伴之间建立稳固的沟通桥梁。如何构建合作伙伴双向沟通的桥梁&#xff0c;真正做到理解对方的价值需求&#xff0c;实现长期合作共赢呢&#xff1f; 一、明确价值共享 首先&#xff0c;确保双方明…

MK米客方德SD NAND磨损均衡技术

上次MK给大家讲解了MK SD NAND异常掉电保护机制&#xff0c;不少的工程师朋友们对此挺感兴趣&#xff0c;今天再和大家聊一聊SD NAND内部的另外一个核心技术SD NAND&#xff1a;磨损均衡&#xff08;Wear Leveling&#xff09;。 SD NAND内部主要由NAND Flash和Flash Controll…

秋招季的策略与行动指南:提前布局,高效备战,精准出击

6月即将进入尾声&#xff0c;一年一度的秋季招聘季正在热火进行中。对于即将毕业的学生和寻求职业发展的职场人士来说&#xff0c;秋招是一个不容错过的黄金时期。 秋招的序幕通常在6月至9月间拉开&#xff0c;名企们纷纷开启网申的大门。在此期间&#xff0c;求职备战是一个系…

stm32学习笔记---TIM输入捕获(理论部分)

目录 输入捕获简介 频率测量 测频法 测周法 测频法和测周法的区别 中界频率 如何实现测周法 输入捕获的各部分电路 电路执行的细节 主从触发模式 输入捕获基本结构 PWMI基本结构 声明&#xff1a;本专栏是本人跟着B站江科大的视频的学习过程中记录下来的笔记&#…

检索增强生成RAG系列1--RAG的实现

大模型出现涌现能力之后&#xff0c;针对大模型的应用也如雨后春笋般。但是&#xff0c;在大模型真正落地之前&#xff0c;其实还需要做好最后一公里&#xff0c;而这个最后一公里&#xff0c;其中不同应用有着不同的方法。其中prompt、微调和RAG都是其中方法之一。本系列就是针…

C++11 右值引用和移动语义,完美转发和万能引用,移动构造和移动赋值,可变参数模板,lambda表达式,包装器

文章目录 C11简介统一的列表初始化&#xff5b;&#xff5d;初始化std::initializer_list声明autodecltypenullptr 范围for循环 智能指针STL中一些变化右值引用和移动语义左值引用和右值引用左值引用与右值引用比较 右值引用使用场景和意义右值引用引用左值及其一些更深入的使用…

Spring框架FactoryBean接口的作用和应用

一、FactoryBean源码解读 FactoryBean<T> 是 Spring 框架 beans.factory包中的一个接口&#xff0c;从字面意思可以理解为工厂bean&#xff0c;它是干什么的&#xff0c;类名上的泛型又是指什么&#xff0c;有什么作用&#xff1f; 注释看不懂没关系&#xff0c;先看一…

一键智控,舒适无限:网关在风机盘管智能温控中的应用

风机盘管智能控制系统采用钡铼技术系列无线网关&#xff0c;搭配各类风机设备及传感器组成无线物联中央空调室内机管理系统&#xff0c;实现整个办公楼的空调环境智能化管理。在建筑舒适度的前提下&#xff0c;降低能耗&#xff0c;避免能源浪费。 网关通信接口采用无线传输的…

上班族要怎么挑选智能猫砂盆?今年最受欢迎的牌子都在这里了!

对于上班族来说&#xff0c;猫砂盆里的猫屎到底该如何是好&#xff0c;放到下班回来再铲&#xff0c;猫砂的臭味早就飘满屋子&#xff0c;想立刻铲掉吧&#xff0c;班不要上啦&#xff1f;可是不铲就会生细菌&#xff0c;谁也不想花个几千块去给猫咪看病吧&#xff0c;谁不希望…

PointMamba: A Simple State Space Model for Point Cloud Analysis

1. 论文基本信息 2. 创新点 介绍了第一个状态空间模型 PointMamba&#xff0c;将其应用与点云分析。PointMamba 表现出令人印象深刻的能力&#xff0c;包括结构简单性&#xff08;例如&#xff0c;vanilla Mamba&#xff09;、低计算成本和知识可迁移性&#xff08;例如&#…

大数据处理引擎选型之 Hadoop vs Spark vs Flink

随着大数据时代的到来&#xff0c;处理海量数据成为了各个领域的关键挑战之一。为了应对这一挑战&#xff0c;多个大数据处理框架被开发出来&#xff0c;其中最知名的包括Hadoop、Spark和Flink。本文将对这三个大数据处理框架进行比较&#xff0c;以及在不同场景下的选择考虑。…

测绘局内外网文件导入导出,怎样才能效率安全两手抓?

测绘局负责进行各种基础测绘工作&#xff0c;如地形测量、地籍测绘、海洋测绘等&#xff0c;获取并更新国家基础地理信息数据。这些数据是国民经济建设、城市规划、资源调查、环境保护等各个领域的重要基础资料。对于维护国家地理信息安全、促进国民经济和社会发展具有重要意义…

工业边缘计算网关

1 介绍 HINETG系列边缘计算网关&#xff08;Linux操作系统&#xff09;&#xff0c;是华辰智通的—款面向工业现场设备接入、数据采集、设备监控的工业级边缘计算网关。采用ARM Cortex-A7 800MHz高性能CPU,拥有以太网、串口、CAN口、IO口等丰富的接口&#xff0c;支持以太网、…