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

NFS(网络文件共享)

文章目录

    • 一、NFS简介
    • 二、工作原理
      • 正确工作流程
    • 三、NFS的使用
      • 1.安装
      • 2.配置文件
        • 分析
    • 实验1:共享文件
      • 服务端配置
      • 客户端配置
    • 实验2:修改权限
    • 实验三:账户映射

一、NFS简介

  • NFS允许网络中你的计算机之间通过tcp/ip网络共享资源

  • NFS服务器可以让pc将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地的系统中看来,远程主机的目录将想是自己的一个磁盘分区一样

  • 由于NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口并不固定,而是随机取用一些未被使用的小于1024的端口用于传输。但如此一来就会产生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口才能够连接。此时就需要RPC

  • RPC(Remote Procedure Call,远程过程调用):由于服务器在启动NFS时会随机选取数个端口号,并主动向RPC注册,所以RPC知道每个NFS功能所对应的端口号,RPC将端口号通知给客户端,让客户端可以连接到正确的端口上去。RPC采用固定端口号port 111来监听客户端的需求并向客户端响应正确的端口号。

  • 在启动NFS之前,要先启动RPC,否则NFS会无法向RPC注册。另外,RPC若重新启动,原来注册的数据会消失不见,因此RPC重启后,它管理的所有服务都需要重新启动以重新向RPC注册。

二、工作原理

在这里插入图片描述
原理类似于一租客要去租房,但不知道哪里有房可以租,于是就去找中介,中介提供房源(房东早就在中介哪里登记了房子信息),租客就去找房主商量

房东就像NFS服务器,向中介RPC注册启动端口,当客户端请求NFS服务时,就去找RPC,RPC中返回端口号给客户端,然后客户端拿着地址端口请求传输。

正确工作流程

  • 首先服务器端启动RPC服务,并开启111端口

  • 服务器端启动NFS服务,并向RPC注册端口信息

  • 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

  • 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。(服务器搭建成功后可以使用下列命令查看,一般都是2049)

查看NFS的信息

[root@server ~]# cat  /etc/services | grep  nfs nfs             2049/tcp        nfsd shilp      # Network File System
nfs             2049/udp        nfsd shilp      # Network File System
nfs             2049/sctp       nfsd shilp      # Network File System
netconfsoaphttp 832/tcp                 # NETCONF for SOAP over HTTPS
netconfsoaphttp 832/udp                 # NETCONF for SOAP over HTTPS
netconfsoapbeep 833/tcp                 # NETCONF for SOAP over BEEP
netconfsoapbeep 833/udp                 # NETCONF for SOAP over BEEP
nfsd-keepalive  1110/udp                # Client status info
picknfs         1598/tcp                # picknfs
picknfs         1598/udp                # picknfs
shiva_confsrvr  1651/tcp   shiva-confsrvr   # shiva_confsrvr
shiva_confsrvr  1651/udp   shiva-confsrvr   # shiva_confsrvr
3d-nfsd         2323/tcp                # 3d-nfsd
3d-nfsd         2323/udp                # 3d-nfsd
mediacntrlnfsd  2363/tcp                # Media Central NFSD
mediacntrlnfsd  2363/udp                # Media Central NFSD
winfs           5009/tcp                # Microsoft Windows Filesystem
winfs           5009/udp                # Microsoft Windows Filesystem
enfs            5233/tcp                # Etinnae Network File Service
nfsrdma         20049/tcp               # Network File System (NFS) over RDMA
nfsrdma         20049/udp               # Network File System (NFS) over RDMA
nfsrdma         20049/sctp              # Network File System (NFS) over RDMA
[root@server ~]# 

三、NFS的使用

1.安装

[root@server ~]# yum  install  nfs-utils  -y  [root@server ~]# yum  install  rpcbind  -y   # 默认已安装
#在v4版本中,安装nfs-utils软件包时也安装了rpcbind

2.配置文件

  • 主配置文件:/etc/exports , 文件不一定存在
  • /usr/sbin/exportfs : 该文件是维护NFS共享目录资源的命令文件,可以使用命令重新共享/etc/exports的目录资源、卸载共享目录
  • 日志目录:/var/lib/nfs
  • 权限设置文件:/var/lib/nfs/etab
分析
  • /etc/exports文件默认为空文件,需要输入nfs共享命令
  • 格式为:共享文件路径 允许访问的客户端的IP地址 (共享权限)
  • 允许访问的客户端可以写完整的IP地址或者网段*表示所有主机都可以访问
  • 权限参数必须写在括号里,且括号要挨着主机名,多个参数之间要用逗号隔开
