NFS是sun公司開發的網絡檔案系統,可實作在異構網絡上共享和裝配遠端檔案系統。
NFS工作原理簡介
NFS并不是單獨存在的,它和另外2個子產品共同存在。包括NFS在内,這三個子產品分别是NFS,RPC,PORTMAP。
NFS隻負責将資料通過以檔案系統的方式共享出去,并進行登入管理和權限管理,并不負責資料的傳輸,而資料的傳輸則有RPC來完成。試想遠端用戶端在進行連結的時候需要知道哪個端口可用,以便将可用的端口用于NFS資料傳輸(NFS的資料傳輸方式有端口來完成),而負責維護可用端口與遠端主機的映射關系則是有PORTMAP的完成的。
RPC:遠端過程調用協定,RPC跨越了傳輸層和應用層
portmap程序的主要功能是把RPC程式号轉化為Internet的端口号。
portmap程序一般使用TCP/UDP的111端口
想要深入了解RPC:見http://blog.csdn.net/mindfloating/article/details/39474123
在Linux Kernel 2.6.32中,portmap已經被rpcbind代替了,仔細檢視安裝資訊就會發現,執行指令yum install portmap時安裝的就是rpcbind.
工作流程:
(1)用戶端向NFS伺服器送出RPC請求,并明确通路NFS服務,并告知其具體的讀寫操作。
(2)RPC查找端口映射表,并根據用戶端請求,傳回相應的結果。
(3)用戶端擷取指定的NFS伺服器端口後,将直接與NFS程序進行讀寫操作。
NFS伺服器配置
安裝
#yum install -y nfs*
伺服器配置
#man exports
#vim /etc/exports
/tmp/share 192.168.173.0/24(rw,sync,root_squash)
【NFS共享的常用參數】
- ro 隻讀通路
- rw 讀寫通路
- sync 同步寫入硬碟
- async 暫存記憶體
- secure NFS通過1024以下的安全TCP/IP端口發送
- insecure NFS通過1024以上的端口發送
- wdelay 多個使用者對共享目錄進行寫操作時,則按組寫入資料(預設)
- no_wdelay 多個使用者對共享目錄進行寫操作時,則立即寫入資料
- hide 不共享其子目錄
- no_hide 共享其子目錄
- subtree_check 強制NFS檢查父目錄的權限
- no_subtree_check 不檢查父目錄權限
- all_squash 任何通路者,都轉為 匿名yong
- root_squash root使用者通路此目錄, 映射成如anonymous使用者一樣的權限(預設)
- no_root_squash root使用者通路此目錄,具有root操作權限
- anonuid=xxx 指定NFS伺服器/etc/passwd檔案中匿名使用者的UID
- anongid=xxx 指定NFS伺服器/etc/passwd檔案中匿名使用者的GID
如果修改了/etc/exports檔案後不需要重新激活nfs,隻要重新掃描一次/etc/exports檔案,并且重新将設定加載即可:
#exportfs -rv
- -a:全部挂載(或解除安裝)/etc/exports檔案内的設定。
- -r:重新挂載/etc/exports中的設定,此外同步更新/etc/exports及/var/lib/nfs/xtab中的内容。
- -u:解除安裝某一目錄。
- -v:在export時将共享的目錄顯示在螢幕上。
重新開機NFS服務
#service nfs restart
#chkconfig nfs on
ps:/var/lib/nfs/etab裡面可以檢視每個目錄的分享權
NFS用戶端配置(Autofs)
伺服器分享目錄:/tmp/share
用戶端挂載目錄:/tmp/share
1.手動挂載
#mkdir /tmp/test
#mount -t nfs 192.168.173.140:/tmp/share /tmp/test
2.直接的自動挂載
mount是用來挂載檔案系統的,可以在系統啟動的時候挂載也可以在系統啟動後挂載。對于本地固定裝置,如硬碟可以使用mount挂載;而CD光牒、軟碟、NFS、SMB等檔案系統具有動态性,即需要的時候才有必要挂載。光驅和軟碟我們一般知道什麼時候需要挂載,但NFS和SMB共享等就不一定知道了,即我們一般不能及時知道NFS共享和SMB什麼時候可以挂載。而autofs服務就提供這種功能,好像windows中的光驅自動打開功能,能夠及時挂載動态加載的檔案系統。免去我們手動載在麻煩。要實作光驅,軟碟等的動态自動挂載,需要進行相關的配置。
autofs 能夠自動挂載解除安裝nfs和檔案系統,并且在空閑的時候能夠關閉nfs連接配接,降低系統負載。
#yum install -y autofs
#service autofs stop
首先修改全局的配置檔案
#vim /etc/auto.master
/- /etc/auto.nfs
#vim /etc/auto.nfs
#service autofs restart
這裡的/tmp/test,必須是存在的。
3.間接自動挂載
#yum install -y autofs
#service autofs stop
#vim /etc/auto.master
/tmp/share是要挂載的本地目錄,我們在向NFS伺服器發送請求信号時,一定要在這個目錄下面進行操作,否則是無效的。
/etc/auto.nfs: 是一個配置 NFS伺服器共享檔案的路徑,及本地在/mnt/nfs目錄中要與遠端共享檔案挂載的目錄及權限,在auto.nfs檔案中還要詳細說明。
–timeout=60:指NFS用戶端在多久沒有向NFS伺服器請求資料時斷開挂載連接配接。
#vim /etc/auto.nfs
#service autofs restart
server : 它是一個本地目錄,我們不需要建立它,用于挂載遠端共享檔案192.168.20.6:/public,在我們想要使用遠端共享檔案/public時,隻要在本地目錄/mnt/nfs下鍵入:cd server 系統就會自動挂載到遠端共享目錄:192.168.20.6:/public,我們就可以正常使用裡面的共享檔案了 ,在到達逾時時間時就會自動解除安裝。
NFS安全配置
1.iptables
NFS啟動時會随機啟動多個端口并向RPC注冊,這樣如果使用iptables對NFS端口進行限制就會有點麻煩,可以更改配置檔案固定NFS服務相關端口。
#rpcinfo –p #檢視本地rpc程序
#vim /etc/sysconfig/nfs #NFS相關端口的配置檔案
打開對應端口(也可以自己修改)
RQUOTAD_PORT=
LOCKD_TCPPORT=
LOCKD_UDPPORT=
MOUNTD_PORT=
STATD_PORT=
然後編寫iptables的規則
如:
#iptables -A INPUT -s 192.168.173.0/24 -p tcp –dport 111 -j ACCEPT
#iptables -A INPUT -s 192.168.1.173.0/24 -p udp –dport 111 -j ACCEPT
#iptables -A INPUT -s 192.168.1.173.0/24 -p tcp –dport 2049 -j ACCEPT
#iptables -A INPUT -s 192.168.1.173.0/24 -p udp –dport 2049 -j ACCEPT
儲存
#service iptables save
#service ipatbles restart
2.selinux
可根據需要自己打開,如:
#setsebool -P samba_share_nfs on