19.1 NFS概念
NFS(Networking File System)是由SUN公司发展,并於1984年推出。NFS是一个RPC service ,它使我们能够达到文件的共享,它的设计是为了在不同的系统间使用,所以它的通讯协定设计与主机及操作系统无关。当使用者想用远程文件时只要用"mount"就可把remote文件系统挂接在自己的文件系统之下,使得远程的文件使用上和local机器的文件没两样。
假如我们在机器A上,要把机器B上的目录/usr/man挂接到机器A的/usr/man只要用下面的命令:
#mount machine_name:/usr/man /usr/home
就可mount过来。而我们不只是可以mount目录,就是一个文件也是可以的。在挂接之後我们只能对文件做reading (or writing) 的动作,而不能在remote machie上把此文件或目录move,delete掉,但须注意的是如我们使用- mount /usr後,不能再mount /usr底下的目录,否则会发生错误。
NFS就是促使Servers上的文件能被其他的机器mount,而达到资源共享,享用这些文件的机器就可称为Client,一个client可以从server上mount一个文件或是一个层次的目录(file hierarchies)。然而事实上任何一台机器都可以做NFS server or NFS client ,甚至同时为NFS server and NFS client也可以。
19.2 配置网络文件NFS
server端的配置
Scoadmin -> Filesystem -> Filesystem Manager > Export -> NFS -> Add Export Configuration或 手工编辑/etc/exports文件来进行一些特殊的设置 clients端的配置
Scoadmin -> Filesystem -> Filesystem Manager
> Mount -> Add Mount Configuration -> Remote或 手工编辑/etc/default/filesys文件来进行设置
NFS是如何工作的?
当我们启动NFS file server时,系统会自动启动exportfs这一个应用程序,指定可以export的文件或目录,而我们所能mount的也只能是其所指定的目录。
NFS架设在XDR/RPC的协议之上。
XDR : (eXternal Data Representation) 外部资料表示法
XDR(eXternal Data Representation) 提供一种方法把资料从一种格式转换成另一种标准资料格式表示法,确保在不同的电脑,操作系统及电脑语言中,所有资料代表的意义都是相同的
RPC : (Remote Procedure Calls) 远程程序呼叫
RPC(Remote Procedure Calls) 远程程序呼叫, 请求远程电脑给予服务。 客户机(client)就会透过网络传送RPC到远程电脑,请求服务。
NFS daemons (守护应用程序) 的功用
mountd,nfsd,inetd , portmap ,pcnfsd ,biod,statd,lockd是这些守护程序。
详细见《网络管理教程P5-16 》
mountd:mountd是一台RPC server ,启动rpc.mountd daemon後 它会读取/etc/xtab查看哪一台client正在mount哪一个file system,并回应client所要mount的路径
nfsd:依client对文件系统的需求情况启动" file system request daemon "以应付client的需求,而一般file system request daemon的数目是" 8 ",这也就是我们写" nfsd 8 & "的原因了。
biod:此命令是在NFS client上用的, 用来启动" asynchronous block I/O daemon"用来建立buffer cache ,处理在client上的读写
inetd : inetd (Internet services daemon) , 当系统启动时rc。local会启动inetd读取inetd。conf这一个configuration-file ,读取网络上所有server's address , 连结启动inetd。conf中所有的server , 当client请求服务时, inetd就会为clinet启动相关的server daemon负责任务, 如user用telnet时 , 则- inetd启动telnetd迎合user telnet的需求,其馀像ftp ,finger , rlogin之类的应用应用程序 , inetd也都会启动相对应的aemons, ftpd, fingerd, rloingd
portmap : portmap是一台server ,主要功能 转换TCP/IP通讯协定的port number变成RPC program number , 因为这样clinet才能做RPC calls
一般RPC server是被inetd所启动的, 所以portmap必须在inetd之前启动, 否则无法做RPC call
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 client's superuser才能行使read & write的权力
另外管理者为了维护exported和mounted的安全,一定要建立公共(public)和私人(secret)的key(password), 然而这些安全性问题是要建立在NIS (network infomation system) 上的, 有一个/etc/publickey文件 ,里面记录了public and secret keys , 而这些key是依照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中的加密键, 当我们login时NIS就会将此密码解开,(因为publickey中是以16进位码记录) , 存放到keyserv里加以保管, 再将加密键传给client , 当client发出请求时 ,此键会附在每个NFS请求上一起送到NFS server上, 当加密键和server上所保存的keyserv核对无错後, 请求就会被接受
l When fail to mount server
1. 用rpcinfo -p server_name去查看此server是否存在
2. 用rpcinfo -u server_name mount查看mountd daemon是否有在server上执行
3. 假如server都没问题,检查server和client之间的Ethernet connetions
4. 在client上 用ps ax看portmap and several biod daemons running or not !
(rpcinfo : 用来对RPC server做RPC呼叫,回传远程程序呼叫过程中的讯息)
遇到NFS方面的问题时,可用Networking Guide ,"Configuring the Networking File
System","Troubleshooting NFS"