NFS,是Network File System的簡寫,即網路檔案系統。網路檔案系統是FreeBSD支援的檔案系統中的一種,也被稱為NFS. NFS允許一個系統在網路上與他人共用目錄和檔案。通過使用NFS,使用者和程式可以像訪問本地檔案一樣訪問遠端系統上的檔案。
NFS基於 RPC協議,NFS本身只是起到共用的作用而和用戶端進行串連和資料轉送則是RPC協議的功能
NFS主要通過兩個daemon 來進行控制:
1.rpc.nfsd ------- 它用來控制用戶端是否可以串連到,NFS server
2.rpc.mountd----它用來控制用戶端串連後是否有許可權對檔案進行操作,主要是依據/etc/exports檔案的設定
啟用NFS需要啟用portmap 和nfs-utils
1.portmap主要用來控制用戶端串連時請求的連接埠
2.nfs-utils 是rpc.nfsd、rpc.mountd 的執行檔案
/etc/exports NFS服務的主要設定檔
/usr/sbin/exportfs NFS服務的管理命令
/usr/sbin/showmount 用戶端的查看命令
/var/lib/nfs/xtab 記錄曾經登入過的客戶資訊
/etc/exports檔案設定格式
【分享的目錄】 ip或者主機(參數1.參數2) ip或者主機(參數3,參數4)
參數主要有以下幾個
rw:讀寫
ro:唯讀
no_root_squash:用戶端登陸者如果為root,則登入共用目錄後具有root許可權
root_squash:root登入後身份被壓縮為nfsnobody(預設情況下)
all_squash:所有使用者登入後身份被壓縮為nfsnobody(預設下)
anonuid:如不想讓使用者登入後被壓縮為nfsnobody使用者可以更改此項
anongid:同上(這個是組)
sync:資料同步寫入硬碟
async:資料先儲存到記憶體
關於許可權的分析
1.用戶端串連時候,對普通使用者的檢查,NO.1如果明確設定了普通使用者被壓縮的身份,那麼此時用戶端使用者的身份轉換為指定使用者,NO.2如果NFS server上面有同名使用者,那麼此時用戶端登入賬戶的身份轉換為NFS server上面的同名使用者,NO.3如果沒有明確指定,也沒有同名使用者,那麼此時 使用者身份被壓縮成nfsnobody
2.用戶端串連的時候,對root的檢查,NO.1如果設定no_root_squash,那麼此時root使用者的身份被壓縮為NFS server上面的root,NO.2如果設定了all_squash、anonuid、anongid,此時root 身份被壓縮為指定使用者,NO.3如果沒有明確指定,此時root使用者被壓縮為nfsnobody,NO.4如果同時指定no_root_squash與all_squash 使用者將被壓縮為 nfsnobody,如果設定了anonuid、anongid將被壓縮到所指定的使用者與組
啟動服務
service portmap start or /etc/rc.d/init.d/portmap start
service nfs start or /etc/rc.d/init.d/nfs start
exportfs 命令用法
-a 全部掛載或卸載
-r 重新讀取/etc/exports 中的資訊 ,並同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸載單一目錄(和-a一起使用為卸載所有/etc/exports檔案中的目錄)
-v 在螢幕輸出詳細資料
showmount 命令用法
-a 顯示已經於用戶端串連上的目錄資訊
-e IP或者hostname 顯示此IP地址分享出來的目錄
利用netstat可以查看出nfs服務開啟了很多連接埠其中nfs開啟的是2049 portmap 開啟的是 111,其餘則是rpc開啟的
利用rpcinfo -p 可以查看出RPC開啟的連接埠所提供的程式有哪些
使用mount -t nfs ip(hostname):共用目錄 掛載點 方式,可以完成掛載
最後注意兩點,雖然通過使用權限設定可以讓普通使用者訪問,但是掛載的時候只預設情況下只有root可以去掛載(普通使用者可以執行sudo)
NFS server 關機的時候一點要確保NFS服務關閉,沒有用戶端處於串連狀態!!通過showmount -a 可以查看,如果有的話用kill killall pkill 來結束,(-9 強制結束)