天天看點

内網快速共享之---網絡檔案系統NFS

簡介:

NFS:network file systerm,即網絡檔案系統

網絡檔案系統是FreeBSD支援的檔案系統的一種,NFS允許一個系統在網絡上與他人共享目錄和檔案。

NFS 有屬于自己的協定與使用的端口号,但是在資料傳送或者其它相關訊息傳遞的時候, NFS 使用的則是一個稱為遠端過程調用( Remote Procedure Call, RPC )的協定來協助 NFS 本身的運作!

NFS于RPC之間的關系可以簡單的了解為:NFS主要在管理分享出來的目錄,而至于資料的傳遞,就直接将其交送給RPC協定去運作了。

RPC服務:監聽在TCP/UDP協定的111号端口

NFS協定具有很多版本:

在NFSv3中添加了kerberos協定(kerberos:加密帳号資訊,使認證過程安全)

V4相對V3的改進:

1:改進了INTERNET上的存取和執行效能

2:在協定中增強了安全方面的特性

3:增強的跨平台特性

NFS運作機制:

NFS運作時需要調用五個背景程序:

nfsd

rpc.quotad對nfs檔案系統啟動配額功能

rpc.nfsd管理clinet是否有權限登入,以及判别登入者的uid等;

rpc.mountd讀取/etc/exports的權限,對檔案通路權限進行控制;

rpc.lockd檔案的互斥鎖,保證檔案在同一時間隻有一個人通路,需要nfslockd服務;

rpc.statd檢查檔案的一緻性,需要nfslockd服務。

由于NFS的功能日益完善,逐漸被引進了Linux的核心,也就是說,NFS其實是核心中的一個功能,隻要我們核心啟用了該項,那麼我們就可以使用NFS,但是要配置該功能,就需要一個應用接口,也就是需要安裝一個使用者空間一個工具,而這個工具就是nfs-utils,需要安裝這樣一個

NFS控制權限機制:

在Linux的檔案都有各自的權限,以及屬主和屬組,當NFS伺服器上某個使用者共享了一個檔案,當用戶端挂載了該檔案,放用戶端上的使用者來通路該檔案時其權限應該參考其UID号,這是由于NFS并不認證使用者,指認證UID,當用戶端通路共享檔案時,如果其UID恰好等于伺服器端共享該檔案的使用者的UID,那麼其權限就是屬主的權限

但是其最終權限取決于檔案系統權限和共享權限交集

即:當使用者共享權限是:ro

檔案系統權限是:rw

即使用戶端的使用者被識别為屬主,但是由于最終權限的規則,其權限并不是rw,而是ro

另外一種特殊情況:當伺服器端root共享了檔案系統,當用戶端上的root挂載了該檔案系統,由于NFS隻映射UID,是以其被識别為本機的root,那樣用戶端上的root被識别在伺服器上的root,那樣就在伺服器端沒有任何限制,那樣是十分危險的,是以共享檔案時一定不能使用root使用者的身份去共享檔案

而正是由于這種特殊情況,NFS引入了一種共享屬性:no_root_squash,即當用戶端的root來進行共享使用伺服器端root共享的檔案時,則會被認為是nobody使用者,其權限十分的少。

NFS配置:

NFS監聽在TCP/UDP的2049端口

無論在伺服器端還是用戶端都需要安裝:nfs-utils這個rpm包

啟動服務:

#service nfs start

配置檔案:

/etc/exports

格式:FILESYSTEM    Clientlist(共享屬性) Clientlist(共享屬性) 

共享屬性:

ro:隻讀

rw:讀寫

async:異步寫入

sync:同步寫入

root_squash:将root使用者映射為nobody

no_root_squash:不将root使用者映射為nobody

all_squash:所有的使用者都映射為nobody

用戶端清單格式:

1.單個主機:FQDN或者IP

2.通配符,如:*.example.com

3.IP的網絡位址

例如:

/vhosts  172.16.4.10/16(rw)      對172.16.4.10以讀寫權限共享/vhosts 

'/a b' 172.16.4.10/255.255.0.0(rw)        對172.16.4.10以讀寫權限共享/a b 

/vhosts  *.coolinuz.com(ro)        對coolinuz.com域内以隻讀方式共享/vhosts 

注:如果共享的檔案系統名中有空格,則需要将其用''引起來。

重讀配置檔案:

exportfs

    -a:所有

    -r:重新導出所有的

    -u:關閉某個共享的檔案系統

    -v:顯示詳細資訊

#exportfs -rv

#exportfs -arv

#exportfs -u 172.16.0.0/16:/mydata

showmount:用于檢視主機上的共享

    -e:檢視共享的内容

    -a:檢視伺服器已經被挂載的檔案系統

    -d:顯示主機上被共享的曾經被挂載的檔案系統

#showmount -e 172.16.4.1

#showmount -a 172.16.4.1

#showmount -d 172.16.4.1

用戶端挂載:

#mount -t nfs 172.16.4.1:/vhosts /mnt/nfs

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/821732,如需轉載請自行聯系原作者

繼續閱讀