代码编织梦想

环境介绍

nfs server 优麒麟 OS作为NFS服务器:

6cd70f3da84199c391e7df0d2779b612.png

nfs client, ubuntu 22.04 作为NFS 客户端:

7d7016710325e7edc5e775f381d45b41.png

网络拓扑结构,网关1安装在客厅,为了加强卧室信号,用一台小米路由器作为信号中继,拓扑结构如下:

400686dc832193feac69ea61e10d53ff.png

NFS Server路由信息,可见前两跳分别是两个网关

314779755e0ed9d55b55500a96e6f85a.png

NFS Client信息:

04dbfdb976e161a891f43bcf76ed6213.png

安装环境:

NFS Server端

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

NFS Client端

sudo apt install nfs-common

内核配置:

如果使用自编译的内核,需要打开如下配置项:

Networking support ---> Networking options --->TCP/IP networking ---> IP: kernel level autoconfiguration
File systems ---> Network File Systems 
Networking support ---> Networking options --->TCP/IP networking
File systems ---> Networking File Systems ---> NFS client support(子级都选上)
File systems ---> Networking File Systems ---> Root file system on NFS
e2b9922635641e86bb03cc27a1171754.png
0ad0231c8311b13376edd937dc235a7f.png

服务器配置

默认情况下,nfs 服务器上定义了某个共享目录,则该目录及其子目录下的所有文件都可被访问。

出于对安全的考虑,客户端任何需要 超级用户 (即 root 用户,uid=0 & gid=0)权限的文件操作都默认映射到 uid=65534 和 gid=65534 的用户,即 ubuntu 系统中的 nobody:nogroup。

例如客户端使用 root 权限在挂载的共享目录中创建文件时,该文件的 属主属组 自动变为 nobody:nogroup ,而非 root:root

1. 在服务器端创建共享目录

sudo mkdir -p /var/nfs/gernel 
sudo mkdir -p /var/nfs/public 
sudo chown nobody:nogroup /var/nfs/gernel

2. 修改 exports 文件

为了使 nfs 服务器定义的共享文件可被指定的客户端主机访问,需要在服务器端的 /etc/exports 文件中添加对应的记录。

/var/nfs/gernel *(rw,insecure,sync,no_subtree_check)
/var/nfs/public *(ro,insecure,sync,no_subtree_check)
d31a1d644268e8fa58fba0b6cf4b1332.png

第一条纪录表示 子网 中的所有主机都可挂载 var/nfs/gernel 目录并拥有读写( rw )权限

第二条纪录表示 所有 主机都可挂载 /var/nfs/public 目录且拥有 只读ro )权限

insecure选项:允许通过任意端口的远程访问

sync选项:强制 nfs 服务器在响应请求之前将文件的改动写入磁盘(强调客户端和服务端文件内容的一致性,但会降低文件操作的效率)。

no_subtree_check选项:禁用 subtree_check 。subtree_check 用来设置服务器在收到请求时,检查该文件是否在指定目录结构中依旧可用(该选项会在某些情况下发生错误:重命名某文件的同时,该文件在客户端打开)。

启动NFS 服务

sudo systemctl stop nfs-kernel-server
sudo systemctl start nfs-kernel-server
sudo systemctl restart nfs-kernel-server

至此,服务器端配置完毕,接下来在客户端操作。

客户端查看服务端目录共享情况

客户端安装nfs-common工具后,可以通过showmount命令查看NFS Server端的共享目录,如下图所示:

sudo showmount -e 192.168.31.156
3f287ab31ca80823a75d58c2fcd0b496.png

挂载

在客户端执行如下命令进行挂载:

sudo mount -t nfs 192.168.31.156:/var/nfs/gernel /mnt
d8eca5b0dfaf5675f18f969daf5c9845.png

nfs 的权限设定基于 linux 文件系统的权限管理,即客户端挂载远程共享目录后,会把它们当成本地磁盘目录一样对待,也是根据文件的属主(组)及其对应的权限设定来限制访问。

gernel 目录的属主(组)为 nobody:nogroup(65534:65534),所以虽然该目录为读写权限,非 root 用户无法执行新建操作。而 root 用户由于 nfs 默认的安全机制,会自动映射到 nobody:nogroup。

7ae384c01a75d9bf1322b4718668fa37.png

NFS Client端切换到ROOT对文件进行写入

55cdc717bc76b501b93e3ceb600027e9.png

NFS Server端看到了内容更新:

0209d19a76ff619d8093f571de61211f.png

参考资料

https://www.bbsmax.com/A/o75N9xgDJW/

https://blog.csdn.net/yaoxinli/article/details/127613184

https://blog.csdn.net/ichen820/article/details/120365341

结束

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tugouxp/article/details/129631285

homebrew 安装 kettle 过程中报错 for mac_garyzhang000的博客-爱代码爱编程

报错信息如下 zhangzhandeMacBook-Pro:Homebrew zhangzhan$ brew install kettle ==> Downloading https://downloads.sour

homebrew的安装教程(for mac)_lucky多多的博客-爱代码爱编程

mac OS 安装Homebrew 1、用百度搜索“Homebrew”,打开Homebrew官网 2、进入官网后,复制首页的代码到终端执行 /usr/bin/ruby -e “$(curl -fsSL htt

Mac Homebrew 安装与卸载-爱代码爱编程

Homebrew 是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。 一、Homebrew 安装与卸载 安装 $ /bin/bash -c "$(curl -fsSL https://raw.githubusercont

Mac下homebrew安装-爱代码爱编程

需要替换国内镜像 /usr/bin/ruby -e "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install)" 该脚本用了中科大镜像加速访问,仅修改仓库地址部分,不会产生安全隐患。 关于中科大所提供的 Homebrew 镜像服务 https://lug.us