如何在 Ubuntu 16.04 上设置 NFS 挂载

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

NFS(Network File System)是一种分布式文件系统协议,允许您在服务器上挂载远程目录。这使您可以在不同位置管理存储空间并从多个客户端向该空间写入。NFS提供了一种相对快速和简单的方式来通过网络访问远程系统,并在共享资源将经常访问的情况下运行良好。

在本指南中,我们将介绍如何配置NFS挂载。

先决条件

在本教程中,我们将使用两台服务器:一台将其文件系统的一部分与另一台共享。要跟随操作,您需要:

  • 两台安装了Ubuntu 16.04的服务器,每台都有一个具有sudo特权的非root用户,并启用了私有网络。

    • 如需帮助设置具有这些特权的用户,请参阅我们的《在Ubuntu 16.04上进行初始服务器设置》指南。

    • 如需帮助设置私有网络,请参阅《如何设置和使用DigitalOcean私有网络》。

在整个教程中,我们将把共享其目录的服务器称为主机,将挂载这些目录的服务器称为客户端。为了区分它们,我们将使用以下IP地址作为主机和客户端值的替代品:

  • 主机:203.0.113.0
  • 客户端:203.0.113.256

您应该用您自己的主机和客户端IP地址替换这些值。

步骤1 — 下载和安装组件

我们将从在每台服务器上安装必要的组件开始。

在主机上

在主机服务器上,我们将安装nfs-kernel-server软件包,这将允许我们共享我们的目录。由于这是我们在本次会话中使用apt执行的第一个操作,我们将在安装之前刷新本地软件包索引:

sudo apt-get update
sudo apt-get install nfs-kernel-server

安装这些软件包后,切换到客户端服务器。

在客户端上

在客户端服务器上,我们需要安装一个名为nfs-common的软件包,它提供了NFS功能,而不包括不需要的服务器组件。同样,我们将在安装之前刷新本地软件包索引,以确保我们有最新的信息:

sudo apt-get update
sudo apt-get install nfs-common

现在,两台服务器都安装了必要的软件包,我们可以开始配置它们。

步骤2 — 在主机上创建共享目录

我们将共享两个不同配置设置的分开目录,以说明NFS挂载可以配置为具有超级用户访问权限的两种关键方式。

超级用户可以在其系统上做任何事情。但是,NFS挂载的目录不是其所挂载的系统的一部分,因此,默认情况下,NFS服务器拒绝执行需要超级用户特权的操作。这个默认限制意味着客户端上的超级用户不能以root身份写入文件,重新分配所有权,或在NFS挂载上执行任何其他超级用户任务。

然而,有时客户端系统上有受信任的用户需要能够在挂载的文件系统上执行这些操作,但在主机上不需要超级用户访问权限。NFS服务器可以配置为允许这样做,尽管这会引入一定的风险,因为这样的用户_可能_获得对整个主机系统的root访问权限。

示例1:导出通用目录挂载

在第一个示例中,我们将创建一个通用目录NFS挂载,使用默认的NFS行为使得客户端机器上具有root特权的用户难以使用这些客户端超级用户特权与主机进行交互。您可能会使用类似的东西来存储使用内容管理系统上传的文件,或者为用户轻松共享项目文件创建空间。

首先,创建一个名为nfs的共享目录:

sudo mkdir /var/nfs/general -p

由于我们是使用sudo创建的,所以这个目录在主机上是由root拥有的。

ls -la /var/nfs/general
4 drwxr-xr-x  2 root   root    4096 Jul 25 15:26 .

NFS将客户端上的任何root操作转换为nobody:nogroup凭据作为安全措施。因此,我们需要更改目录所有权以匹配这些凭据。

sudo chown nobody:nogroup /var/nfs/general

这个目录现在已经准备好导出。

示例2:导出主目录

在我们的第二个示例中,目标是使存储在主机上的用户主目录在客户端服务器上可用,同时允许这些客户端服务器的受信任管理员方便地管理用户。

为此,我们将导出/home目录。由于它已经存在,我们不需要创建它。我们也不会更改权限。如果我们_这样做了,它将会给在主机机器上有主目录的任何人带来各种问题。

步骤 3 — 在主机服务器上配置 NFS 导出

接下来,我们将深入研究 NFS 配置文件,以设置这些资源的共享。

使用 root 权限在文本编辑器中打开 /etc/exports 文件:

sudo nano /etc/exports

该文件中有注释显示每个配置行的一般结构。语法基本上是:


directory_to_share    client(share_option1,...,share_optionN)

