NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 这家公司所发展出来的。他最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 ( share file ),这个 NFS Server 可以让PC 将网络远程的 NFS 主机分享的目录,挂载到本地端的机器当中,所以,在本地端的机器看起来,那个远程主机的目录就好像是自己的一个磁盘一样 ( partition )。
要启动 NFS 必须要有两个套件才行,分别是:
nfs-utils
nfs-utils-clients portmap
|
* portmap:
portmap服务负责的是端口映射!也就是说,在启动任何一个 RPC server 之前,我们都需要启动 portmap 才行呢!那么这个 portmap 到底在干嘛呢?就如同这个服务的名称,就是作 port 的 mapping(映射) 啊!
* nfs-utils:
就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其它相关 documents 与说明文件、执行档等的套件!这个就是 NFS 的主要套件。
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/xtab:这个档案则是主要的 NFS 的纪录文件咯!当我们的 NFS 分享出目录资源后,到底有哪些 Client 端曾经连接上我们的 NFS 主机呢?呵呵!就是看这个档案的内容。
NFS 的整个流程也差不多是这样:
|
首先,需要确认一下 Linux 主机是否可以支持 NFS
这项服务,然后再设定一下使用者的来源IP或主机名称以及分享出去的目录的权限,之后呢,启动 NFS 即可将刚刚设定的目录给他分享出去了!
那么在 Client 端怎么使用这个分享出来的目录?就是先以 showmount 这支程序检查 Linux Server 是否有可以使用的
NFS 目录,如果有的话,就将他 mount 在本机上面,如果可以 mount ,那么就可以使用 NFS 主机提供的资源了!
最重要的就是exports文件啦!在/etc目录下应该有一个exports的文件(如果没有手动建立吧)
这个是它的一些参数:
############################################################################
#
rw:可擦写的权限;
#
ro:只读的权限;
#
no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目『极不安全』,不建议使用!
#
root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统账号的身份;
#
all_squash:不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody 啦!
#
anonuid:前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody,但是您可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于您的 /etc/passwd 当中!
#
anongid:同 anonuid ,但是变成 group ID 就是了!
#
sync:数据同步写入到内存与硬盘当中;
#
async:数据会先暂存于内存当中,而非直接写入硬盘!
############################################################################
还是用例子来说明吧:
1. 假设我的 Linux 主机为 192.168.0.100 这一部;
2. 预计将 /tmp 以可擦写,并且不限制使用者身份的方式分享给所有 192.168.0.0/24 这个网域中的所有 Linux 工作站;
3. 预计开放 /home/nfs 这个目录,使用的属性为只读,可提供除了网域内的工作站外,向外亦提供数据内容;
4. 预计开放 /home/upload 做为 192.168.0.0/24 这个网域的数据上传目录,其中,这个 /home/upload 的使用者及所属群组为 nfs-upload 这个名字,他的 UID 与 GID 均为 210;
5. 预计将 /home/zjz 这个目录仅分享给 192.168.0.50 这部 Linux 主机,以提供该主机上面 zjz 这个使用者来使用,也就是说, zjz: 在 192.168.0.50 及 192.168.0.100 均有账号,且账号均为 zjz ,所以预计开放 /home/zjz 给 zjz 使用他的家目录啦!
* 首先,就是要建立 /etc/exports 这个档案的内容啰,您可以这样写吧!
[root @test root]# vi /etc/exports
/tmp 192.168.0.*(rw,no_root_squash)
/home/nfs 192.168.0.*(ro) *(ro,all_squash)
/home/upload 192.168.0.*(rw,all_squash,anonuid=210,anongid=210)
/home/andy 192.168.0.50(rw)
* 再来,就是要建立每个对应的目录的实际 Linux 权限了!我们一个一个来看:
1. /tmp
[root @test root]# ll /
drwxrwxrwt 6 root root 4096 Nov 16 09:07 tmp
2. /home/nfs
[root @test root]# mkdir -p /home/nfs <==建立所需要的目录
[root @test root]# chmod 755 -R /home/nfs <==修改较为严格的档案权限
将目录与档案设定成只读!不能写入的状态,会更保险一点!
3. /home/upload
[root @test root]# groupadd -g 210 nfs-upload <==先建立所需要的 210 这个群组
[root @test root]# useradd -g 210 -u 210 -M nfs-upload <==建立需要的使用者名称
[root @test root]# mkdir -p /home/upload <==建立起目录了!
[root @test root]# chown -R nfs-upload:nfs-upload /home/upload <==修改拥有者!
如此,则使用者与目录的权限都设定妥当啰!
4. /home/zjz
[root @test root]# ll /home
drwx------ 3 zjz zjz 4096 Oct 28 13:37 zjz
这样子一来,权限的问题大概就可以解决啰!
* 启动 portmap 与 nfs 服务:
[root @test root]# /etc/rc.d/init.d/portmap start
[root @test root]# /etc/rc.d/init.d/nfs start
* 在 192.168.0.50 这部机器上面演练一下:
1. 确认可用目录
[andy @linux50 andy]$ showmount -e 192.168.0.100
Export list for 192.168.0.100:
/tmp 192.168.0.*
/home/nfs (everyone)
/home/upload 192.168.0.*
/home/zjz 192.168.0.50
2. 建立挂载点:
[andy @linux50 andy]$ mkdir -p /home/zzz/tmp
[andy @linux50 andy]$ mkdir -p /home/zzz/nfs
[andy @linux50 andy]$ mkdir -p /home/zzz/upload
[andy @linux50 andy]$ mkdir -p /home/zzz/zjz
3. 实际挂载:
[andy @linux50 andy]$ su <==通常 Linux 只允许 root 来挂载!
[root @linux50 andy]# mount -t nfs 192.168.0.100:/tmp /home/zzz/tmp
[root @linux50 andy]# mount -t nfs 192.168.0.100:/home/nfs /home/zzz/nfs
[root @linux50 andy]# mount -t nfs 192.168.0.100:/home/upload /home/zzz/upload
[root @linux50 andy]# mount -t nfs 192.168.0.100:/home/andy /home/zzz/zjz
整个步骤大致上就是这样,好好练习吧!