权限参数作用
ro只读
rw读写(最终还是看rwx权限)
root_squash当客户端以root账户访问时,映射为服务端的匿名账户nobody
no_root_squash当客户端以root账户访问时,映射为root账户(不安全,不推荐)
all_squash无论客户端使用你什么账户访问,均映射为服务器的匿名账户nobody
no_all_squash客户端普通账户访问服务器的数据时,实际的信息原样显示
anonuid= anongid=将文件的用户和工作组映射为指定UID和GID,若不指定则默认为65534(nobody)
sync同时将数据写入内存与硬盘中,保证数据不会丢失
async优先将数据保存到内存,然后在写入硬盘,效率高,但可能会数据丢失

示例:

  • /home/public *(rw,sync,all_squash) 意义:服务器共享/home/public目录中的数据,所有人都可访问,可读可写,同步传输,账户映射为nobody
  • /home/public 192.168.48.131/24(ro,root_squash,sync) 意义:服务器共享/home/public目录中的数据,只允许192.168.48.131主机访问,方式为只读,客户端root账户映射为服务端的nobody,同步读写
  • /home/public 192.168.48.0/24(rw,all_squash,anonuid=2000,anongid=2000) 意义:服务器共享/home/public目录中的数据,允许192.168.48.0网段所有主机访问,方式为可读可写,账户映射为nobody,uid为2000,gid为2000

实验1:共享文件

服务端配置

1.关闭防火墙和selinux然后安装服务

setenforce  0
systemctl stop  firewalld
yum  install  nfs-utils  -y  服务端和客户端均安装

2.服务端建立共享文件目录,并设置权限


[root@server ~] mkdir /nfsfile
[root@server ~] echo "hello hahaha" > /nfsfile/readme
[root@server ~]# chmod  -Rf  777  /nfsfile
[root@server ~] ll /nfsfile/readme
-rw-r--r-- 1 root root 13 Oct 30 19:50 /nfsfile/readme

3.服务端编辑配置文件,要共享的目录

[root@server ~] vim /etc/exports
#添加以下内容
/nfsfile  *(rw,sync,all_squash)#服务端共享/nfsfile目录中的数据,所有主机均可访问,同步传输,所有账户均映射为nobody

4.服务端先启动rpc,再启动nfs


[root@server ~] systemctl start rpcbind
[root@server ~] systemctl start nfs-server
[root@server ~] 
# 注意:若systemctl start  rpcbind后报错,显示启动失败,应先停止服务,在重启服务
[root@server ~] systemctl stop rpcbind
[root@server ~] systemctl start  rpcbind

客户端配置

先安装nfs-utils
1.先查询有哪些远程共享目录可用
-e标识显示服务器共享信息列表

[root@node1 ~] showmount -e 192.168.65.128
Export list for 192.168.65.128:
/nfsfile *

2.新建本地挂载目录,远程挂载


[root@node1 ~] mkdir /nfs1  #新建本地挂载目录
[root@node1 ~]  mount -t nfs 192.168.65.128:/nfsfile /nfs1   #使用mount远程挂载服务器的目录到本地目录,-t nfs表示使用的文件系统类型
[root@node1 ~] cd /nfs1
[root@node1 nfs1] ls
readme
[root@node1 nfs1] cat redme
cat: redme: No such file or directory
[root@node1 nfs1] cat readme
hello hahaha客户端新建一个文件test1,ll查看,可见账户映射为了nobody
[root@node1 nfs1] touch test1.txt
[root@node1 nfs1] ll
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:12 test1.txt#服务端查看
[root@server ~]ll /nfsfile
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:12 test1.txt
[root@server ~]# 

实验2:修改权限

基于实验1,修改服务端nfsfile目录的权限,客户端是否可以访问成功,是否可以修改数据

