博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubuntu搭建NFS服务器,NFS协议详细分析
阅读量:4940 次
发布时间:2019-06-11

本文共 3195 字,大约阅读时间需要 10 分钟。

目录

1. Ubuntu搭建NFS服务器

​ NFS(Network FileSystem,网络文件系统 ),是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样 。

NFS服务器所共享文件或目录记录在/etc/exports文件中。

** 安装NFS **

mkdir /home/mu/nfs      # 新建目录, 目录随意起名字,此处为nfs, 此目录为nfs共享目录  sudo apt install nfs-kernel-server # 安装nfs服务  sudo echo "/home/mu/nfs *(rw,sync,no_root_squash,no_subtree_check)" >> /etc/exports  # 编辑权限     # /home/mu/nfs    :nfs客户端加载目录    # *                    :允许所有的网段访问,也可以使用具体的IP    # rw                   :挂接此目录的客户端对该共享目录具有读写权限    # sync                 :资料同步写入内存和硬盘    # no_root_squash       :root用户具有对根目录的完全管理访问权限。    # no_subtree_check     :不检查父目录的权限。    # Tips: *和后面的括号之间无空格 sudo service portmap start  # 重启portmap sudo /etc/init.d/rpcbind restart  # 重启rpcbind 服务 sudo /etc/init.d/nfs-kernel-server restart  # 重启nfs服务   sudo /etc/init.d/nfs-kernel-server status  # 测试nfs服务是否成功# 在客户端挂载服务,如此客户端/mnt目录下的内容就是共享目录nfs下的内容 sudo mount -t nfs ip:/home/mu/nfs /mnt  # ip为nfs server的IP   umount /mnt/  # 取消挂载   ls /mnt  # 查看结果 # 结果 bin  dev  etc  home  lib  linuxrc  mnt  proc  root  sbin  sys  tmp  usr

​ 如果在使用中需要增加新的NFS共享目录,直接修改/etc/exports文件即可。修改该文件后,可以不用重启NFS服务,用exportfs命令读取/etc/exports文件,重新共享输出。exportfs -ra

2. NFS协议分析

2.1 实验拓扑:

1346826-20180528144104542-650220725.png

nfs server为ubuntu:

1346826-20180528144130055-543613623.png

nfs client 为kali:

1346826-20180528144205556-1467213728.png

2.2 在kali抓包分析

1346826-20180528144307702-879037247.png

2.2.1 portmap协议

1346826-20180528144406890-1251962483.png

客户端:10.10.10.1 Call

发送连接端口请求,向服务器10.10.10.2询问NFS服务的端口号
服务器:10.10.10.2 Reply
发送回应,告知客户端10.10.10.1NFS服务器的端口号为34381

展开reply如下:

1346826-20180528144431849-838293991.png

2.2.2 mount协议

1346826-20180528144507621-1472798336.png

客户端:10.10.10.1 Call

向服务器发送连接请求。
服务器:10.10.10.2 Reply
服务器收到连接请求,回应客户端连接成功。
Reply协议展开结果如下:
1346826-20180528144523636-412196358.png

2.2.3 NFS

1346826-20180528144617037-1801389435.png

客户端:10.10.10.1 Call SETCLIENTID

客户端请求服务器为客户端设置服务ID -> set Client Id
服务器:10.10.10.2 Reply SETCLIENTID
服务器为客户端设置id,并将id和验证返回给客户端

1346826-20180528144634818-1213455524.png

SETCLIENTID请求中,服务器为客户端设置了clientid,但是客户端不能马上使用这个clientid,必须先向服务器发起SETCLIENTID_CONFIRM请求,确认接收到了clientid,然后才能使用。

1346826-20180528144653800-1849137685.png

客户端:10.10.10.1 Call SETCLIENTID_CONFIRM

客户端将接收到的clientid发送给服务器以确认,包内容如下:

1346826-20180528144711954-49948317.png

服务器:10.10.10.2 Reply SETCLIENTID_CONFIRM

服务器接收到确认请求后客户端即可使用此client id

1346826-20180528144726135-745882694.png

需要说明的一点是,客户端发起SETCLIENTID_CONFIRM请求的同时还发起了GETATTR请求,这个请求的作用是获取clientid的过期时间,过期后就不能使用这个clientid了

1346826-20180528144746730-242625408.png

PUTROOTFH   设置文件系统根节点的文件句柄  由于GETATTR中需要使用文件句柄,因此先设置为根节点的文件句柄

1346826-20180528144813087-1934010058.png

客户端:10.10.10.1 Call PUTROOTFH | GETATTR

