NFS伺服器最近更新日期∶2007/02/271.本章的行前准备工作2.NFS的由来与其功能NFSNFSNFSNFS为NetworkNetworkNetworkNetworkFileSystemFileSystemFileSystemFileSystem的简称,最早之前是由SunSunSunSun这家公司所发展出来的,他的目的就是想让不同的机器、不同的作业系统可以彼此分享个别的档案啦!目前在UnixUnixUnixUnixLikeLikeLikeLike当中用来做为filefilefilefileserverserverserverserver是相当不错的一个方案喔!基本上,UnixUnixUnixUnixLikeLikeLikeLike主机连接到另一部UnixUnixUnixUnixLikeLikeLikeLike主机来分享彼此的档案时,使用NFSNFSNFSNFS要比SAMBASAMBASAMBASAMBA这个伺服器快速且方便的多了!此外,NFSNFSNFSNFS的设定真的很简单,几乎只要记得启动RemoteRemoteRemoteRemoteProcedureProcedureProcedureProcedureCallCallCallCall这个咚咚(RPC,(RPC,(RPC,(RPC,就是portmapportmapportmapportmap这个套件啦!))))就一定可以架设的起来!真是不错啊!不过,如果要达成WindowsWindowsWindowsWindows与LinuxLinuxLinuxLinux之间的沟通,那么还是以SAMBASAMBASAMBASAMBA比较容易啊!无论如何,NFSNFSNFSNFS还是可以做为小公司或学校单位内部UnixUnixUnixUnixLikeLikeLikeLike机器共享filefilefilefile的一个ServerServerServerServer喔!2.1什么是NFS(NetworkFileSystem)2.2什么是RPC(RemoteProcedureCall)2.3NFS启动的RPCdaemons2.4NFS的档案存取权限3.NFSServer端的设定3.1所需要的套件3.2NFS的套件结构3.3/etc/exports设定档的语法与参数3.4启动NFS∶rpcinfo3.5NFS的连线观察∶showmount,/var/lib/nfs/etab,exportfs3.6NFS的安全性4.NFS用户端的设定4.1远端NFS伺服器的挂载4.2用户端可处理的挂载参数与开机挂载4.3无法挂载的原因分析4.4自动挂载autofs的使用5.案例演练6.重点回顾7.课后练习8.参考资料9.针对本文的建议∶=114695本章的行前准备工作NFS这个藉由网路分享档案系统的服务在架设的时候是很简单的,不过,他最大的问题在于『权限』方面的概念!因为在用户端与伺服器端可能必须要具备相同的帐号才能够存取某些目录或档案。另外,NFS的启动需要透过所谓的远端程序呼叫(RPC),也就是说,我们并不是只要启动NFS就好了,还需要启动RPC这个服务才行啊!因此,你必须要拥有的基础知识有∶••••必须要了解档案系统的权限概念,可以参考基础篇的Linux档案属性与目录配置••••了解网路基础,防火墙与关闭SELinux模组等等。NFS的由来与其功能在开始进行NFS的设定之前,我们得先来了解一下,什么是NFS呢?不然讲了一堆也没有用,对吧!^_^!底下就来谈一谈什么是NFS,且NFS的启动还需要什么样的协定啊!什么是NFS(NetworkFileSystem)NFS就是NetworkFileSystem的缩写,最早之前是由Sun这家公司所发展出来的。他最大的功能就是可以透过网路,让不同的机器、不同的作业系统、可以彼此分享个别的档案(sharefiles)。所以,您也可以简单的将他看做是一个档案伺服器(fileserver)呢!这个NFS伺服器可以让您的PC来将网路远端的NFS主机分享的目录,挂载到本地端的机器当中,在本地端的机器看起来,那个远端主机的目录就好像是自己的一个磁碟分割槽一样(partition)!使用上面相当的便利!图一、NFS主机分享目录与Client挂载示意图就如同上面的图示一般,当我们的NFSServer设定好了分享出来的/home/sharefile这个目录后,其他的NFSClient端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自订),例如前面图示中的NFSclient1与NFSclient2挂载的目录就不相同。我只要在NFSclient1系统中进入/home/data/sharefile内,就可以看到NFSServer系统内的/home/sharefile目录下的所有资料了(当然,权限要足够啊!^_^)!这个/home/data/sharefile就好像NFSclient1自己机器里面的一个partition喔!只要权限对了,那么您可以使用cp,cd,mv,rm...等等磁碟或档案相关的指令!真是他X的方便呐!好的,既然NFS是透过网路来进行资料的传输,那么经由socketpair的概念你会知道NFS应该会使用一些port吧?那么NFS使用哪个port来进行传输呢?答案是....不知道!@_@!因为NFS用来传输的port是随机选择小于1024以下的埠口来使用的。咦!那用户端怎么知道你伺服器端使用那个port啊?此时就得要远端程序呼叫(RemoteProcedureCall,RPC)的协定来辅助啦!底下我们就来谈谈什么是RPC?什么是RPC(RemoteProcedureCall)因为NFS支援的功能相当的多,而不同的功能都会使用不同的程式来启动,每启动一个功能就会启用一些port来传输资料,因此,NFS的功能所对应的port才没有固定住,而是采用随机取用一些未被使用的小于1024的埠口来作为传输之用。但如此一来又造成用户端想要连上伺服器时的困扰,因为用户端得要知道伺服器端的相关埠口才能够连线吧!此时我们就得需要远端程序呼叫(RPC)的服务啦!RPC最主要的功能就是在指定每个NFS功能所对应的portnumber,并且回报给用户端,让用户端可以连结到正确的埠口上去。那RPC又是如何知道每个NFS的埠口呢?这是因为当伺服器在启动NFS时会随机取用数个埠口,并主动的向RPC注册,因此RPC可以知道每个埠口对应的NFS功能,然后RPC又是固定使用port111来监听用户端的需求并回报用户端正确的埠口,所以当然可以让NFS的启动更为轻松愉快了!图二、NFS与RPC服务及档案系统操作的相关性如上图所示,当用户端有NFS档案存取需求时,他会如何向伺服器端要求资料呢?1.用户端会向伺服器端的RPC(port111)发出NFS档案存取功能的询问要求;2.伺服器端找到对应的已注册的NFSdaemon埠口后,会回报给用户端;Tips:所以你要注意,要启动NFS之前,RPC就要先启动了,否则NFS会无法向RPC注册。另外,RPC若重新启动时,原本注册的资料会不见,因此RPC重新启动后,他管理的所有程式都需要重新启动以重新向RPC注册。3.用户端了解正确的埠口后,就可以直接与NFSdaemon来连线。由于NFS的各项功能都必须要向RPC来注册,如此一来RPC才能了解NFS这个服务的各项功能之portnumber,PID,NFS在主机所监听的IP等等,而用户端才能够透过RPC的询问找到正确对应的埠口。也就是说,NFS必须要有RPC存在时才能成功的提供服务,因此我们称NFS为RPCserver的一种。事实上,有很多这样的伺服器都是向RPC注册的,举例来说,NIS(NetworkInformationService)也是RPCserver的一种呢。此外,由图二你也会知道,不论是用户端还是伺服器端,要使用NFS时,两者都需要启动RPC才行喔!更多的NFS相关协定资讯你可以参考底下网页∶••••••••启动的RPCdaemons我们现在知道NFS伺服器在启动的时候就得要向RPC注册,所以NFS伺服器也被称为RPCserver之一。那么NFS伺服器主要的任务是进行档案系统的分享,档案系统的分享则与权限有关。所以NFS伺服器启动时至少需要两个daemons,一个管理client端是否能够登入的问题,一个管理client端能够取得的权限。如果你还想要管理quota的话,那么NFS还得要再载入其他的RPC程式就是了。我们以较单纯的NFS主机来说∶••••rpc.nfsd∶这个daemon主要的功能就是在管理Client是否能够登入主机的权限啦,其中还包含这个登入者的ID的判别喔!••••rpc.mountd这个daemon主要的功能,则是在管理NFS的档案系统哩!当Client端顺利的通过rpc.nfsd而登入主机之后,在他可以使用NFS伺服器提供的档案之前,还会经过档案使用权限(就是那个-rwxrwxrwx与owner,group那几个权限啦)的认证程序!他会去读NFS的设定档/etc/exports来比对Client的权限,当通过这一关之后Client就可以取得使用NFS档案的权限啦!(注∶这个也是我们用来管理NFS分享之目录的使用权限与安全设定的地方哩!)••••rpc.lockd(非必要)这个玩意儿可以用在管理档案的锁定(lock)用途。为何档案需要『锁定』呢?因为既然分享的NFS档案可以让用户端使用,那么当多个用户端同时尝试写入某个档案时,就可能对于该档案造成一些问题啦!这个rpc.lockd则可以用来克服这个问题。但rpc.lockd必须要同时在用户端与伺服器端都开启才行喔!此外,rpc.lockd也常与rpc.statd同时启用。••••rpc.statd(非必要)可以用来检查档案的一致性,与rpc.lockd有关!若发生因为用户端同时使用同一档案造成档案可能有所损毁时,rpc.statd可以用来检测并尝试回复该档案。与rpc.lockd同样的,这个功能必须要在伺服器端与用户端都启动才会生效。NFS的档案存取权限不知道你有没有想过这个问题,在图一的环境下,假如我在NFSclient1上面以dmtsai这个使用者身份想要去存取/home/data/sharefile/这个来自NFSserver所提供的档案系统时,请问NFSserver所提供的档案系统会让我以什么身份去存取?是dmtsai还是?为什么会这么问呢?这是因为NFS本身的服务并没有进行身份登入的识别,所以说,当你在用户端以dmtsai的身份想要存取伺服器端的档案系统时,伺服器端会以用户端的使用者UID与GID等身份来尝试读取伺服器端的档案系统。这时有个有趣的问题就产生啦!那就是如果用户端与伺服器端的使用者身份并不一致怎么办?我们以底下这个图示来说明一下好了∶图三、NFS的伺服器端与用户端的使用者身份确认机制当我以dmtsai这个一般身份使用者要去存取来自伺服器端的档案时,你要先注意到的是∶档案系统的inode所记录的属性为UID,GID而非帐号与群组名。那一般Linux主机会主动的以自己的/etc/passwd,/etc/group来查询对应的使用者、群组名称。所以当dmtsai进入到该目录后,会参照NFSclient1的使用者与群组名称。但是由于该目录的档案主要来自NFSserver,所以可能就会发现几个情况∶••••NFSserver/NFSclient刚好有相同的帐号与群组则此时使用者可以直接以dmtsai的身份进行伺服器所提供的档案系统之存取。••••NFSserver的501这个UID帐号对应为vbird若NFS伺服器上的/etc/passwd里面UID50