15.NFS 服务器

NFS 服务介绍

NFS是Network File System的缩写,即网络文件系统,是一种基于TCP/IP协议的网络文件共享协议,最早由Sun公司开发,它允许不同操作系统的计算机通过网络共享文件和目录,实现跨平台的文件访问和管理。

核心功能

  • 文件共享:将服务器上的目录 “挂载” 到客户端,客户端可像访问本地文件一样读写共享目录中的内容。
  • 跨平台兼容:支持 Unix、Linux、Windows、macOS 等多种操作系统,解决不同系统间的文件互通问题。
  • 透明访问:客户端访问共享文件时,无需了解文件实际存储在远程服务器,操作方式与本地文件一致。
  • 权限控制:通过文件系统权限(如 Unix 的用户 / 组权限)和 NFS 配置,限制客户端对共享资源的访问权限(读、写、执行等)。

NFS工作原理

NFS工作原理图

image-20250807220800270

NFS工作流程:

  1. 用户进程在客户端房间提出要访问远程文件的请求。
  2. 本地文件访问的小助手把请求转给 NFS 客户端。
  3. NFS 客户端通过 TCP/IP 协议栈这个管道把请求发送到服务器端。
  4. 服务器端的 RPC 服务(portmap)这个导航员指引 NFS 客户端找到 NFS 服务。
  5. NFS 服务处理请求,通过本地文件访问小助手从本地磁盘获取文件。
  6. 文件再通过 TCP/IP 协议栈管道返回给客户端的 NFS 客户端。
  7. 最后,客户端的本地文件访问小助手把文件交给用户进程。

部署服务

NFS服务由nfs-utils软件包提供

# 安装软件包
[root@server ~]# yum install -y nfs-utils# 准备用户作为客户端(client)
[root@server ~]# useradd -u 1000 bq
[root@server ~]# echo 123 | passwd --stdin bq# 准备共享目录
[root@server ~]# mkdir -p /shares/nfs
[root@server ~]# chown bq /shares/nfs# 启用并启动服务
[root@server ~]# systemctl enable nfs-server --now # 配置防火墙,学习阶段可直接把防火墙直接关闭
[root@server ~]# firewall-cmd --permanent --add-service=nfs --add-service=rpc-bind --add-service=mountd
[root@server ~]# firewall-cmd --reload

配置 NFS 导出

exportfs 命令:

exportfs 是 Linux 系统中用于管理 NFS 服务器共享目录(导出目录)的核心命令,主要用于查看、刷新、添加或删除 NFS 共享配置,无需重启 NFS 服务即可使修改生效。

命令基本格式:

exportfs [选项] [参数]
1. 查看当前导出的 NFS 共享
exportfs -v  # 详细显示所有导出的共享目录及配置选项
exportfs -r  # 重新加载 /etc/exports 配置(常用)
  • -v:显示详细信息,包括共享目录、允许访问的客户端、权限选项等。

  • 示例输出:

    /data  10.1.8.11/24(rw,sync,no_root_squash,wdelay)
    
2. 重新加载 NFS 共享配置

当修改 /etc/exports 文件后,无需重启 NFS 服务,直接执行:

exportfs -ra
  • -r:重新读取 /etc/exports 并同步共享配置(刷新现有共享)。
  • -a:应用所有共享配置(包含新增和删除的共享)。
  • 这是修改 NFS 共享后最常用的命令,确保配置立即生效。
3. 临时导出一个共享目录

无需修改 /etc/exports,可临时导出一个目录(重启 NFS 服务后失效):

exportfs -o rw,sync 10.1.8.11:/tmp/share
  • -o:指定共享选项(如 rw 读写、sync 同步写入)。
  • 格式:客户端IP:/要共享的本地目录
4. 删除已导出的共享目录
exportfs -u 10.1.8.11/24:/data  # 取消特定客户端对 /data 的共享
exportfs -ua                       # 取消所有已导出的共享
  • -u:取消导出(卸载共享)。
  • 常用于临时移除某个共享,而不修改 /etc/exports
5. 其他实用选项
  • -i:忽略 /etc/exports 文件,仅通过命令行参数指定共享(需配合 -o 使用)。
  • -f:在重新加载配置前,清除所有当前导出的共享(通常与 -r 结合使用:exportfs -fr)。
常见使用场景
  1. 修改 /etc/exports 后刷新配置:

    vim /etc/exports  # 编辑共享配置
    exportfs -ra      # 使配置生效
    
  2. 查看当前所有 NFS 共享详情:

    exportfs -v
    
  3. 临时取消某个共享(如紧急维护):

    exportfs -u 10.1.8.11/24:/data
    