#未修改权限为777
[root@server ~]# ll /nfsfile
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:12 test1.txt
修改权限为444
[root@server ~] chmod -Rf 444 /nfsfile
[root@server ~] ll /nfsfile
total 4
-r--r--r-- 1 root   root   13 Oct 30 19:50 readme
-r--r--r-- 1 nobody nobody  0 Oct 30 20:12 test1.txt客户端测试
d ~
[root@node1 ~# cd /nfs1
-bash: cd: /nfs1: Permission denied

从实验2可见,即使服务端exports配置文件中有rw权限,最后还是以文件系统权限为准

实验三:账户映射

修改配置文件,账户映射为root_squash,root用户映射为nobody

#服务端
[root@server ~] chmod -Rf 777 /nfsfile
[root@server ~] vim /etc/exports
[root@server ~] systemctl restart rpcbind
[root@server ~] systemctl restart nfs-server#客户端[root@node1 ~] cd /nfs1
[root@node1 nfs1] touch test2
[root@node1 nfs1] ll   #root映射为nobody
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rwxrwxrwx 1 nobody nobody  0 Oct 30 20:12 test1.txt
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:54 test2#切换一个普通用户fox,在共享的文件里面创建test3.txt后,用户fox,未被映射,原因是服务端编辑了配置文件为root_squash[root@node1 nfs1] su fox
[fox@node1 nfs1]$ touch test3.txt
[
[fox@node1 nfs1]$ ll
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rwxrwxrwx 1 nobody nobody  0 Oct 30 20:12 test1.txt
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:54 test2
-rw-r--r-- 1 fox    fox     0 Oct 30 21:02 test3.txt

[root@server ~] vim  /etc/exports
/nfsfile    192.168.65.128/24(rw,sync,all_squash,anonuid=2000,anongid=2000)

修改配置文件,all_squash,anonuid=2000,anongid=2000
修改为所有用户都映射为uid为2000的用户,gid为2000的组,如果没有就显示2000。

#现在是root用户
[root@node1 nfs1] who
root     pts/0        2025-11-01 20:14 (192.168.65.1)
#root用户创建一个文件test4
[root@node1 nfs1] touch test4.txt
[root@node1 nfs1] 
[root@node1 nfs1] ll
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rwxrwxrwx 1 nobody nobody  0 Oct 30 20:12 test1.txt
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:54 test2
-rw-r--r-- 1 fox    fox     0 Oct 30 21:02 test3.txt
-rw-r--r-- 1 fox    fox     0 Nov  1 20:28 test4.txt
#可见root用户创建一个test4后,root映射为了fox, id fox查看[root@node1 nfs1]id fox
uid=2000(fox) gid=2000(fox) groups=2000(fox)#fox的uid为2000,组gid为2000,所以root映射为了fox查看server端,[root@server nfsfile]# ll
total 4
-rwxrwxrwx 1 root   root   13 Oct 30 19:50 readme
-rwxrwxrwx 1 nobody nobody  0 Oct 30 20:12 test1.txt
-rw-r--r-- 1 nobody nobody  0 Oct 30 20:54 test2
-rw-r--r-- 1   2000   2000  0 Oct 30 21:02 test3.txt
-rw-r--r-- 1   2000   2000  0 Nov  1 20:28 test4.txt
http://www.dtcms.com/a/558775.html

相关文章:

  • tex中ifthen宏包的介绍
  • 个人网站建设开题报告做网站协议书
  • wordpress网站更换空间开发软件需要多少钱k
  • 企业网站建设流程步骤美工素材网站
  • 杨洋亮相梦幻西游品牌活动 带队出征尽展风采
  • 网站怎么做代码优化破解php网站后台密码
  • 制作好的网站必须申请网站建设和成本
  • 网站建设产品分割国外域名注册哪个网站好
  • JS 请求处理:从 “回调地狱” 到 “并发控制”,我封装了能复用 10 个项目的请求工具
  • VSCode中Kilo Code插件集成终端输出中文乱码问题解决
  • 影响网站排名的因素 权重网站建设教程视频百度云
  • 第三十四篇:对象的“自我介绍”:__str__和__repr__魔法方法的区别与实现
  • 11-MySQL事务管理
  • 36氪国外做网站微信营销模式有哪些
  • seo网站优化推广教程做简单的html网站
  • ftp怎么做网站南宁建站模板大全
  • 中国空间站拒绝10国名单什么是线上推广
  • 网站开发部门叫什么wordpress右浮动
  • 网站开发之前前后端不分离百度怎么搜索图片
  • 安徽企业网站建设公司域名未做运行网站解析
  • 说一下,项目中单点登录的实现原理
  • 网站建设用书建设一个网站的需求分析
  • CUDA C++编程指南(1)——简介
  • 哪做网站最好程序员做的简单的网站
  • 不同的网站 做301百度网站登录
  • 厦门做网站软件网站建设公司好吗
  • 昆明学校网站设计公司搜索引擎优化与推广技术
  • 网站建设单位哪家好设计师接单的网站
  • 便宜做网站抖音代运营广州
  • 到底什么是:对称加密/非对称加密--公钥和密钥(下)