- 論壇徽章:
- 0
|
NFS介紹
NFS是由SUN公司發(fā)展,并于1984年推出的技術(shù)。NFS是一個RPC服務,它使我們能夠達到文件的共享,它的設計是為了在不同的系統(tǒng)間使用,所以它的通訊協(xié)議設計與主機及操作系統(tǒng)無關(guān).當使用者想用遠端文件時只
要用"mount"就可把remote文件系統(tǒng)掛接在自己的文件系統(tǒng)之下,使得遠端的文件使用上和本機上的文件沒有兩樣。
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目錄,就是一個檔也是可以的.在掛接之后我們只能對文件做讀或?qū)懙膭幼,而不能在遠程機上把此檔或目錄move或刪除掉,但須注意的是如果我們mount /usr后 ,就不能再mount /usr底下的目錄,否則會發(fā)生錯誤。
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 這一個文件是否 存在,并且賦予正確的權(quán)限給所有輸出出去的文件及文件結(jié)構(gòu)(目錄)。
但須注意的是,只有server所輸出出去的路徑,NFS客戶才能夠mount,同樣的當啟動client時,系統(tǒng)會自動去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服務器及客戶的有關(guān)細節(jié)請大家參閱相關(guān)的聯(lián)機幫助。下面我們來看看NFS是如何工作的。當我們啟動 NFS file server時,/etc/rc.local會自動啟動exportfs這 一程序,指定可以export的文件或目錄,而我們所能mount的也只能是其所指定的目錄。
NFS 架設在 XDR/RPC的協(xié)定之上
XDR : (eXternal Data Representation) 外部數(shù)據(jù)表示法
XDR(eXternal Data Representation) 提供一種方法把數(shù)據(jù)從一種格式轉(zhuǎn)換成另一種標準數(shù)據(jù)格式表示法,確保在不同的電腦,操作系統(tǒng)及電腦語言中,所有數(shù)據(jù)代表的意義都是相同的。
RPC : (Remote Procedure Calls) 遠端程序調(diào)用
NFS 如何運用 RPC 傳送數(shù)據(jù)
![]()
client 送出信息,請求服務
client stub把client 送出的參數(shù)轉(zhuǎn)換成XDR---標準數(shù)據(jù)格式并用系統(tǒng)調(diào)用把信息送到網(wǎng)絡上
信息經(jīng)過網(wǎng)絡送達遠端主機系統(tǒng)
遠端主機將接受到的信息傳給server stub
把XDR形式的數(shù)據(jù),轉(zhuǎn)換成符合主機端的格式,取出client發(fā)出的服務請求參數(shù),送給server
其它的就不解釋了,就是上面過程的反過程了。
rc.local 啟動守護程序
一個NFS server 要 inet ,portmap ,nfs ,mount 此四個守護程序,保持在后臺執(zhí)行的狀態(tài)下才能運作。當啟動 NFS file server 時,/etc/rc.local script會做如下的動作:
執(zhí)行exportfs ,讀取server's /etc/exports 告訴kernel所要輸出的file hierarchies 和存取權(quán)限
啟動 rpc.mountd daemon和 nfsd daemon
當啟動 NFS client時rc.local會做如下的動作:
啟動 boid daemons 處理讀寫的程序
執(zhí)行 mount -vat nfs 讀取client's /etc/fstab 并且 mount 所有屬于NFS類型的文件
NFS daemons (守護程序) 的作用
nfsd,biod,rpc.mountd,inetd,portmap都可在/usr/etc下找到
nfsd : 依client 對文件系統(tǒng)的需求情況,而啟動以處理client的需求。
biod : 此指令是在NFS client上用的 ,用來啟動同步塊I/O守護進程,用來建立buffer cache ,處理在client上的讀寫 mountd : mountd 是一臺RPC服務器,啟動rpc.mountd daemon后它會讀取/etc/xtab 查看哪一臺client正在mount哪一個文件系統(tǒng),并回應client所要mount的路徑
inetd : inetd (Internet services daemon),當系統(tǒng)啟動時,rc.local會啟動inetd讀取 inetd.conf這一個配置文件讀取網(wǎng)絡上所有的服務器地址,連結(jié)啟動inetd.conf中所有的server,當client請求服務時,inetd 就會為clinet啟動相關(guān)的server daemon負責進行服務。
portmap : portmap是一臺server,主要功能是轉(zhuǎn)換 TCP/IP通訊協(xié)議的端口號為RPC程序號
NFS的網(wǎng)絡安全
NFS 使server上的文件能被client所取用,乍看之下好像server上的文件任何人都可取用沒什么保護性,其實不是如此。一開始server要exportfs之前在/etc/exporrc中就已經(jīng)設定了文件的使用權(quán)限,像
/usr/src -access=engineering:accounting
就是限定只有 rcgineering 和 accounting 這兩臺 client 才能 mount /usr/src
/usr/src -access=oak,root=oak
這是說只有 oak 這臺 cilent 能 mount這一個路徑 且只有oak的superuser才能行使read & write的權(quán)力。另外管理者為了維護 exported 和 mounted 的安全,一定要建立公共(public)和私人(secret)的密碼,然而這些安全性問題是要建立在NIS(network infomation system)上的,有一個/etc/publicke文件里面記錄了公共和私有密碼,而這些密碼是依照machine_name和user_name,以16進位碼表示出來的,管理者可在有NIS的機器上用newkey -u username 給予user login 權(quán)力 newkey -h hostname 造出login 此機器時所需的password在NFS剛安裝時 user 是 "nobody" 任何人都可以進入,所以管理者一定要做修改,以保護數(shù)據(jù)的安全。當使用者為nobody 時publickey 的內(nèi)容為:
netname user's public key : user's secret key
nobody 3d91f44568fbbefada5a7:7675cd9b8753b5db09dabf12
在管理者給予user權(quán)力之后,user 就可使用 chkey 修改自己的secret key 創(chuàng)造自己的帳號入口。
willow% chkey
Generating new key for username
password :
Sending key change request to server ...
Done.
willow%
所設定的password 是使用者位于NIS中的加密鍵 ,當我們登錄時,NIS就會將此密碼解開,存放到keyserv里加以保管,再將加密鍵傳給client,當client發(fā)出請求時,此鍵會附在每個NFS請求上一起送到 NFS server上,當加密鍵和server上所保存的keyserv核對無錯后,請求就會被接受。
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u2/81761/showart_1285763.html |
|