注意事项
  • exportfs 仅用于管理 NFS 服务器的共享配置,客户端挂载不受直接影响。
  • 临时导出的共享(未写入 /etc/exports)在 NFS 服务重启后会失效,需持久化配置请编辑 /etc/exports
  • 执行命令需 root 权限(使用 sudo)。
编辑/etc/exports文件
  • 共享目录格式共享目录 客户端IP(访问权限)
  • 访问权限选项
    • rw:读写权限。
    • ro:只读权限。
    • sync:同步写入,确保数据在写入内存的同时也写入磁盘,保证数据安全但性能稍低。
    • async:异步写入,数据先写入内存,再异步写入磁盘,性能较高但可能丢失数据。
    • no_subtree_check:不检查子树,提高性能。
    • no_root_squash,默认情况下,当客户机上的root用户访问NFS导出时,服务器会将其视为nobody用户(在服务器上定义)的访问。
重新加载配置
  • 使用exportfs - ra命令重新加载/etc/exports文件中的配置,使新的共享设置生效。

==提示:==NFS服务器主要配置文件是**/etc/exports**,目录**/etc/exports.d中任何以.exports**结尾且不以点(.)开头的文件也会生效。 所有这些文件都使用相同的语法。

==提示:==与编辑文件/etc/exports本身相比,在/etc/exports.d中创建或删除文件可能更容易,并且它可以减少一系列相关配置更改意外破坏现有导出的风险。

配置文件中,每一行都声明一个导出点。 第一个字段是要导出到客户端的目录的名称。 该行的其余部分列出了可以访问共享目录的客户端系统以及授予它们的访问权限。

==提示:==NFS不要使用SMB共享的目录。 如果这样做,则可能会导致文件损坏或其他文件完整性或一致性问题。

配置示例
  • 可解析DNS的主机名,例如client.bq.cloud。 在以下示例中,client.bq.cloud系统可以挂载/shares/nfs目录。
/shares/nfs client.bq.cloud
  • DNS解析的主机名,带*通配符。 以下示例允许bq.cloud域中的所有系统访问NFS共享。
/shares/nfs *.bq.cloud
  • IPv4地址。 以下示例允许从10.1.8.12 IP地址访问NFS共享。
/shares/nfs 10.1.8.11
  • IPv4网络。 以下示例允许从10.1.8.0/24网络访问NFS共享。 您也可以使用10.1.8.0/255.255.255.0 表示法。
/shares/nfs 10.1.8.0/24
/shares/nfs 10.1.8.0/255.255.255.0
  • IPv6地址。 以下示例允许具有fde2:6494:1e09:2::20 IPv6地址的客户端系统访问NFS共享。
/shares/nfs fde2:6494:1e09:2::20
  • IPv6网络。 以下示例允许fde2:6494:1e09:2::/64 IPv6网络访问NFS共享。
/shares/nfs fde2:6494:1e09:2::/64
  • 要与多个客户机系统共享目录,请在目录名称后使用以空格分隔的列表:
/shares/nfs 10.1.8.0/24 client.bq.cloud *.example.net

默认情况下,目录以只读模式与客户端共享。 在每个客户定义之后,您可以立即在括号中指定导出选项以覆盖默认值。 客户端定义的末尾和左括号之间必须没有空格。

选项示例

  • rw,此选项允许对指定客户端进行读/写访问。 如果没有该选项(或者如果您使用ro代替),则NFS仅授予读取访问权限。 在以下示例中,client.bq.cloud具有读/写访问权限,而client2.bq.cloud具有只读访问权限。

    /shares/nfs client.bq.cloud(rw) client2.bq.cloud
    
  • no_root_squash,默认情况下,当客户机上的root用户访问NFS导出时,服务器会将其视为nobody用户(在服务器上定义)的访问。 这意味着,如果客户端上的root用户在导出文件上创建了文件,则该文件将归用户nobody所有。 这也意味着,如果客户机上的root用户尝试读取导出文件,而该文件是没人能读取的用户,则访问将失败。 您可以通过添加no_root_squash选项来禁用该安全保护。 (nobody用户对大多数系统资源只有读或无权限操作)

    以下示例允许client.bq.cloud系统具有对/shares/nfs导出目录的读/写访问权限和实际root用户访问权限。

    /shares/nfs client.bq.cloud(rw,no_root_squash)
    

我们使用以下记录:

[root@server ~]# vim /etc/exports
/shares/nfs 10.1.8.0/24(rw)

