NFS Server的建設(shè)和使用
NFS Server是我們?cè)诰W(wǎng)絡(luò)上面管理文件方面的一類協(xié)議。那么對(duì)于這類協(xié)議的使用,我們需要了解在服務(wù)器建設(shè)和管理當(dāng)中需要注意的問(wèn)題。首先讓我們看一下NFS Server端的設(shè)定吧。
NFS Server端的設(shè)定
NFS Server端的設(shè)定,首先需要確認(rèn)Linux主機(jī)是否可以支持NFS這項(xiàng)服務(wù),然后再設(shè)定使用者的來(lái)源IP或主機(jī)名稱以及共享出去的目錄權(quán)限.
那么,在Client PC怎么使用這個(gè)共享出來(lái)的目錄呢?首先以showmount檢查L(zhǎng)inux Server是否有可以使用的 NFS目錄.如果有就將它mount在本機(jī)上面,這樣就可以使用NFS Server主機(jī)提供的資源了.
1.系統(tǒng)要求
除了前面已經(jīng)提到的兩個(gè)系統(tǒng)守護(hù)進(jìn)程portmap與nfs-utils之外,內(nèi)核(Kernel)版本***高于2.2.18.此外,如果重新編譯過(guò)內(nèi)核,一定要選擇支持NFS.
2.etc/exports
編輯 /etc/exports文件:
- # vi /etc/exports
- /usr/src/sys -maproot=daemon host2
- /usr/ports -ro -network 192.168.1.0
從上面這個(gè)例子中可以看出exports文件的格式,首先是定義要共享的文件目錄,必須使用絕對(duì)路徑,而不能使用符號(hào)連接.后面就是對(duì)這個(gè)目錄進(jìn)行訪問(wèn)限 制的參數(shù),用于保證安全性.***行設(shè)置中,將/usr/sys/src目錄共享出去,但限制客戶機(jī)上的root用戶等價(jià)于本機(jī)上的daemon用戶,以避 免客戶機(jī)上的root用戶擁有這個(gè)服務(wù)器上的root權(quán)力進(jìn)行非法操作;此后的host2參數(shù)是主機(jī)名,這就限制只有host2才能共享這個(gè) /usr/sys/src目錄;第三行設(shè)置共享了/usr/ports目錄,但限制為只允許讀取,并且也只有192.168.1.0網(wǎng)絡(luò)上的計(jì)算機(jī)才能訪 問(wèn)這個(gè)共享目錄.
◆ rw 可擦寫(xiě)的權(quán)限.
◆ ro 只讀的權(quán)限.
◆ no_root_squash 當(dāng)?shù)侨隢FS主機(jī)使用共享之目錄的使用者如果是root時(shí),那么這個(gè)使用者的權(quán)限將被轉(zhuǎn)換成為匿名使用者,通常它的UID與GID都會(huì)變成nobody身份.
◆ root_squash 登入NFS主機(jī)使用共享目錄的使用者,如果是root,那么對(duì)于這個(gè)共享的目錄來(lái)說(shuō),它就具有 root的權(quán)限.
◆ all_squash 不論登入NFS使用者的身份為何,它的身份都會(huì)被轉(zhuǎn)換成為匿名使用者,通常也就是nobody.
◆ anonuid 通常為nobody,當(dāng)然也可以自行設(shè)定這個(gè)UID的值,UID必須存在于/etc/passwd當(dāng)中.
◆ anongid 同anonuid,但是變成group ID就是了.
◆ sync 資料同步寫(xiě)入到內(nèi)存與硬盤(pán)當(dāng)中.
◆ async 資料會(huì)先暫存于內(nèi)存當(dāng)中,而非直接寫(xiě)入硬盤(pán).
3.激活服務(wù)portmap和nfsd
- #/etc/rc.d/init.d/portmap start (or:#service portmap start)
- #/etc/rc.d/init.d/nfs start (or:#service nfs start)
portmap激活之后,就會(huì)出現(xiàn)一個(gè)端口號(hào)為111的sunrpc的服務(wù).至于nfs則會(huì)激活至少兩個(gè)以上的系統(tǒng)守護(hù)進(jìn)程,然后就開(kāi)始監(jiān)聽(tīng)Client PC的需求,用cat/var/log/messages可以看到操作是否成功:
- #cat /var/log/messages
- Nov 16 15:04:45 cao portmap: portmap startup succeeded
- Nov 16 15:04:53 cao nfs: Starting NFS services: succeeded
- Nov 16 15:04:54 cao nfs: rpc.rquotad startup succeeded
- Nov 16 15:04:54 cao nfs: rpc.mountd startup succeeded
- Nov 16 15:04:54 cao nfs: rpc.nfsd startup succeeded
4.exportfs
如果修改了/etc/exports這個(gè)文件后,不需要重新激活nfs,只要重新掃瞄一次/etc/exports的文件,并且重新將設(shè)定加載即可:
- # exportfs [-aruv]
參數(shù)說(shuō)明:
- -a 全部掛載(或卸載) /etc/exports 文件內(nèi)的設(shè)定 .
- -r 重新掛載/etc/exports里的設(shè)定,此外,亦同步更新/etc/exports及/var/lib/nfs/xtab的內(nèi)容.
- -u 卸載某一目錄.
- -v 在export的時(shí)候,將共享的目錄顯示到屏幕上.
5.檢驗(yàn)?zāi)夸?var/lib/nfs/xtab
檢驗(yàn)所共享的目錄內(nèi)容,查看/var/lib/nfs/xtab這個(gè)文件:
# vi /var/lib/nfs/xtab
/home/cao 192.168.0.1(rw,sync,wdelay,hide,secure,root_squash,
no_all_squash,subtree_check,secure_locks, mapping=identity,anonuid=-2,
anongid=-2)
這就是/home/cao這個(gè)共享出去的目錄預(yù)設(shè)NFS里面的屬性.
6.showmount
- # showmount [-ae] hostname
參數(shù)說(shuō)明:
-a 在屏幕上顯示目前主機(jī)與Client所連上來(lái)的使用目錄狀態(tài) .
-e 顯示hostname這部機(jī)器的/etc/exports里面的共享目錄.
當(dāng)要掃瞄某一主機(jī)所提供的NFS共享的目錄時(shí),就使用showmount -e IP(或主機(jī)名稱hostname)即可.
7.觀察激活的端口號(hào)
- # netstat -utln
- Active Internet connections (only SERVERs)
- Proto Recv-Q Send-Q Local Address Foreign Address State
- tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN <== portmap
- tcp 0 0 0.0.0.0:817 0.0.0.0:* LISTEN <== rpc.xxxx
- tcp 0 0 0.0.0.0:1266 0.0.0.0:* LISTEN <== rpc.xxxx
- udp 0 0 0.0.0.0:2049 0.0.0.0:* <== nfs 的 port
- udp 0 0 0.0.0.0:814 0.0.0.0:* <== rpc.xxxx
- udp 0 0 0.0.0.0:1327 0.0.0.0:* <== rpc.xxxx
- udp 0 0 0.0.0.0:111 0.0.0.0:* <== portmap
nfs所開(kāi)啟的端口是2049,其它的端口是RPC Server其它程序(例如rpc.mountd、rpc.rquotad、rpc.nfsd... )隨機(jī)產(chǎn)生的,也就是端口號(hào)不會(huì)是固定的,每次restart nfs都會(huì)得到不一樣的端口號(hào).
8. 停止NFS服務(wù)
- # /etc/rc.d/init.d/portmap stop
#p#Client端PC的設(shè)定
1.掃瞄可以使用的NFS Server目錄
在Client本地端建立mount point,使用mount將遠(yuǎn)程主機(jī)共享的目錄掛載進(jìn)來(lái).假設(shè)主機(jī)名稱是www.cao.net,使用showmount查看NFS Server可以共享的目錄.然后將/home/public掛載在 /home/nfs/public下:
- # showmount -e www.cao.net
- Export list for localhost:
- /tmp *
- /home/linux *.cao.net
- /home/public (everyone)
- /home/cao 192.168.0.1
2.掛載/home/public目錄
首先建立這個(gè)目錄,然后再利用mount指令來(lái)掛載/home/public目錄:
- # mkdir -p /home/nfs/public
- # mount -t nfs CAO.linux.org:/home/public /home/nfs/public
掛載的格式:
- # mount -t nfs hostname(orIP):/directory/mount/point
- # df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/hda1 1904920 1235380 572776 68% /
- /dev/hdb1 976344 115212 810736 13% /backup
- www.cao.net:/home/public 1904920 1235376 572776 69% /home/nfs/public
將資料掛載進(jìn)來(lái)后,只要進(jìn)入/home/nfs/public目錄,就等于到了www.cao.net那部NFS Server的/home/public 目錄中.
3.卸載使用umount
- # umount /home/nfs/public
關(guān)機(jī)時(shí)如果NFS Server上面還有Client聯(lián)機(jī),建議NFS Server關(guān)機(jī)之前,要先關(guān)掉portmap與nfs這兩個(gè)系統(tǒng)服務(wù).如果無(wú)法正確地將這兩個(gè)系統(tǒng)服務(wù)關(guān)掉,那么先以netstat -utlp找出PID,然后使用kill殺掉進(jìn)程,這樣才能正常關(guān)機(jī).