信创平台下NFS协议及服务配置
一、 NFS协议
NFS(Network File System,网络文件系统)是Linux最基本的文件共享协议,由 Sun Microsystems 公司于 1984 年开发。NFS 文件系统对客户端来说是完全透明的,访问 NFS 文件系统上的文件或目录就跟在访问本地的文件或目录一样!NFS 的配置和使用其实都非常简单,在 UNIX 操作系统中被广泛使用,许多非 UNIX 如Windows操作系统也对 NFS 提供了支持。NFS客户端和服务端通过RPC协议进行通信(RPC协议可以简单的理解为一个基于TCP的应用层协议)。NFS最大的特点是将服务端的文件系统目录树映射到客户端,而在客户端访问该目录树与访问本地文件系统没有任何差别。RPC 服务器的端口映射器监听 UDP 111 端口,客户端上的 RPC 程序连接到服务器上的 UDP 111 端口来通过端口映射器查询 NFS 各项服务所使用的端口,然后客户端分别连接 rpc.nfsd 和 rpc.mountd 所在的端口,取得挂载点信息之后将文件系统挂载起来,客户端就可以操作共享文件系统。
NFS常见用途:
局域网中在不同unix/linux电脑之间方便简单共享数据
局域网中节省本地存储空间,将常用的文件和数据存放在一台NFS服务器上,那么本地终端将可以减少自身存储空间的使用。
用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
一些设备如软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
NFS使用的端口参考《NFS服务的端口分配》。NFS 服务器主要进程有:
rpc.nfsd 进程:NFS 服务的主进程,主要管理客户端是否能够接入 NFS 服务器以及数据的传输。该进程固定监听 TCP/UDP 2049 端口。
rpc.mountd 进程:管理和维护 NFS 文件系统,根据所设定的权限决定是否允许客户端挂载指定的共享目录。该进程监听的端口默认是不固定的。
rpc.lockd 进程(可选):提供文件锁功能,防止多个客户端同时写入一个文件。该进程监听的端口默认是不固定的。
rpc.statd 进程(可选):负责检查数据的状态及一致性,需要与 rpc.lockd 配合使用。该进程监听的端口默认是不固定的。
rpcbind 进程:RPC 的端口映射器进程,监听 UDP 111 端口。
NFS原理可参考《nfs原理及安装配置》。
二、NFS服务安装与配置
参考《NFS共享以及auto自动挂载》一文。
1. NFS 服务的安装与启动
在 NFS 客户端,服务端都进行安装两个软件(下面安装与启动以CentOS7/loongson为例,其它Linux操作过程类似):
nfs-utils:NFS服务的主程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。银河麒麟V10的软件包名是"nfs-coomon”。
rpcbind:NFS可以视为一个RPC程序,再启动任何一个RPC程序之前,需要由rpcbind服务来完成端口和功能的对应映射,在提供NFS服务之前必须先启动rpcbind服务才行。
# yum install nfs-utils,rpcbind # nfs 服务安装,安装nfs-utils会自动安装rpcbind,所以这里rpcbind其实是可以省略
# systemctl start rpcbind # rpcbind服务启动,
# systemctl start nfs-server # nfs 服务启动,服务名用nfs也可以
# systemctl enable rpcbind #rpcbind服务开机自启
# systemctl enable nfs-server # nfs 服务开机自启,服务名用nfs也可以
注意配置服务端与客户端的防火墙。
注:可以通过netstat -ntlp检查111端口是否监听状态,通过rpcinfo -p localhost查看rpcbind服务情况。
注:ubuntu20下的nfs包名字不同:
apt install nfs-common
2. NFS 服务的共享目录配置
NFS 服务程序的配置文件为 /etc/exports,定义要共享的目录与相应的权限,默认情况下里面没有任何内容。
配置格式是:“共享目录的路径 允许访问的 NFS 客户端(共享权限参数)”。
NFS 服务程序配置文件的常见参数如下:
ro 只读
rw 读写
root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的匿名用户
no_root_squash 当 NFS 客户端以 root 管理员访问时,映射为 NFS 服务器的 root 管理员(为了安全,尽量不用!)
all_squash 无论 NFS 客户端使用什么账户访问,均映射为 NFS 服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid anongid 匿名的uid和gid,默认情况是nfsnobody,uid是65534
(1)创建 nfs 共享的文件目录:
[root@localhost ~]# mkdir /opt/sharecentos/ # 建立共享目录
[root@localhost ~]# chmod 777 /opt/sharecentos/ # 修改目录权限,让所有人可以访问,或者chmod -R o+w /opt/sharecentos/
(2)在/etc/exports中设置此目录为NFS共享目录,并设置共享参数:对所有用户共享(同步数据,读写权限,指定用户ID,组ID'如建立的文件属于此用户'),本服务器的id=1001是tomcat用户。
#cat /etc/exports
/opt/sharecentos/ *(sync,rw,anonuid=1001,anongid=1001)
#id tomcat
uid=1001(tomcat) gid=1001(tomcat) 组=1001(tomcat)
#id 1001
uid=1001(tomcat) gid=1001(tomcat) 组=1001(tomcat)
如果配置对192.18.0.0网段的共享(数据同步),对192.18.0.50进行共享(数据同步,读写),格式为:
/opt/nfsshare 192.18.0.0/24(sync) 192.18.0.50(sync,rw)
编辑/etc/exports完成后执行exportfs -rv 进行刷新( -r #重新导出所有目录, -v #导出选项列表)
[root@localhost ~] exportfs -rv
[root@localhost ~] showmount -e localhost
Export list for localhost:
/opt/sharecentos *
3. 在NFS客户端进行挂载
在客户端上,和服务端的区别就是不用启动nfs服务(需要启动rpcbind服务)。可以用showmount命令查看nfs服务器共享出来的目录,然后可以mount挂载。
# showmount
#显示NFS服务器的挂载信息
-e #显示 NFS 服务器的共享列表,参数是NFS服务器的IP地址
-a #显示本机挂载的文件资源的情况
v #显示版本号
例如:查看192.168.10.58主机 NFS 共享目录列表
[root@localhost]# showmount -e 192.168.10.58
Export list for 192.168.10.58:
/opt/sharecentos *
再用mount命令进行挂载 将192.168.10.58下的共享目录/opt/sharecentos 挂载到客户端的 /mnt/mntremote/下:
[root@localhost ]# cd /mnt
[root@localhost mnt]# mkdir mntremote
[root@localhost mnt]# mount -t nfs 192.168.10.58:/opt/sharecentos /mnt/mntremote/
用df -h可以看到新增分区条目:
[root@localhost opt]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda4 42G 12G 28G 31% /
devtmpfs 3.7G 0 3.7G 0% /dev
tmpfs 3.7G 16K 3.7G 1% /dev/shm
tmpfs 3.7G 13M 3.7G 1% /run
tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
/dev/sda1 200M 4.7M 196M 3% /boot/efi
tmpfs 3.7G 32K 3.7G 1% /tmp
tmpfs 748M 96K 748M 1% /run/user/0
192.168.10.58:/opt/sharecentos 35G 13G 23G 36% /mnt/mntremote
注:NFS服务端/etc/exports配置文件中所指定的‘anonuid=1001,anongid=1001’意味着,在客户端进行操作是NFS服务器的用户 id 为1001(tomcat)。
现在复制一个文件到/mnt/mntremote,例如cp webmin-1.960.tar.gz /mnt/mntremote/
[root@localhost opt]# ll /mnt/mntremote/ webmin-1.960.tar.gz
-rw-r--r-- 1 1001 1001 0 11月 18 17:10 webmin-1.960.tar.gz
因为这台客户端并没有1001这个用户,在客户端就只显示id号,如果假设客户端的1001用户名是liu,在客户端显示是 liu。但在NFS服务端显示是tomcat,也就是这个文件的最终身份是1001/tomcat。NFS服务端配置共享目录时,加上all_squash参数可以强制所有客户端账户包括root均映射为 NFS 服务器的匿名用户(这里为1001/tomcat)。
NFS的权限管理比较简单,主要是客户端要映射到服务端身份,《NFS服务的用户身份映射》介绍的比较详细。
4. 客户端自动挂载
(1)开机挂载
在客户端/etc/fstab里添加:
192.168.10.58:/opt/sharecentos /mnt/mntremote/ nfs defaults,_rnetdev 1 1
备注:第1个1表示备份文件系统,第2个1表示从/分区的顺序开始fsck磁盘检测,0表示不检测。
_rnetdev 表示主机无法挂载直接跳过,避免无法挂载主机无法启动。
开机自动挂载如果遇到NFS服务器问题会造成启动变慢,一般不建议使用(包括smb),建议用下面的autofs自动动态挂载。
(2)自动挂载
autofs 服务程序实现在用户需要使用该文件系统时才去动态挂载。autofs服务安装及启动:
[root@localhost ~]# yum install autofs -y #进行安装
[root@localhost ~]# systemctl start autofs #开启服务autofs
[root@localhost ~]# systemctl enable autofs #开机自启autofs服务
autofs配置文件为:/etc/auto.master, 添加如下内容:
/mnt/mntremote /etc/auto.nfs --timeout=10
/mnt/mntremote:是要挂载的本地目录,向NFS服务器发送请求信号时,要在这个目录下面进行操作,否则是无效的。
/etc/auto.nfs: 是一个配置 NFS服务器共享文件的路径,及本地在/mnt目录中要与远程共享文件挂载的目录及权限。
--timeout=10 :指NFS客户端在10秒没有向NFS服务器请求数据时断开挂载连接。
#vi /etc/auto.nfs
nfsserver -ro,soft,intr 192.168.10.58:/opt/sharecentos
nfsserver 。一个本地目录,不需要创建,用于挂载远程共享文件192.168.10.58:/opt/sharecentos,在想要使用远程共享,只要在本地目录/mnt/mntremote下键入:cd nfsserver 系统就会自动挂载到远程共享目录192.168.10.58:/opt/sharecentos,在到达超时时间时就会自动卸载。
-ro,soft,intr。 -ro:挂载时的权限,soft:指如果配置错误的话,在启动系统时会报错。Intr:指在系统报错之后,可以使用crtl+c来终止这个错误。
192.168.10.58:/opt/sharecentos。远程NFS共享目录
#重启autofs服务或者重新加载配置:service autofs reload
再进入/mnt/mntremote,cd nfsserver前后,分别df -h进行比较,看是否实现自动加载NFS共享目录。
# /etc/sysconfig/autofs 中,参数 TIMEOUT=5 规定了默认卸载时间,单位为 s (秒)
注:当在服务器运行df -h 卡死的时候,很有可能是nfs的原因。这时候:检查nfs exports,重启nfs服务,卸载有问题的挂载再重新挂载。
三、NFS服务的图形化管理
1. webmin
webmin中,NFS配置是放在网络组,菜单项“NFS输出”,直接是配置\etc\exports文件,
添加一个共享目录,选项和配置文件中的参数是一致的
返回上一级,点击【应用改变】相当于# exportfs -rv 进行刷新。
注:NFS 输出的模块配置...中,重启启动输出服务器是用的centos6风格(“if (killall -HUP rpc.nfsd && killall -HUP rpc.mountd); then /bin/true; else (/etc/rc.d/init.d/nfs stop ; /etc/rc.d/init.d/nfs start) fi”),如果是centos7/loongson等,需要相应更改。
2. system-config-nfs
system-config-nfs是常用的图形管理界面,同类的还有system-config-samba等(Linux system-config-*_jiaozi的技术博客_51CTO博客),下载地址是:http://ftp.loongnix.org/os/loongnix/1.0/os/Packages/s/system-config-nfs-1.4.2-2.fc21.loongson.noarch.rpm.详细教程可以参考《Linux实战之NFS服务器图形化配置》。
如果没有安装,yum install system-config-nfs。在终端下输入命令 system-config-nfs,启动界面,添加或者编辑一个共享,有三个设置页面:
如果理解前面配置原理,这些选项都是一一对应的,但是免去了记忆参数,配置后进行更改还是很方便的。
四、windows下访问NFS共享
windows有NFS支持选项,包括客户端和管理工具(服务器)。本文只考虑使用NFS client客户端!部分参考《Win7 NFS 设置详解》
1. 安装windows NFS支持
[注]:Windows7 pro没有NFS选项,只有企业版 Enterprise 和旗舰版Ultimate 支持,win10专业版以上就支持,win2008server R2以上也支持。.
从控制面板中程序与功能中,启用NFS服务,
2008 server则是从“控制面板” → 点击“角色” → 点击“添加角色” → 点击“下一步” → 点击“文件服务” → 点击“下一步“ →点击”下一步” → 选择“网络文件系统服务”。
2. 挂载NFS共享目录
测试中,加上NFS服务器地址为192.18.0.43,NFS共享路径是“/dzsbackup/citymail/software”,新建一个用户liufan(ID=501)作为NFS共享文件夹的匿名用户。
[root@localhost software]# useradd liufan
[root@localhost software]# cat /etc/passwd
liufan:x:501:501::/home/liufan:/bin/bash
[root@localhost software]# vi /etc/exports
/dzsbackup/citymail/software *(sync,all_squash,rw,anonuid=501,anongid=501)
[root@localhost software]# exportfs -rv
exporting *:/dzsbackup/citymail/software
在windows命令行下挂载NFS共享目录的操作如下:
C:\Users\Administrator>showmount -e 192.18.0.43
导出列表在 192.18.0.43:
/dzsbackup/citymail/software *
C:\Users\Administrator>mount 192.18.0.43:/dzsbackup/citymail/software Y:
Y: 现已成功连接到 192.18.0.43:/dzsbackup/citymail/software
命令已成功完成。
C:\Users\Administrator>dir Y:
驱动器 Y 中的卷没有标签。
卷的序列号是 D897-C53D
Y:\ 的目录
2017/12/23 10:12 115,121,952 xampp-win32-5.6.32-0-VC11-installer.exe
2020/10/19 11:26 <DIR> globaladdressbook
2020/09/11 11:27 15,033,394 jre6-windows-x64.zip
2016/10/21 10:34 3,425,934 GetGnuWin32-0.6.3.exe
连接成功,电脑多了一个网络盘符Y盘,可以和本地硬盘一样进行操作。
更简单的使用NFS的方式是映射网络驱动器,文件路径为\\192.18.0.43:\dzsbackup\citymail\software,勾选【登录时重新连接】实现开机自动挂载。
同样,资源管理器中访问NFS盘,
3. windows下NFS共享服务的文件权限问题
windows下mount /?” 可以查看mount命令具体的选项。
C:\Users\Administrator>mount -h
用法: mount [-o options] [-u:username] [-p:<password | *>] <\\computername\sharename><devicename | *>
-o rsize=size 设置读取缓冲区的大小(以 KB 为单位)。
-o wsize=size 设置写入缓冲区的大小(以 KB 为单位)。
-o timeout=time 设置 RPC 调用的超时值(以秒为单位)。
-o retry=number 设置软装载的重试次数。
-o mtype=soft|hard 设置装载类型。
-o lang=euc-jp|euc-tw|euc-kr|shift-jis|big5|ksc5601|gb2312-80|ansi
指定用于文件和目录名称的编码。
-o fileaccess=mode 指定文件的权限模式。
这些模式用于在 NFS 服务器上创建的
新文件。使用 UNIX 样式模式位指定。
-o anon 作为匿名用户装载。
-o nolock 禁用锁定。
-o casesensitive=yes|no 指定在服务器上执行区分大小写的文件查找。
-o sec=sys|krb5|krb5i
查看挂载的NFS共享目录详细配置,可以在命令行状态下输入mount命令,显示属性和mount挂载时的参数是对应的,如下:
C:\Users\Administrator>mount
本地 远程 属性
---------------------------------------------------------------------------------------
y: \\192.18.0.43\dzsbackup\citymail\software UID=-2, GID=-2
rsize=32768, wsize=32768
mount=soft, timeout=0.8
retry=1, locking=yes
fileaccess=755, lang=ANSI
casesensitive=no
sec=sys
例如:软装载模式(mtype=soft),避免因为NFS由于种种原因经常服务不可用如果硬装载就会导致资源管理器等停止响应;还有指定创建新文件的模式(比如 fileaccess=777)等。格式如:
C:\Users\Administrator>mount -o anon mtype=soft 192.18.0.43:/dzsbackup/citymail/software Y:
上面mount显示状态中,UID和GID都是-2,向这个共享目录复制文件,GetGnuWin32-0.6.3.exe,右键属性,找到NFS属性页如下图,可以看到所有者UID和组UID都为-2,在NFS服务器上看到的是uid/gid都是很大的数字。
这说明NFS Client的权限没有正确映射到NFS服务中,但是win7没有用户名映射,Active Directory 域服务,需要过修改注册表将windows访问NFS时的UID和GID改成0,步骤如下:
1、运行中输入regedit,打开注册表编辑器;
2、进入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default条目;
3、选择新建----QWORD值,新建AnonymousUid,AnonymousGid两个值,值为0;
4、重启电脑 注册表生效。
这时,再在NFS共享目录中新建一个文件,文件属性UID和GID都成为NFS Server一致的设置。
4. 断开/卸载NFS共享目录
不再使用共享后,从资源管理器的“断开网络驱动器”,或者命令行下执行命令,”umount 盘符 “。
umount Y: #卸载挂载的Y盘
umount -f -a #卸载全部的NFS挂载:
5. windows下的NFS服务器
原来以为没有必要,后来在制作某PE工具中需要nfs服务,在win7下装个nfs服务比安装一个完整centos虚拟机方便,发现还是有一些应用场景。
windows下的NFS服务器主要是hanewin nfs server,还有一个winNFSd,后者托管在sourceforge ,最新日期是2005年的项目,就选hanewin系列,虽然不开源但是免费,使用参考windows上搭建NFS服务器--haneWIN_行知致简的博客-CSDN博客_hanewin。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/mcwolf/article/details/109774545
版权声明:
作者:SE_Wang
链接:https://www.cnesa.cn/2112.html
来源:CNESA
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论