客户端发送获得系统根节点句柄的请求
服务器:10.10.10.2 Reply PUTROOTFH | GETATTR
服务器收到请求后核对clientid信息,正确后将根节点的文件句柄回复给客户端,客户端以后就可以使用这个句柄来访问当前目录。

1346826-20180528144832753-1220875035.png

这样,客户端就成功与服务器建立连接,然后客户端可以使用获得的句柄对服务器上的文件进行各种操作

1346826-20180528144852828-1690907937.png

2.2.4 权限

客户端:10.10.10.1 Call

客户端向服务器发出查询自己权限的请求 read 、lookup 、modify、extend、delete

1346826-20180528144933459-176060082.png

服务器:10.10.10.2 Reply

服务器回应:允许read和lookup,拒绝modify、extend、delete

1346826-20180528144949567-2042878858.png

2.2.5 LOOKUP

客户端:10.10.10.1 Call

客户端发出查询home目录的请求,并请求获得home目录的句柄

1346826-20180528145017671-946977655.png

服务器找到home目录,并将对home目录操作的句柄返回给客户端

1346826-20180528145030888-627726691.png

2.2.6 读取文件操作

1346826-20180528145047631-1400586198.png

1、首先客户端发送请求,请求打开test.txt文件

2、服务器回应请求,并返回test.txt文件的句柄
3、客户端将收到的句柄发送给服务器进行确认 OPNE_CONFIRM
4、服务器收到确认信息并验证通过后,客户端就可以使用此句柄对文件进行操作
5、客户端发出READ请求,对象是test.txt文件
6、服务器收到请求,执行READ操作,并将读取的内容返回给客户端
7、客户端发出关闭文件的请求,对象是test.txt
8、服务器收到请求后将文件关闭。

1、open

1346826-20180528145119174-1779762816.png

2、open_confirm

1346826-20180528145142032-1855387669.png

1346826-20180528145148921-672315174.png

3、read

1346826-20180528145204077-894107002.png

4、结果

1346826-20180528145219305-104658231.png

5、close

1346826-20180528145239573-1118653612.png

1346826-20180528145246342-1173037408.png

2.2.7 写操作

1346826-20180528145301201-1892891353.png

1、客户端向服务器查询自己的权限,RD、LU、MD、XT、DL

2、服务器收到请求,返回allowed的权限 RD、LU、MD、XT、DL
3、客户端请求服务器查找write.txt 文件,要求返回其句柄
4、服务器回应查找失败,没有此文件,并创建此文件,返回给客户端此文件句柄
5、客户端利用句柄请求打开此文件
6、服务器回应打开状态,返回操作的新的句柄
7、客户端利用句柄在write文件写入信息
8、服务器回应写入成功
9、客户端请求关闭此文件
10、服务器回应已经关闭

1、access询问权限

1346826-20180528145330977-564565487.png

2、确认权限

1346826-20180528145347111-398497228.png

3、查找文件

1346826-20180528145404209-1713328963.png

4、查找失败

1346826-20180528145416801-1231983327.png

5、创建文件

1346826-20180528145433213-676065395.png

6、创建成功 返回句柄

1346826-20180528145449467-1939587084.png

7、写入内容

1346826-20180528145510418-158200059.png

8、写入成功

1346826-20180528145525990-26420197.png

9、10、关闭文件

1346826-20180528145542283-327753437.png

实验所用NFS数据包:

转载于:https://www.cnblogs.com/0x4D75/p/9100179.html

你可能感兴趣的文章
redis
查看>>
BZOJ1645 [Usaco2007 Open]City Horizon 城市地平线
查看>>
配置IIS
查看>>
单例模式详解
查看>>
电商项目(下)
查看>>
[NOIP2015] 子串
查看>>
NSSet和NSArray区别与方法总结
查看>>
Python列表 元组 字典 集合
查看>>
foreach遍历数组、数组的转置与方阵的迹
查看>>
Still unable to dial persistent://blog.csdn.net:80 after 3 attempts
查看>>
HTML超文本标记语言(九)——表单输入类型
查看>>
基于busybox制作mini2440根文件系统及使用nfs挂载
查看>>
信道容量及信道编码原理学习
查看>>
关于信息论中熵、相对熵、条件熵、互信息、典型集的一些思考
查看>>
浅谈独立特征(independent features)、潜在特征(underlying features)提取、以及它们在网络安全中的应用...
查看>>
从随机过程的熵率和马尔科夫稳态过程引出的一些思考 - 人生逃不过一场马尔科夫稳态...
查看>>
《A First Course in Abstract Algebra with Applications》-chaper1-数论-关于素数
查看>>
ORA-3136
查看>>
算法笔记_145:拓扑排序的应用(Java)
查看>>
JS获取农历日期
查看>>