我们需要为我们计划共享的每个目录创建一行。由于我们示例客户端的 IP 是 203.0.113.256,我们的行将如下所示。请确保更改 IP 以匹配您的客户端:


/var/nfs/general    203.0.113.256(rw,sync,no_subtree_check)
/home       203.0.113.256(rw,sync,no_root_squash,no_subtree_check)

我们对两个目录使用相同的配置选项,除了 no_root_squash。让我们看看每个选项的含义。

  • rw:此选项为客户端计算机提供对卷的读写访问权限。
  • sync:此选项强制 NFS 在回复之前将更改写入磁盘。这会导致更稳定和一致的环境,因为回复反映了远程卷的实际状态。但是,它也会降低文件操作的速度。
  • no_subtree_check:此选项防止子树检查,这是一个过程,其中主机必须检查文件对于每个请求是否仍然在导出的树中可用。当客户端打开文件时重命名文件可能会导致许多问题。在几乎所有情况下,最好禁用子树检查。
  • no_root_squash:默认情况下,NFS 将远程 root 用户的请求转换为服务器上的非特权用户。这是一种安全功能,旨在防止客户端的 root 帐户将主机的文件系统用作 root。no_root_squash 为某些共享禁用了此行为。

完成更改后,请保存并关闭文件。然后,为了使您配置的客户端可用的共享,使用以下命令重新启动 NFS 服务器:

sudo systemctl restart nfs-kernel-server

然而,在实际使用新共享之前,您需要确保防火墙规则允许对共享的流量。

步骤 4 — 调整主机上的防火墙

首先,让我们检查防火墙状态,看看它是否已启用,如果已启用,看看当前允许了什么:

sudo ufw status

状态:activeTo                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

在我们的系统上,只允许 SSH 流量,因此我们需要为 NFS 流量添加规则。

对于许多应用程序,您可以使用 sudo ufw app list 按名称启用它们,但 nfs 不是其中之一。因为 ufw 还会检查 /etc/services 中的服务的端口和协议,所以我们仍然可以按名称添加 NFS。最佳做法建议您启用最严格的规则,以仍然允许您希望允许的流量,因此我们将具体说明,而不是从任何地方启用流量。

使用以下命令在主机上打开端口 2049,确保替换为您的客户端 IP 地址:

sudo ufw allow from 203.0.113.256 to any port nfs

您可以通过输入以下命令来验证更改:

sudo ufw status

您应该在输出中看到允许从端口 2049 的流量:


状态:activeTo                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                 
2049                       ALLOW       203.0.113.256        
OpenSSH (v6)               ALLOW       Anywhere (v6)

这证实了 UFW 仅允许来自我们客户端机器的端口 2049 的 NFS 流量。

步骤 5 — 在客户端上创建挂载点

现在主机服务器已配置并提供其共享,我们将准备我们的客户端。

为了使远程共享在客户端上可用,我们需要将主机目录挂载到空的客户端目录上。

我们将为我们的挂载创建两个目录:

sudo mkdir -p /nfs/general
sudo mkdir -p /nfs/home

步骤 6 — 在客户端挂载目录

现在我们已经有了放置远程共享的位置,并且已经打开了防火墙,我们可以通过指定我们的主机服务器(在本指南中为 203.0.113.0)来挂载共享,就像这样:

sudo mount 203.0.113.0:/var/nfs/general /nfs/general
sudo mount 203.0.113.0:/home /nfs/home

这些命令应该会将主机计算机上的共享挂载到客户端机器上。您可以通过几种方式来验证它们是否成功挂载。您可以使用简单的 mountfindmnt 命令进行检查,但 df -h 命令将为您提供更易读的输出,展示了不同的 nfs 共享的磁盘使用情况:

  df -h
文件系统                容量  已用  可用 已用% 挂载点
udev                      238M     0  238M   0% /dev
tmpfs                      49M  628K   49M   2% /run
/dev/vda1                  20G  1.2G   18G   7% /
tmpfs                     245M     0  245M   0% /dev/shm
tmpfs                     5.0M     0  5.0M   0% /run/lock
tmpfs                     245M     0  245M   0% /sys/fs/cgroup
tmpfs                      49M     0   49M   0% /run/user/0
203.0.113.0:/home      20G  1.2G   18G   7% /nfs/home
203.0.113.0:/var/nfs/general   20G  1.2G   18G   7% /nfs/general

