CentOS 7 安装配置 NFS

环境

nps 192.168.1.97

client 192.168.1.98

一、yum 安装

»yum -y install nfs-utils rpcbind

NFS 的套件结构:

 

  • /etc/exports :这个档案就是 NFS 的主要设定档了!不过,系统并没有预设值,所以这个档案‘ 不一定会存在’,您可能必须要使用 vi 主动的建立起这个档案喔!我们等一下要谈的设定也仅只是这个档案而已呐!

 

 

  • /usr/sbin/exportfs :这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸载或重新分享等等,这个指令是 NFS 系统里面相当重要的一个喔!至于指令的用法我们在底下会再介绍。

 

 

  • /usr/sbin/showmount :这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源喔!

 

 

  • /var/lib/nfs/*tab :在 NFS 伺服器的登录档都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经连结到此 NFS 主机的相关用户端资料。

 

»nfs 的主配置文件 /etc/expots默认为空

[root@linux ~]# vi /etc/exports
/opt/test         192.168.1.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
# [分享目录]      [第一部主机(权限)]                                                               [可用主机名]       [可用万用字元]

使配置生效 »exportfs -r  

 

  例:同一目录针对不同范围开放不同权限

[root@linux ~]# vi /etc/exports
/opt/test         192.168.1.0/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
/home/public 192.168.0.0/24(rw) *(ro) # 继续累加在后面,注意,我有将主机与网域分为两段 (用空白隔开) 喔!

  上面的例子说的是:当我的 IP 是在 192.168.0.0/24 这个网段的时候,那么当我在 Client 端挂载了 Server 端的 /home/public 后,针对这个被我挂载的目录我就具有可以读写的权限~ 至于如果我不是在这个网段之内,那么这个目录的 资料我就仅能读取而已,亦即为唯读的属性啦

 

 

二、权限说明

注:至于权限方面 (就是小括号内的参数) 常见的参数则有:

/opt/test 为共享目录

192.168.1.0/24  可以为一个网段,一个IP,也可以是域名,域名支持通配符 如: *.qq.com

rw:read-write,可读写;

ro:read-only,只读;

sync:文件同时写入硬盘和内存;

async:文件暂存于内存,而不是直接写入内存;

no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。

root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;

all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;

anonuid:匿名用户的UID值,可以在此处自行设定。

anongid:匿名用户的GID值。

三、启动 nfs

NFS 的启动还需要 portmap 的协助才行啊! 所以赶紧来启动吧!

 

[root@linux ~]# /etc/init.d/portmap start
# 如果 portmap 本来就已经在执行了,那就不需要启动啊!

[root@linux ~]# /etc/init.d/nfs start
# 有时候可能会出现如下的警告讯息:
exportfs: /etc/exports [3]: No 'sync' or 'async' option specified 
for export "192.168.0.100:/home/test".
  Assuming default behaviour ('sync').
# 上面的警告讯息仅是在告知因为我们没有指定 sync 或 async 的参数,
# 则 NFS 将预设会使用 sync 的资讯而已。你可以不理他,也可以加入 /etc/exports。

[root@linux ~]# vi /etc/exports
/tmp          *(rw,no_root_squash,sync)
/home/public  192.168.0.0/24(rw,sync)    *(ro,sync)
/home/test    192.168.0.100(rw,sync)
/home/linux   *.linux.org(rw,all_squash,anonuid=40,anongid=40,sync)

[root@linux ~]# /etc/init.d/nfs restart

 

 

 

service rpcbind start

service nfs start

chkconfig rpcbind on

chkconfig nfs on

启动之后,请赶快到 /var/log/messages 里面看看有没有被正确的启动呢?

 

[root@linux ~]# vi /var/log/messages
Sep 22 00:01:37 linux nfs: Starting NFS services:  succeeded
Sep 22 00:01:37 linux nfs: rpc.rquotad startup succeeded
Sep 22 00:01:37 linux nfsd[1050]: nfssvc_versbits: +2 +3 +4
Sep 22 00:01:37 linux nfs: rpc.nfsd startup succeeded
Sep 22 00:01:37 linux nfs: rpc.mountd startup succeeded
Sep 22 00:01:37 linux rpcidmapd: rpc.idmapd -SIGHUP succeeded

 

在确认没有问题之后,接下来我们来瞧一瞧那么 NFS 到底开了哪些端口?

[root@linux ~]# netstat -ultn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address State   PID/Program name
tcp        0      0 0.0.0.0:2049   0.0.0.0:*       LISTEN  -
tcp        0      0 0.0.0.0:803    0.0.0.0:*       LISTEN  1047/rpc.rquotad
tcp        0      0 0.0.0.0:111    0.0.0.0:*       LISTEN  32503/portmap
tcp        0      0 0.0.0.0:819    0.0.0.0:*       LISTEN  1064/rpc.mountd
udp        0      0 0.0.0.0:2049   0.0.0.0:*               -
udp        0      0 0.0.0.0:800    0.0.0.0:*               1047/rpc.rquotad
udp        0      0 0.0.0.0:816    0.0.0.0:*               1064/rpc.mountd
udp        0      0 0.0.0.0:111    0.0.0.0:*               32503/portmap
  • portmap 启动的 port 在 111;
  • NFS 启动的 port 在 2049;
  • 其他 rpc.daemons 启动的 port 则是随机产生的,因此需向 port 111 注册。

那我怎么知道每个 RPC 服务的注册状况?没关系,你可以使用 rpcinfo 来处理的。

[root@linux ~]# rpcinfo [-p] [IP|hostname]
参数:
-p :显示出所有的 port 与 porgram 的资讯;

范例一:显示出目前这部主机的 RPC 状态
[root@linux ~]# rpcinfo -p localhost
   program vers proto   port
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    800  rquotad
    100011    2   udp    800  rquotad
    100011    1   tcp    803  rquotad
    100011    2   tcp    803  rquotad
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100005    1   udp    816  mountd
    100005    1   tcp    819  mountd
    100005    2   udp    816  mountd
    100005    2   tcp    819  mountd
    100005    3   udp    816  mountd
    100005    3   tcp    819  mountd
#         NFS版本       埠口  服务名称

  如果你的 rpcinfo 无法输出,那就表示注册的资料有问题啦!可能需要重新启动 portmap 与 nfs 喔!

NFS 的连线观察

在你的 NFS 伺服器设定妥当之后,我们可以先自我测试一下是否可以连线喔! 就是利用 showmount 这个指令来查阅!
[root@linux ~]# showmount [-ae] [hostname|IP]
参数:
-a :显示目前主机与用户端的 NFS 连线分享的状态;
-e :显示某部主机的 /etc/exports 所分享的目录资料。

范例一:请显示出刚刚我们所设定好的相关 exports 资讯
[root@linux ~]# showmount -e localhost
Export list for localhost:
/tmp         *
/home/linux  *.linux.org
/home/public (everyone)
/home/test   192.168.0.100

  很简单吧!所以,当您要扫瞄某一部主机他提供的 NFS 分享的目录时,就使用 showmount -e IP (或hostname) 即可!非常的方便吧!这也是 NFS client 端最常用的指令喔!

如果有其他用户端挂载了你的 NFS 档案系统时, 那么该用户端与档案系统资讯就会被记录到 /var/lib/nfs/xtab 里头去的!

[root@linux ~]# tail /var/lib/nfs/etab
/home/public    *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,
subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
# 上面是同一行,可以看出除了 ro, sync, root_squash 等等,
# 其实还有 anonuid 及 anongid 等等的设定!

/tmp    *(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,subtr
ee_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
# 同样的,在 /tmp 也有很多的权限相关的参数喔!

如果你想要重新处理 /etc/exports 档案,当重新设定完 /etc/exports 后需不需要重新启动 nfs ? 不需要啦!如果重新启动 nfs 的话,要得要向 RPC 注册!很麻烦~ 这个时候我们可以透过 exportfs 这个指令来帮忙喔!

[root@linux ~]# exportfs [-aruv]
参数:
-a :全部挂载(或卸载) /etc/exports 档案内的设定
-r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
     及 /var/lib/nfs/xtab 的内容!
-u :卸载某一目录
-v :在 export 的时候,将分享的目录显示到荧幕上!

范例一:重新挂载一次 /etc/exports 的设定
[root@linux ~]# exportfs -arv
exporting 192.168.0.100:/home/test
exporting 192.168.0.0/24:/home/public
exporting *.linux.org:/home/linux
exporting *:/home/public
exporting *:/tmp

范例二:全部都卸载
[root@linux ~]# exportfs -auv

  要熟悉一下这个指令的用法喔!这样一来,就可以直接重新 exportfs 我们的记录在 /etc/exports 的目录资料啰!

 

四、客户端挂载:

mount -t nfs 192.168.1.97:/opt/test /mnt

#查看可挂载

showmount -e 192.168.1.97            

Export list for 192.168.1.97:

/opt/test          192.168.1.0/24

 

无提示 既为成功

客户端在挂载的时候遇到的一个问题如下,可能是网络不太稳定,NFS默认是用UDP协议,换成TCP协议即可:

mount -t nfs 192.168.1.97:/opt/test /mnt -o proto=tcp -o nolock