每当您在/etc/exports或/etc/exports.d/*.exports中更改导出点时,请对NFS服务运行exportfs -r命令确保更改生效,或者运行systemctl reload nfs-server

[root@server ~]# exportfs -r
# 或者
[root@server ~]# systemctl reload nfs-server
# 或者
[root@server ~]# exportfs -av

每当您在/etc/exports或/etc/exports.d/*.exports中更改导出点时,请对NFS服务运行exportfs -r命令确保更改生效,或者运行systemctl reload nfs-server

[root@server ~]# exportfs -r
# 或者
[root@server ~]# systemctl reload nfs-server
# 或者
[root@server ~]# exportfs -av

监视 NFS 导出

使用exportfs命令列出NFS服务器当前导出的目录。

[root@server ~]# exportfs
/shares/nfs 10.1.8.0/24

默认情况下,该命令不显示导出选项。 使用-v选项列出这些选项,包括缺省选项。

[root@server ~]# exportfs -v
/shares/nfs 10.1.8.0/24(sync,...,rw,secure,no_root_squash,...)

客户端挂载

# 安装软件包
[root@client ~]# yum install -y nfs-utils
# 准备用户
[root@client ~]# useradd -u 1000 bq
[root@client ~]# echo redhat | passwd --stdin bq# 查看服务端提供的共享
[root@client ~]# showmount -e server
Export list for server:
/shares/nfs 10.1.8.0/24# 挂载
[root@client ~]# mkdir /mnt/nfs
[root@client ~]# mount -t nfs server:/shares/nfs /mnt/nfs# root用户不能创建
[root@client ~]# touch /mnt/nfs/root-f1
touch: cannot touch ‘/mnt/nfs/root-f1’: Permission denied# bq用户能创建
[bq@client ~]$ touch /mnt/nfs/bq-f1

持久化挂载

修改 /etc/fstab,最后添加如下记录:

server:/shares/nfs /mnt/nfs nfs defaults 0 0

如涉及版权问题,请联系作者处理!!!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

站在Vue的角度,对比鸿蒙开发中的数据渲染二

第二类数字&#xff08;Number&#xff09;的操作 2.1普通数字的显示 vue中直接显示 <template> <div><h3>学习Vue</h3><div>{{ num }}</div> </div></template><script lang"ts" setup>import {ref} fr…

Python自动化测试实战:reCAPTCHA V3绕过技术深度解析

Python自动化测试实战&#xff1a;reCAPTCHA V3绕过技术深度解析 摘要 reCAPTCHA V3作为Google推出的无感验证码系统&#xff0c;通过先进的机器学习算法分析用户行为模式&#xff0c;已成为当前最主流的反机器人解决方案。本文将深入解析其核心检测机制&#xff0c;并提供完…

简单Modules 的配置与管理,灵活应对多版本软件环境的需求。

参考文档 官方手册&#xff1a;https://modules.readthedocs.io Modulefile 语法&#xff1a;modulefile — Modules documentation Environment Modules 工具 Environment Modules 是一个环境管理工具&#xff0c;用于动态加载、卸载和管理不同版本的软件环境变量&#xff…

java内部类-匿名内部类

匿名内部类必须有一个已经存在的类或者接口

上篇:《排序算法的奇妙世界:如何让数据井然有序?》

个人主页&#xff1a;strive-debug 排序算法精讲&#xff1a;从理论到实践 一、排序概念及应用 1.1 基本概念 **排序**&#xff1a;将一组记录按照特定关键字&#xff08;如数值大小&#xff09;进行递增或递减排列的操作。 1.2 常见排序算法分类 - **简单低效型**&#xff…

2025.8.6 图论(1)Solution

2025.8.6 图论&#xff08;1&#xff09;Solution 割点 学习资料&#xff0c;在 csdn 或洛谷上看都行。是模板题题解&#xff08;之一&#xff09;。 T1&#xff1a;Atserckcn与逃离恐怖老师。 题意简述&#xff1a;从一个图中选定一个点&#xff0c;使得删除这个点后图不连…

OpenBayes 教程上新丨一键部署 gpt-oss-20b,实测开源推理模型新 SOTA,性能直逼 o3‑mini

时隔 6 年&#xff0c;自 GPT-2 以来&#xff0c;OpenAI 终于再度发布开源大模型——gpt-oss-120b 和 gpt-oss-20b&#xff0c;前者以千亿级参数专为复杂推理与知识密集型场景设计&#xff0c;后者则更适合低延迟、本地或专业垂直领域使用&#xff0c;可在消费级硬件&#xff0…

nlp-句法分析

目录 一、句法概述 1、成分语法理论概述 &#xff08;1&#xff09;分析过程 &#xff08;2&#xff09;缺点 2、依存语法理论概述 &#xff08;1&#xff09;依存关系、配价模式 &#xff08;2&#xff09;分类 &#xff08;3&#xff09;优势&#xf…

linux磁盘加密

在Linux中&#xff0c;磁盘加密是一种保护数据不被未授权访问的方法。有多种工具和策略可以实现磁盘加密&#xff0c;包括使用Linux内核的内置功能&#xff0c;如dm-crypt&#xff0c;以及使用更高级的解决方案&#xff0c;如LUKS&#xff08;Linux Unified Key Setup&#xff…

大数据架构演变之路

目录 一、各阶段的架构简介 二、各个架构的详细解释 1. 传统离线架构 2.1. Lambda架构-离线数仓分析实时链路分析 2.2. Lambda架构-离线数仓实时数仓 3. Kappa/流批一体架构 4. 湖仓一体架构 三、总结 一、各阶段的架构简介 技术架构 核心驱动(核心需求) ‌关键技术 …

STM32 HAL库驱动0.96寸OLED屏幕

STM32 HAL库驱动0.96寸OLED屏幕 项目概述 本项目使用STM32 HAL库为0.96寸OLED屏幕编写驱动程序。OLED屏幕通过I2C接口与STM32单片机通信&#xff0c;实现文本、数字和图形的显示功能。 项目仓库地址&#xff1a;STM32_Sensor_Drives 硬件连接 OLED屏幕通过I2C接口与STM32连…

横向越权:修改参数访问不属于自己的数据

一、什么是横向越权定义 横向越权&#xff08;Horizontal Privilege Escalation&#xff09;是指 同一权限级别的用户&#xff0c;通过篡改请求参数或资源标识&#xff0c;访问本不属于自己的数据或功能。例子 假设一个在线商城&#xff0c;用户 A 访问订单详情的 URL&#xff…

攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)

实验一 ARP欺骗一、拓扑二、实验准备、1.设置终端漏洞靶机集合选择需要的数量和镜像打开设备上的驱动精灵安装网卡安装成功后查看IP地址、网关信息等。三、实验步骤1.实验原理中间人&#xff08;攻击者&#xff09;在终端与网关之间持续发送伪造的 ARP 应答包&#xff0c;双向欺…

VSCode 禁用更新检查的方法

通过设置菜单禁用 这是最直接和推荐的方法&#xff0c;可以永久禁用自动更新&#xff1a; 打开 VSCode。点击左下角的齿轮图标&#xff0c;然后选择“设置”。或者通过菜单栏“文件” > “首选项” > “设置”进入。在顶部的搜索框中输入“update”。找到“Update: Mode”…

Flutter - 应用启动/路由管理

一、应用入口1. 初始化 Flutter 底层绑定 &#xff0c;运行 App。import package:flutter/material.dart; import package:flutter_base/Application.dart;void main() {// 确保绑定初始化WidgetsFlutterBinding.ensureInitialized();// App初始化Application.init(); }2. 注册…

MySQL 数据操作全流程:创建、读取、更新与删除实战

MySQL系列 文章目录MySQL系列前言一、Create(创建)并插入数据1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入冲突时同步更新1.4 冲突时替换二、Retireve读取数据2.1 全列查询2.2 查询指定列2.3 查询字段为表达式2.4 结果去重 DISTINCT2.5 where条件筛选2.6 order by语…

SQL约束:数据完整性的守护者

在SQL中&#xff0c;约束&#xff08;Constraints&#xff09; 是作用于数据库表字段上的规则&#xff0c;用于强制保证数据的完整性、准确性和一致性。当插入、更新或删除数据时&#xff0c;约束会自动验证操作是否符合规则&#xff0c;若违反则拒绝执行。 以下是SQL中常见的约…

Springboot-vue 地图展现

在很多社区管理系统中&#xff0c;地图展示功能是一个重要的模块&#xff0c;它能直观地呈现小区的地理位置分布。本文将详细梳理从前端触发请求到地图上展示小区数据的完整流程&#xff0c;帮助大家理解前后端协同工作的具体细节。一、前端触发&#xff1a;页面加载与地图初始…

Vue 3 登录组件

Login.vue 组件详细分析整体架构 Vue 3 登录组件&#xff0c;采用 Composition API Element Plus UI 库&#xff0c;实现了完整的用户认证界面。 模板结构分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小结: getSpringFactoriesInstances从 `spring.factories` 文件中加载和实例化指定类型的类

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一个核心方法&#xff0c;用于从 spring.factories 文件中加载和实例化指定类型的类。这是 Spring Boot 实现自动配置和插件化扩展的关键机制。 1. 基本功能 该方法的主要作用是…