linux下的nfs概述与实验(openEuler22.03)
目录
- 什么是NFS
- NFS工作原理
- NFS常用文件
- /etc/exports文件
- /etc/exports格式
- /var/lib/nfs/etab文件
- NFS常用选项
- NFS配置方式
- 1. 安装NFS和RPC
- 2. 启动rpcbind和nfs
- 3. 准备目录
- 4. 配置/etc/exports并重启服务
- 5. 连接测试
- 服务端自我测试
- 客户端测试
- 补充
- 常用命令
- 永久挂载
- 注意
- 什么是NFS用户映射
- 修改默认的用户映射——实验
- NFS安全优化
什么是NFS
NFS(Network File System,网络文件系统)是一种允许网络上的计算机之间共享文件系统的协议。通过NFS,用户和程序可以像访问本地存储一样访问远程服务器上的文件。NFS广泛应用于各种场景,例如在不同的服务器之间共享配置文件、共享数据存储等。
NFS工作原理
NFS 服务的实现依赖于 RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。
在CentOS 6 以后,已经将RPC从原本的postmapper更名为rpcbind
NFS常用文件
/etc/exports文件
/etc/exports
文件是NFS服务器的核心配置文件,它用于定义哪些目录将被导出(即共享)以及导出的目录可以被哪些客户端访问,以及访问权限和选项。每一行都代表一个共享配置。
使用/etc/exports
文件,其实就是在systemctl启动nfs时,调用了exportsfs
这个文件。
/etc/exports格式
假设我们有一个共享目录 /data
,我们可以为不同的客户端设置不同的访问权限:
/shared 192.168.1.101(rw) 192.168.1.102(ro)
# shared 是本地要共享的目录。
# 192.168.1.101 和 192.168.1.102 是允许访问此共享目录的客户端IP地址。(也可以是网段、域名)
# rw 表示读写权限,ro 表示只读权限。
/var/lib/nfs/etab文件
实际上/etx/exports
文件的选项特别多,但是我们最少仅需写共享目录 IP/网段(ro/rw)
即可工作,这是因为,nfs有一个默认配置文件。
对于在/etc/exports
中的共享目录权限设置,会自动映射到/var/lib/nfs/etab
中,并补全默认配置。
假设对所有网段均可以访问/data目录
cat /etc/exports
/data *(rw)
cat /var/lib/nfs/etab
/data *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
NFS常用选项
在上一部分,我们可以看到nfs的选项实际特别多,那么常用的选项及其解释如下:
rw:允许客户端读写访问共享目录。
ro:客户端只能读取共享目录。
sync:同步写操作,数据会在写入请求完成后立即写入到磁盘。
async:异步写操作,数据可能会被缓存在内存中,提高性能但可能在系统崩溃时导致数据丢失。
no_subtree_check:禁用子目录检查,可以提高性能。
subtree_check:启用子目录检查,确保NFS服务器只允许访问被导出的目录,而不是其子目录。
no_root_squash:保留根用户权限,客户端上的root用户在服务器上依然是root用户。
root_squash:将客户端上的root用户映射为匿名用户,默认选项,提高安全性。
all_squash:将所有客户端用户都映射为匿名用户。
anonuid 和 anongid:指定匿名用户的UID和GID。
NFS配置方式
部署:nfs-utils,rpcbind
准备环境:目录,权限
配置服务:/etc/exports
启动服务:rpc,nfs
服务端本地测试
1. 安装NFS和RPC
#检查是否安装
rpm -qa | grep nfs*
rpm -qa | grep rpc*#安装
yum install -y nfs-utils rpcbind
2. 启动rpcbind和nfs
systemctl enable rpcbind --now
rpcinfo -p #查看rpc注册信息program vers proto port service100000 4 tcp 111 portmapper100000 3 tcp 111 portmapper100000 2 tcp 111 portmapper100000 4 udp 111 portmapper100000 3 udp 111 portmapper100000 2 udp 111 portmapper100024 1 udp 45864 status100024 1 tcp 40741 statussystemctl enable nfs --now
rpcinfo -p #开启nfs后可以查看到新的信息program vers proto port service
...100003 3 tcp 2049 nfs100003 4 tcp 2049 nfs100227 3 tcp 2049 nfs_acl100021 1 udp 42221 nlockmgr100021 3 udp 42221 nlockmgr100021 4 udp 42221 nlockmgr100021 1 tcp 46639 nlockmgr
...
3. 准备目录
mkdir -p /data
chown -R nobody.nobody /data
# nfs默认的用户是id为65534的用户
# 在centos7中这个用户叫做nfsnobody,在8版本之后,nfsnobody和nobody用户合并了
4. 配置/etc/exports并重启服务
#配置/etc/exports
echo "/data *(rw)" >> /etc/exports
cat /etc/exports
/data *(rw)
cat /var/lib/nfs/etab
/data *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)#重启服务
#reload-已连接nfs服务的用户端不会断开连接
#restart-已连接nfs服务的用户会被强制断开连接
systemctl reload nfs
5. 连接测试
服务端自我测试
mount -t nfs 10.0.0.124::/data/ /mnt/#查看挂载情况
df -h /mnt
Filesystem Size Used Avail Use% Mounted on
10.0.0.124:/data 40G 3.8G 37G 10% /mnt#查看nfs挂载情况
showmount -e
Export list for ecm:
/data *
客户端测试
#想使用nfs服务的客户端,同样需要安装nfs-utils
yum install -y nfs-utils
#不需要启动nfs服务#挂载方式如上<服务端测试>
mount -t nfs 10.0.0.124::/data/ /mnt/
补充
常用命令
rpcinfo -p
检查nfs服务端的rpc信息. 主要检查是否有NFS信息即可. showmount -e ip
检查nfs服务端共享信息(共享哪些目录)
永久挂载
/etc/fstab
cat /etc/fstab
设备 挂载点 文件系统类型 挂载参数 是否检查 是否备份
10.0.0.124:/data/ /upload/ nfs defaults 0 0
/etc/rc.d/rc.loacl
tail -1 /etc/rc.d/rc.local
mount -t nfs 10.0.0.124::/data/ /mnt/chmod +x /etc/rc.d/rc.local
注意
如果配置了永久挂载。若在nfs服务器之前启动客户端,因为无法连接到该nfs,客户端启动会卡住(大约90s)。
因此如果配置了永久挂载,nfs服务器需要提前启动。
什么是NFS用户映射
NFS客户端挂载NFS服务端后,创建的文件默认属于nobody,这种操作就叫用户压缩(映射)。
[root@ecm ~]# ll /mnt
total 0
-rw-r--r-- 1 nobody nobody 0 May 19 20:35 test1.txt
用户压缩是通过NFS服务端的配置实现。(所有常用选项见上文)
服务端配置选项-用户压缩系列 | 说明 |
---|---|
root_squash | 如果客户端是root用户访问,则到了nfs服务端会被压缩( 默认的 ) |
no_all_squash | 如果客户端不是root用户访问,则不进行压缩(保存原始用户, 默认的 ) |
all_squash | 所有用户都进行压缩(不是太安全) |
anonuid 和 anongid | 用于指定压缩的匿名用户(默认是nobody用户)anonuid=65534,anongid=65534 |
用户压缩/用户映射: NFS客户端访问NFS共享目录的时候变成了什么用户
nfs客户端用户 -> nfs服务端用户
root -> noboby
默认情况下:
- 所有的root用户的操作都会被映射为anonuid和anongid所指定的用户
root_squash
; - 而其他用户则默认保留原始用户
no_all_squash
- 可以通过
anonuid
和anongid
修改映射后的用户。
修改默认的用户映射——实验
设置/nfsdata共享目录,匿名用户为www. 客户端挂载到/upload-video/,www用户的uid,gid:1999 (服务端,客户端)
#创建用户
groupadd -g 1999 www
useradd -u 1999 -g www -s /sbin/nologin -M www#添加目录映射
echo "/nfsdata *(rw,all_squash,anonuid=1999,anongid=1999)" >> /etc/exports#创建目录并重启服务
mkdir /nfsdata
chown -R www.www /nfsdata/ #不修改属主会导致创建命令时被拒绝
systemctl reload nfs#挂载测试
showmount -eExport list for ecm:/nfsdata */data *
mount -t nfs 10.0.0.124:/nfsdata testnfswww
touch testnfswww/testa{1..5}.txt
ll testnfswww/total 0-rw-r--r-- 1 www www 0 May 20 13:05 testa1.txt
NFS安全优化
让客户端挂载只能上传不能执行
mount -o noexec,nosuid,nodev -t nfs 10.0.0.124:/data /video/
#这几个是客户端挂载选项
# noexec 挂载的nfs目录中如果有命令,无法运行。
# nosuid 带有suid的命令
# nodev 带有特殊属性的文件。
相关文章:

