快捷搜索:

Linux系统下NFS的配置与注意的问题

1.什么是NFS(Network FileSystem)

NFS 便是 Network FileSystem 的缩写,最早之前是由 Sun 所成长出来的。他最大年夜的功能便是可以透过收集,让不合的机械、不合的操作系统、可以彼此分享个其余档案 ( share file ),以是,也可以简单的将他看做是一个 file server 呢!这个 NFS Server 可以让你的 PC 来将收集远程的 NFS 主机分享的目录,挂载到本地真个机械傍边,以是,在本地真个机械看起来,那个远程主机的目录就好象是自己的 partition 一样平常!

虽然 NFS 有属于自己的协议与应用的 port number ,然则在资料传送或者其它相关讯息通报的时刻, NFS 应用的则是一个称为远程历程调用( Remote Procedure Call, RPC )的协议来帮忙 NFS 本身的运作!

2.RPC

当我们在应用某些办事来进行远程联机的时刻,有些信息,例如主机的IP、办事的 port number、与对应到的办事之 PID 等等,都必要治理与对应!这些治理 port 的对应与办事相关性的事情,便是这个 Remote Procedure Call, RPC 的义务了

NFS 本身的办事并没有供给资料通报的协议,然则 NFS 却能让我们进行档案的分享,这此中的缘故原由,便是 NFS 应用到一些其它相关的传输协议!而这些传输的协议,便是应用到这个所谓的 RPC 的功能啰!这也便是说, NFS 本身便是应用 RPC 的一个 program 便是了!说的更口语一点, NFS 也可以视作是一个 RPC server 啦!同时要留意到的是,在某些状况中,不只跑 NFS 的 Server 必要激活 RPC 的办事,连带的,要挂载 NFS partition 的 Client 机械,也必要同步激活 RPC 才行!这样 Server 端与 Client 端才能藉由 RPC 的协议来进行 program port 的对应喔!NFS 主要在治理分享出来的目录,而至于资料的通报,就直接将他丢给 RPC 的协议来运作便是了!

3.NFS 激活的 RPC daemons

o rpc.nfsd:这个 daemon 主要的功能便是在治理 Client 是否能够登入主机的权限啦,此中还包孕这个登入者的 ID 的判别

o rpc.mountd:这个 daemon 主要的功能,则是在治理 NFS 的档案系统!当 Client 端顺利的经由过程 rpc.nfsd 而登入主机之后,在他可以应用 NFS server 供给的档案之前,还会颠末档案应用权限 ( 便是那个 -rwxrwxrwx 与 owner, group 那几个权限啦 ) 的认证法度榜样!他会去读 NFS 的设定档 /etc/exports 来比对 Client 的权限,当经由过程这一关之后, Client 就可以取得应用 NFS 档案的权限啦!(注:这个也是我们用来治理 NFS 分享之目录的应用权限与安然设定的地方哩)

4.NFS必要有两个套件才行,分手是:

nfs-utils

便是供给 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其它相关 documents 与阐明文件、履行档等的套件!这个便是 NFS 的主要套件

portmap

就犹如刚刚提的到,我们的 NFS 着实可以被视为一个 RPC server program,而要激活任何一个 RPC server program 之前,我们都必要做好 port 的对应 ( mapping ) 的事情才行,这个事情着实便是『 portmap 』这个办事所认真的!也便是说,在激活任何一个 RPC server 之前,我们都必要激活 portmap 才行呢!那么这个 portmap 到底在干嘛呢?就犹如这个办事的名称,哈哈!便是作 port 的 mapping 啊!举个例子来说:当 Client 端考试测验来应用 RPC server 所供给的办事时,因为 Client 必要取得一个可以连接的 port 才能够应用 RPC server 所供给的办事,是以, Client 首先就会去跟 portmap 讲『喂!可弗成以看护一下,给我个 port number ,好让我可以跟 RPC 团结吧!』这个时刻 portmap 就自动的将自己治理的 port mapping 见告 Client ,好让他可以连接上来 server 呢!以是啰:『激活 NFS 之前,请先激活 portmap !

7.权限问题

假设/etc/exports里面的内容为

#vi /etc/exports

/tmp *(rw,no_root_squash)

/home/public 192.168.0.*(rw) *(ro)

/home/test 192.168.0.100(rw)

/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)

假设我们在192.168.0.100这个client端登岸此NFS主机(192.168.0.2),那么

环境一:在192.168.0.100的帐号为test这个身份,同时,NFS主机上也有test这个帐号

a).因为NFS主机的/tmp权限为-rwxrwxrwt,以是我(test在192.168.0.100上)在/tmp下面具有存取的权限,并且写入档案的所有工资test.

b).在/home/public中,因为我有读写的权限,假如NFS主机在/home/public这个目录的权限对付test开放写入的话,那么就可以读写,并且写入档案的所有人是test。假如NFS主机的/home/public对付test这个应用者并没有开放写入权限时,那就无法写入,虽然/etc/exports里面是rw,也不起感化.

c).在/home/test中,权限与/home/public有相同的状态,必要NFS主机的/home/test对付test有开放的权限.

d).在/home/linux傍边,不论是何种的user,身份都邑被变成UID=40的这个帐号

环境二:假如我们在192.168.0.100的身份为test2,然则NFS主机却没有test2这个帐号时

a).在/tmp下照样可以写入,然则写入的档案所有人变成nobody.

b).在/home/public与/home/test里面是否可以写入,还必要看/home/public的权限而定,不过身份就被变成nobody了

c)/home/linux下的身份照样变成UID=40的帐号.

环境三:在192.168.0.100的身份为root

a).在/tmp里面可以写入,然则因为no_root_squash的参数,改变了预设的root_squash的设定值,以是在/tmp写入档案的所有工资root了.

-a: 显示今朝主机与client所连上来的应用目录的状态

-e: 显示hostname的/etc/exports里面共享的目录

12.查看激活的portnumber

#netstat -utln

nfs 自己所开启的 port ,便是那个 2049 的 port 啦!便是 NFS 主要孕育发生的 port NFS server 在前面我们就提过了,他是 RPC server 的一种,而 NFS 因为供给了多个 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,是以就必要激活多个 port 了!而且这些 port 是『随机孕育发生的』,也便是那个 port number 不会是固定的啦!每次 restart nfs 都邑获得不一样的 port number 呢!那么 Client 端怎么知道要连接上那个 port 来呼叫必要的 program 呢?呵呵!那便是 sunrpc ( port 111 ) 那个 portmap 办事所孕育发生的 port number 的功用啦!Client 会先连接到 sunrpc 那个 port 去知道应该到那个 port 去呼叫所必要的法度榜样!以是啰, rpc.xxxx 等之类的 daemon 自然就不必要有固定的 port number 啰!

NFS客户真个设定

#mount -t nfs hostname(orIP):/directory /mountpoint 搞定,就这么简单

为了担心会不小心将 NFS 端挂进来的具有 SUID 权限档案的法度榜样履行,root可以将NFS 所分享的目录以较为安然的环境挂载进来,可以

#mount -t nfs -o nosuid,ro hostname:/directory /mountponit

可能出问题的地方:

1.权限的设定不相符

2.忘怀了激活portmap,此时会报错:

mount: RPC: Port mapper failure - RPC: Unable to receive 或者

mount: RPC: Program not registered

那么,启动portmap,并且从新启动nfs

#service portmap start

#service nfs restart

您可能还会对下面的文章感兴趣: