簡介:
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,如需轉載請自行聯系原作者