linux下的nfs概述与实验(openEuler22.03)
目录 什么是NFSNFS工作原理NFS常用文件/etc/exports文件/etc/exports格式 /var/lib/nfs/etab文件 NFS常用选项NFS配置方式1. 安装NFS和RPC2. 启动rpcbind和nfs3. 准备目录4. 配置/etc/exports并重启服务5. 连接测试服务端自我测试客户端测试 补充常用命令永久挂载注意 什么是NF…...
影响Oracle数据库打开速度的因素
当Oracle发起一个事务需要更改数据时,如果所涉及的数据块不在BUFFER CACHE中,那么Oracle服务进程首先会将相关数据块从数据文件中读进BUFFER CACHE进行更改(直接路径读除外),更改后的数据块称之为脏块(DIRT…...

dify:开源 LLMOps平台。
单纯笔记: 一、关于 Dify dify/README_CN.md at main langgenius/dify GitHub Dify 是一款开源的大语言模型(LLM)应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以…...

CCF20220601——归一化处理
CCF20220601——归一化处理 代码如下: #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…...
用Ai编写一个电机驱动程序
问:帮我写一个步进电机的控制程序,要有包括加减速,以及电机步中断处理函数。 答:编写一个步进电机的控制程序涉及到硬件层面的操作,通常需要依赖特定的硬件平台和相应的驱动程序。以下是一个简化的示例,它展…...

【C++入门】—— C++入门 (下)_内联函数
前言:在了解完前面的C基础内容后,马上我们就要真正不如C的学习了,但在之前让我们最后了解最后一点点C入门知识!来迟的520特别篇! 本篇主要内容: 内联函数 auto关键字 范围for 指针空值nullptr C入门 1. 内联…...
Java数据结构与算法(最小栈)
前言 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。i…...

7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)
1 TL Settings Transaction Layer (TL)设置只在Advanced模式下有效。 Endpoint: Unlock and PME_Turn_Off Messages: 与端点的电源管理相关,允许发送解锁和电源管理事件关闭消息。 Root Port: Error Messages: Error Correctable(错误可纠正)…...
k8s 部署mqtt简介
在Kubernetes(K8s)中部署MQTT(Message Queuing Telemetry Transport)服务通常涉及以下几个步骤: 选择MQTT Broker MQTT Broker是MQTT消息传递的中间件。流行的MQTT Broker包括Mosquitto, HiveMQ, EMQ X等。你需要选择一…...
汇凯金业:量化交易中常用的数学模型有哪些
量化交易中运用了多种数学模型来识别市场的潜在机会和建立交易策略。以下是一些在量化交易中常用的数学模型: 1. 时间序列分析模型 时间序列分析是研究和预测数据点随时间顺序变化趋势的方法。在量化交易中,常用的时间序列模型包括: 自回归&a…...

