windows和linux如何通过nfs进行共享

1,580 阅读3分钟

本文已参与 \lceil新人创作礼\rfloor 活动,一起开启掘金创作之路

前两天开发有这样的需求,在一台windows的开发机器上挂载一台linux服务器的nfs共享盘,其实windows和linux共享最好的方式是samba,既然有了这样的需求,还是做吧,下面分享下整个过程及问题处理。

1、首先在CentOS7上安装nfs

# yum install nfs-utils portmap rpcbind

2、创建共享分区

# mkdir -p /data/nfs

3、设置nfs

# vi /etc/exports
/data/nfs 192.168.60.0/24(rw,sync)

rw:允许读写

sync: 将数据同步写入内存缓冲区与磁盘中

还有很多其他选项,暂时不设置其他,保持默认设置

4、启动服务

# systemctl restart nfs nfs-server
# systemctl enable nfs nfs-server
# exportfs -rv

5、关闭防火墙

# systemctl stop firewalld

  一切都看似很顺利,下面进入windows进行挂载:

6、在控制面板中打开nfs功能 image.png

image.png

7、右击进入映射网络驱动器 image.png

输入服务端地址:

image.png

点击了下浏览,查看是否能访问到,然后就是这样的结果,也不清楚微软什么原理,连不上就报错嘛,界面都直接挂了~~: image.png

然后仔细看了下,是自己把IP写错了,177写成117了,好吧,重新再来一遍:

image.png

image.png

8、回到资源管理器

可以看到已经多了个Z盘 image.png  

9、检查读写权限

尝试新建一个目录,发现并没有权限:

image.png  

共享的时候明明已经设置了rw,这是为什么呢?因为NFS服务是没有用户验证功能的,所以服务器会将客户端的身份进行映射,将其映射为匿名用户nfsnobody。也就是说,当你用root用户去访问共享目录时,其实你已经变成了服务器端的匿名用户nfsnobodoy了,这样,你还有权限访问nfsnobody没有权限的文件吗?当然是不行的。

10、然后我就去给共享目录/data/nfs赋予了nfsnobody的所有权限

# setfacl -R -m u:nfsnobody:rwx /data/nfs

image.png

11、再次进入共享盘,尝试新建

发现还是一样的结果

image.png

然后在cmd中输入mount命令查看挂载详情:

image.png

然后发现windows这边的uid和gid都是2,再上服务器看下nfsnobody用户的uid、gid,发现是65534:

image.png

两边不一样,因此此时仅有共享目录的读权限。

12、既然不一样就修改成一样呗

在windows中修改nfs挂载用户的uid、gid需要修改注册表,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default中,添加DWORD值两项:AnonymousUid,AnonymousGid image.png

image.png 然后重启主机,重新挂载一遍,尝试新建,可以正常写了。 image.png

image.png

可以看到新建的test的所属用户和组都已经变为nfsnobody了:

image.png

13、虽然读写都正常了,但是应用程序是用指定的普通用户跑的,所以用nfsnobody用户运行肯定是不行的.这里新建一个普通用户nfstest: image.png

给共享目录赋予nfstest权限: image.png

在/etc/exports配置文件中新增三个参数:all_squash,anonuid,anongid all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组 anonuid:将远程访问的所有用户都映射为本地用户,设置本地用户的uid anongid:将远程访问的所有用户都映射为本地用户组,设置本地用户组的gid image.png

重新启动nfs服务: image.png

重新挂载,重新写文件,查看文件权限详情,发现新建的文件已经属于nfstest了.这样就完成了以指定用户读写的需求了。

本次因为权限的问题,一波三折,windows下的nfs共享还是挺繁琐的。没啥特殊需求还是使用samba吧,可以解决一些乱码、权限等问题。

好了,今天的分享就到这里了,希望对大家有所帮助,我们下期再见~~