免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1181 | 回复: 0
打印 上一主题 下一主题

NFS [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-10 16:45 |只看该作者 |倒序浏览

NFS介绍
NFS是由SUN公司发展,并于1984年推出的技术。NFS是一个RPC服务,它使我们能够达到文件的共享,它的设计是为了在不同的系统间使用,所以它的通讯协议设计与主机及操作系统无关.当使用者想用远端文件时只
要用"mount"就可把remote文件系统挂接在自己的文件系统之下,使得远端的文件使用上和本机上的文件没有两样。
           machine  A                        machine  B
                /                               /
      bin     etc     usr               bin     etc      usr
                      man                          man     share     local
假如我们在机器A上,要把机器B上的 /usr/man 挂接到machine A 的/usr/man只要使用
mount machine_name:/usr/man /usr/home
就可mount过来.而我们不只是可以mount目录,就是一个档也是可以的.在挂接之后我们只能对文件做读或写的动作,而不能在远程机上把此档或目录move或删除掉,但须注意的是如果我们mount /usr后 ,就不能再mount /usr底下的目录,否则会发生错误。
Servers & Clients
NFS就是促使Servers上的文件能被其他的机器mount,而达到资源共享,享用这些文件的机器就可称为Client,一个client可以从server上mount一个文件或是一个层次的目录。然而事实上任何一台机器都可以做NFS服务器或客户,甚至同时为NFS服务器和客户。
Server输出和客户Mounting
NFS server 所export 出来的文件或目录都记录在 /etc/exports 这一个档中,当我们启动NFS server 时 在 /etc/rc.local 的这一个脚本会自动的启动exportfs 这一个程序,搜寻 /etc/exports 这一个文件是否 存在,并且赋予正确的权限给所有输出出去的文件及文件结构(目录)。
但须注意的是,只有server所输出出去的路径,NFS客户才能够mount,同样的当启动client时,系统会自动去mount所有server输出的路径,而mount到的所有路径都会记录在 /etc/fstab 下 ,类似如下的fstab档
/dev/sd0a  /      4.2 rw 1 1
/dev/sd0h  /tmp   4.2 rw 1 3
/dev/sd0g  /usr   4.2 rw 1 2
/dev/fd0   /pcfs  pcfs rw,noauto 0 0
sparc20:/swap /swap nfs rw,intr,bg,soft 0 0
sparc17:/home /home nfs rw,intr,bg,soft 0 0
sparc17:/home3 /home3 nfs rw,intr,bg,soft 0 0
sparc14:/home4 /home4 nfs rw,intr,bg,soft 0 0
sparc20:/home2 /home2 nfs rw,intr,bg,soft 0 0
sparc20:/var/spool/mail /var/spool/mail nfs rw,intr,bg,soft 0 0
rs970:/home1 /home1 nfs rw,intr,bg,soft 0 0
请注意:当客户mount到一个路径,绝对不是说复制服务器上的这一个路径到本地机上,我们可以用cd进入这一个mount到的路径,就如同是使用本地目录一样。
设置NFS服务器及客户的有关细节请大家参阅相关的联机帮助。下面我们来看看NFS是如何工作的。当我们启动 NFS file server时,/etc/rc.local会自动启动exportfs这 一程序,指定可以export的文件或目录,而我们所能mount的也只能是其所指定的目录。
NFS 架设在 XDR/RPC的协定之上
XDR : (eXternal Data Representation) 外部数据表示法
XDR(eXternal Data Representation) 提供一种方法把数据从一种格式转换成另一种标准数据格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有数据代表的意义都是相同的。
RPC : (Remote Procedure Calls) 远端程序调用
NFS 如何运用 RPC 传送数据


  • client 送出信息,请求服务

  • client stub把client 送出的参数转换成XDR---标准数据格式并用系统调用把信息送到网络上

  • 信息经过网络送达远端主机系统

  • 远端主机将接受到的信息传给server stub

  • 把XDR形式的数据,转换成符合主机端的格式,取出client发出的服务请求参数,送给server
    其它的就不解释了,就是上面过程的反过程了。
    rc.local 启动守护程序
    一个NFS server 要 inet ,portmap ,nfs ,mount 此四个守护程序,保持在后台执行的状态下才能运作。当启动 NFS file server 时,/etc/rc.local script会做如下的动作:


    • 执行exportfs ,读取server's /etc/exports 告诉kernel所要输出的file hierarchies 和存取权限

    • 启动 rpc.mountd daemon和 nfsd daemon

    当启动 NFS client时rc.local会做如下的动作:


    • 启动 boid daemons 处理读写的程序

    • 执行 mount -vat nfs 读取client's /etc/fstab 并且 mount 所有属于NFS类型的文件

    NFS daemons (守护程序) 的作用
    nfsd,biod,rpc.mountd,inetd,portmap都可在/usr/etc下找到


    • nfsd : 依client 对文件系统的需求情况,而启动以处理client的需求。

    • biod : 此指令是在NFS client上用的 ,用来启动同步块I/O守护进程,用来建立buffer cache ,处理在client上的读写 mountd : mountd 是一台RPC服务器,启动rpc.mountd daemon后它会读取/etc/xtab 查看哪一台client正在mount哪一个文件系统,并回应client所要mount的路径

    • inetd : inetd (Internet services daemon),当系统启动时,rc.local会启动inetd读取 inetd.conf这一个配置文件读取网络上所有的服务器地址,连结启动inetd.conf中所有的server,当client请求服务时,inetd 就会为clinet启动相关的server daemon负责进行服务。

    • portmap : portmap是一台server,主要功能是转换 TCP/IP通讯协议的端口号为RPC程序号

    NFS的网络安全
    NFS 使server上的文件能被client所取用,乍看之下好像server上的文件任何人都可取用没什么保护性,其实不是如此。一开始server要exportfs之前在/etc/exporrc中就已经设定了文件的使用权限,像
    /usr/src -access=engineering:accounting
    就是限定只有 rcgineering 和 accounting 这两台 client 才能 mount /usr/src
    /usr/src -access=oak,root=oak
    这是说只有 oak 这台 cilent 能 mount这一个路径 且只有oak的superuser才能行使read & write的权力。另外管理者为了维护 exported 和 mounted 的安全,一定要建立公共(public)和私人(secret)的密码,然而这些安全性问题是要建立在NIS(network infomation system)上的,有一个/etc/publicke文件里面记录了公共和私有密码,而这些密码是依照machine_name和user_name,以16进位码表示出来的,管理者可在有NIS的机器上用newkey -u username 给予user login 权力 newkey -h hostname 造出login 此机器时所需的password在NFS刚安装时 user 是 "nobody" 任何人都可以进入,所以管理者一定要做修改,以保护数据的安全。当使用者为nobody 时publickey 的内容为:
    netname   user's public key    : user's secret key
    nobody  3d91f44568fbbefada5a7:7675cd9b8753b5db09dabf12
    在管理者给予user权力之后,user 就可使用 chkey 修改自己的secret key 创造自己的帐号入口。
    willow% chkey
    Generating new key for username
    password  :
    Sending key change request to server ...
    Done.
    willow%
    所设定的password 是使用者位于NIS中的加密键 ,当我们登录时,NIS就会将此密码解开,存放到keyserv里加以保管,再将加密键传给client,当client发出请求时,此键会附在每个NFS请求上一起送到 NFS server上,当加密键和server上所保存的keyserv核对无错后,请求就会被接受。


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/81761/showart_1285763.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP