当前位置: 首页 > news >正文

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服务端共享信息(共享哪些目录)

永久挂载

  1. /etc/fstab
cat /etc/fstab
设备                 挂载点     文件系统类型   挂载参数   是否检查 是否备份
10.0.0.124:/data/   /upload/     nfs        defaults   0       0
  1. /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 带有特殊属性的文件。
http://www.lryc.cn/news/351263.html

相关文章:

  • 影响Oracle数据库打开速度的因素
  • dify:开源 LLMOps平台。
  • CCF20220601——归一化处理
  • 用Ai编写一个电机驱动程序
  • 【C++入门】—— C++入门 (下)_内联函数
  • Java数据结构与算法(最小栈)
  • 7 Series FPGAs Integrated Block for PCI Express IP核 Advanced模式配置详解(三)
  • k8s 部署mqtt简介
  • 汇凯金业:量化交易中常用的数学模型有哪些
  • 局部直方图均衡化去雾算法
  • selenium环境安装和web自动化基础
  • 【UE Websocket】“WebSocket Server”插件使用记录
  • spring中依赖注入(DI)是什么?
  • paligemma、Grounding-DINO-1.5简单无需标注无需训练直接可以使用的VLM图像到文本模型
  • FreeRTOS学习——FreeRTOS队列(下)之队列创建
  • js实现鼠标拖拽多选功能
  • postgres_exporter 监控pg坑一:备库无延迟但是监控告警备库延迟
  • vue打包部署到springboot,通过tomcat运行
  • 如何有效防止数据丢失
  • linux命令中arj使用
  • UE5中搭建一个简单的海岛
  • 爬虫学习--12.MySQL数据库的基本操作(下)
  • js的算法-选择排序(简单选择排序)
  • Mac虚拟机工具 CrossOver 24.0.0 Beta3 Mac中文版
  • 路由聚合和VRRP技术
  • 【原创教程】三菱FX3U系列培训专题课教案
  • 清空了电脑回收站,之前的文件还能否恢复?
  • 设计模式——职责链(责任链)模式
  • 功耗相关总结
  • 17款奔驰GLS450升级头等舱行政独立四座马鞍是什么样体验