- 论坛徽章:
- 0
|
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 |
|