局部直方图均衡化去雾算法
目录 1. 引言 2. 算法流程 3. 代码 4. 去雾效果 1. 引言 局部直方图算法是一种基于块的图像去雾方法,它将图像分割为若干个块,并在每个块内计算块的局部直方图。通过对各个块的直方图进行分析和处理,该算法能够更好地适应图像中不同区域的…...

selenium环境安装和web自动化基础
webUI自动化背景 因为web页面经常会变化,所以UI自动化测试的维护成本很高。不如接口的适用面广,所以大部分公司会做接口自动化测试,但是未必会做UI自动化测试; UI自动化测试要做也是覆盖冒烟测试,不会到很高的覆盖率&a…...

【UE Websocket】“WebSocket Server”插件使用记录
1. 在商城中下载“WebSocket Server”插件 该插件具有如下节点,基本可以满足WebSocket服务端的所有需求 2. 如果想创建一个基本的服务端,我们可以新建一个actor蓝图,添加如下节点 3. UE运行后,我们可以使用在线的websocket测试助手…...
spring中依赖注入(DI)是什么?
好的,让我以尽可能通俗易懂的方式来解释什么是依赖注入(DI,Dependency Injection)。 假设你正在制作一款游戏,游戏中有个角色需要使用武器。在没有依赖注入的情况下,这个角色可能需要自己创建一个武器。这…...

paligemma、Grounding-DINO-1.5简单无需标注无需训练直接可以使用的VLM图像到文本模型
1、paligemma 参考:https://github.com/google-research/big_vision/blob/main/big_vision/configs/proj/paligemma/README.md 模型架构: 文本与图像特征一起送入大模型 在线体验网址: https://huggingface.co/spaces/big-vision/paligemma 通过文字prompt既可与图片对话…...

FreeRTOS学习——FreeRTOS队列(下)之队列创建
本篇文章记录我学习FreeRTOS队列创建的知识。主要分享队列创建需要使用的初始化函数、队列复位函数。 需要进一步了解FreeRTOS队列的相关知识,读者可以参考以下文章: FreeRTOS学习——FreeRTOS队列(上)_freertos 单元素队列-CSDN博…...

js实现鼠标拖拽多选功能
实现功能 在PC端的H5页面中,客户拖动鼠标可以连选多个选项 效果展示 具体代码如下 <!DOCTYPE html> <html><head><title>鼠标拖拽多选功能</title><script src"https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js&quo…...

postgres_exporter 监控pg坑一:备库无延迟但是监控告警备库延迟
1.问题背景 监控告警某套pg的两个备库延迟大于300s 2.pg备库延迟告警策略 通过postgres_exporter(version 0.13.2)监控生产pg,延迟告警策略如下: pg_replication_lag_seconds{instance!~"host_ip_18801"} > 300 and ON(instance) pg_re…...

vue打包部署到springboot,通过tomcat运行
tomcat默认端口 8080springboot端口 9132vue 端口 9131 框架 项目是基于SpringBootVue前后端分离的仓库管理系统 后端:SpringBoot MybatisPlus前端:Node.js Vue element-ui数据库:mysql 一. 打包Vue项目 cmd中输入命令 npm run build 后…...

如何有效防止数据丢失
在数字时代,数据成为了个人和企业最宝贵的资产之一。不幸的是,数据丢失的威胁无时无刻不在潜伏着,无论是由于技术故障、人为错误还是恶意攻击,都可能对我们的数据造成不可逆转的损失。因此,采取有效的预防措施至关重要…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...