我们挂载的两个共享出现在底部。因为它们是从同一文件系统挂载的,它们显示相同的磁盘使用情况。要查看每个挂载点实际使用了多少空间,可以使用磁盘使用情况命令 du 和挂载点的路径。-s 标志将提供使用情况的摘要,而不是显示每个文件的使用情况。-h 将打印易读的输出。

例如:

du -sh /nfs/home
36K	/nfs/home

这向我们展示了整个家目录的内容仅使用了可用空间的 20K。

步骤 7 — 测试 NFS 访问

接下来,让我们通过向每个共享写入一些内容来测试对共享的访问。

示例 1:通用目录共享

首先,向 /var/nfs/general 共享写入一个测试文件。

sudo touch /nfs/general/general.test

然后,检查它的所有者:

ls -l /nfs/general/general.test
-rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test

因为我们在未更改 NFS 默认行为的情况下挂载了此卷,并且通过 sudo 命令以客户端机器的 root 用户创建了文件,文件的所有权默认为 nobody:nogroup。客户端超级用户将无法执行典型的管理操作,比如更改文件的所有者或为用户组创建新目录,这是因为这个 NFS 挂载的共享。

示例 2:家目录共享

为了比较通用目录共享和家目录共享的权限,以相同的方式在家目录创建一个文件:

sudo touch /nfs/home/home.test

然后查看文件的所有权:

ls -l /nfs/home/home.test
-rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test

我们通过 sudo 命令以 root 用户创建了 home.test,与我们创建 general.test 文件的方式完全相同。然而,在这种情况下,它由 root 拥有,因为我们在此挂载上指定了 no_root_squash 选项,这允许我们在客户端机器上的 root 用户作为 root,并且使用户账户的管理更加方便。同时,这意味着我们不必在主机上为这些用户提供 root 访问权限。

步骤 8 — 在启动时挂载远程 NFS 目录

我们可以通过将它们添加到客户端的 /etc/fstab 文件中,在启动时自动挂载远程 NFS 共享。

使用 root 权限在文本编辑器中打开此文件:

sudo nano /etc/fstab

在文件底部,我们将为我们的每个共享添加一行。它们看起来像这样:

. . .
203.0.113.0:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home       /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

客户端服务器将在启动时自动挂载远程分区,尽管可能需要一些时间才能建立连接并使共享可用。

步骤 9 — 卸载 NFS 远程共享

如果你不再希望远程目录在你的系统上挂载,你可以通过移出共享目录结构并卸载来取消挂载,就像这样:

cd ~
sudo umount /nfs/home
sudo umount /nfs/general

这将移除远程共享,只留下本地存储可访问:

df -h
文件系统      容量 已用 可用 已用% 挂载点
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  320K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user

如果你还希望防止它们在下次启动时重新挂载,编辑 /etc/fstab 文件,删除该行或在行首加上 # 符号进行注释。你也可以通过移除 auto 选项来防止自动挂载,这将允许你手动挂载它。

结论

在本教程中,我们创建了一个 NFS 主机,并通过创建两个不同的 NFS 挂载来说明了一些关键的 NFS 行为,然后与我们的 NFS 客户端共享了这些挂载。如果你打算在生产环境中实施 NFS,重要的是要注意该协议本身并不加密。在共享的文件旨在公开访问时,这并不会造成严重问题。

然而,如果你要使用 NFS 共享私人数据,你需要决定如何保护这些数据。你可能可以通过 SSH 或 VPN 连接路由 NFS 来创建更安全的体验,但这通常会导致严重的性能损失。如果性能是一个问题,考虑使用 SSHFS。它比未加密的 NFS 流量稍慢,但通常比隧道化的 NFS 快得多。Kerberos 认证加密用于 NFS 是另一个值得探索的选项。

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

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

相关文章

HarmonyOS Next 实战卡片开发 02

HarmonyOS Next 实战卡片开发 02 卡片开发中,还有一个难点是显示图片。其中分为显示本地图片和显示网络图片 显示本地图片 卡片可以显示本地图片,如存放在应用临时目录下的图片。路径比如 /data/app/el2/100/base/你的项目boundleName/temp/123.png 以…

双十一云服务器抢购后,用SD-WAN连通多云网络

双十一个个云厂商都有一定的优惠,我在阿里云和腾讯云都购买了服务器,原本主要是使用的阿里云,一堆乱七八糟的东西都是部署在阿里云的,现在买了一台腾讯云之后就在思考一个问题,怎么在腾讯云使用阿里云原本部署的服务。…

从0开始学docker (每日更新 24-11-7)

