Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189667
  • 博文数量: 18
  • 博客积分: 2713
  • 博客等级: 少校
  • 技术积分: 546
  • 用 户 组: 普通用户
  • 注册时间: 2007-04-20 22:29
个人简介

记录学习与生活的点滴…

文章分类

全部博文(18)

文章存档

2013年(2)

2012年(2)

2011年(6)

2009年(1)

2008年(7)

我的朋友

分类: LINUX

2008-05-04 09:48:38

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
 

整个步骤大致上就是这样,好好练习吧!
阅读(1266) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~