docker网络基础 docker容器网络模型 容器网络项目libnetwork:docker网络架构基于一套称为容器网络模型(CNM)的接口 CNM高层架构 包括: 沙箱(Sandbox):又称沙盒,包含容器的网络栈…

Linux学习笔记之组管理和权限管理

组管理 文件/目录 所有者 一般文件所有者是文件的创建者,谁创建了该文件,就自然成为该文件的所有者 ls -ahl (查看文件的所有者) chown 用户名 文件名 (修改文件所有者) 文件/目录 所在组 当某个用户…

MySQL 中的索引下推功能

看到索引,应该大家都可以联想到这个是和查询效率有关系的,既然有这个功能,那么那句古话说的好啊:存在即合理。那么这个就是说有了这个功能,可以提升查询效率。 什么是索引下推 我们先有一个大概的理解:在…

CSP/信奥赛C++语法基础刷题训练(1):洛谷P5715 :三位数排序

CSP/信奥赛C语法基础刷题训练(1):洛谷P5715 :三位数排序 题目描述 给出三个整数 a , b , c ( 0 ≤ a , b , c ≤ 100 ) a,b,c(0\le a,b,c \le 100) a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。 输入格式 …

准确--FastDFS快速单节点部署

FastDFS单节点部署 1. 系统准备 # 查看操作系统信息(适用于麒麟V10) cat /etc/os-release# 安装必要的软件包 yum -y install gcc gcc-c perl zlib-devel unzip2. 准备 FastDFS 环境 cd /usr/local/fastdfs# 下载必要包(若有访问限制&…

国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?

EasyCVR视频融合云平台,是TSINGSEE青犀视频“云边端”架构体系中的“云平台”系列之一,是一款针对大中型项目设计的跨区域、网络化、视频监控综合管理系统平台,通过接入视频监控设备及视频平台,实现视频数据的集中汇聚、融合管理、…

【智谱开放平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…

【C++】详细介绍模版进阶,细节满满

目录 一、非类型模版参数: 1、介绍: 2、使用: 3、注意: 4、应用 二、模版特化 (一)、概念 (二)、函数模版特化 1、步骤: 2、举例: 3、不建议使用函…

动态规划---解决多段图问题

ok 小伙伴们,我现在有点小小的红温,有点毛躁。 怎么解决多段图问题呢?求取最短路径有多种方法可取。 家人们,毫无思绪可言……………………………… 要实现动态规划,条件:子问题重叠度较高,并…

JMeter基础篇

目录 总目录: 一、JMeter简介: -用途: -优缺点: 二、JMeter安装: 三、项目简介: -学生管理系统: -API接口清单: 查询: 新增: 更新: 删…

Elasticsearch中什么是倒排索引?

倒排索引(Inverted Index)是一种索引数据结构,它在信息检索系统中被广泛使用,特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容(如文本)与其存储位置之间的映射&…

【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)

这是我的第374篇原创文章。 一、引言 SHAP有多种实现方式,每种方式都适用于特定的模型类型,可以实现更快的逼近。 TreeExplainer :TreeExplainer专为树集合方法开发,如XGBoost,LightGBM或CatBoost。 DeepExplainer :DeepExplain…

C++数据结构算法学习

C ,orient(面向) object , object entity(实体) Visible(可见的) or invisible(不可见) 变量用来保存数据 objects attribute(属性) services(服务) C STL 容器 vector, list() vector底层是数组,类似双向链表和list底层 map/s…

ELK-Logstash配置

文章目录 一、什么是Logstash、有什么用?什么是 Logstash?Logstash 的主要特点:Logstash 的用途: 二、Logstash的安装与基本配置事先要安装Java的环境?Logstash 安装Debian/UbuntuRed Hat/CentOSmacOS(使用…

R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP

R小盐准备介绍R语言机器学习与预测模型的学习笔记, 快来收藏关注【科研私家菜】 01 机器学习的可解释性 对于集成学习方法,效果虽好,但一直无法解决可解释性的问题。我们知道一个xgboost或lightgbm模型,是由N棵树组成,…

Vue自定义指令详解——以若依框架中封装指令为例分析

自定义指令 在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释: 一、自定义指令的基本概念 自定义指令允许开发者直接对DOM元素进行低层次操作,而无需编写大量的模板或者JavaScript代码。…

sql server启用远程连接与修改默认端口

一,数据库右键属性 二,sa账号状态属性启用 三,SQL Server配置管理器, 点击SQL Server 服务选项,确定SQL Server是正在运行的。 四,手动修改数据库的连接端口 1)确保启用 2)修改默认端口 3)客户端IP改为一…