NFS:Network File System
使用NFS需要啟用RPC(remoteprocedure call),RPC可以指定每個NFS功能所對應的端口號,重啟RPC后,RPC所管理的所有NFS功能服務都需重新向RPC注冊。
設置NFS需要安裝nfs-utils和portmap程序,使用rpm –q可以查看是否安裝。
-
nfs-utils:提供rpc.nfsd和rpc.mountd兩個daemon與其他document說明文件。
-
rpc.nfsd:管理client是否能夠登入主機,及對登入者ID的辨別。
-
rpc.mountd:管理NFS文件系統,讀取/etc/exports對比client取得相應的權限。
-
portmap:端口映射;在啟動rpc之前做好端口映射工作。
NFS的配置文件:
-
/etc/exports:NFS配置文件
-
/var/lib/nfs/*tab:NFS服務器日志放置路徑;etab記錄共享出來的目錄完整權限設置值;xtab記錄曾經連接到此NFS主機的相關客戶端數據
NFS的兩個命令:
-
/usr/sbin/exportfs:維護NFS共享資源;重新共享/etc/exports變更目錄或將NFS server共享目錄卸載或重新共享
-
/usr/sbin/showmount:在客戶端查看NFS服務器共享出來的目錄資源
/etc/exports配置文件
/etc/exports配置文件說明
格式:
<輸出目錄> [ 客戶端1 選項(訪問權限,用戶映射,其他)] [客戶端2 選項(訪問權限,用戶映射,其他)]
共享目錄必須使用絕對路徑,權限部分依照不同的權限共享給不同的主機,括號內是設置權限參數的位置,權限不止一個時,使用 , 隔開,主機名和括號連在一起。
主機名設置可以使用網段:192.168.1.0/24或完整IP:192.168.1.23;也可以使用主機名稱,但此主機名稱需要存在於/etc/hosts中或使用DNS可以找到,找到IP即可,主機名支持通配符,如*?
/mnt/sda4/share/images 192.168.23.129(rw)
# 設置共享目錄/mnt/sda4/share/images,僅192.168.23.129主機允許訪問此共享目錄,具有讀寫權限
/mnt/sda4/share/data 192.168.23.129(rw) *(ro)
# 設置共享目錄/mnt/sda4/share/data,192.168.23.129可以讀寫該共享目錄,其他主機只可以讀取該共享目錄
/mnt/sda4/share/icon 192.168.23.129(no_root_squash)
# 設置共享目錄/mnt/sda4/share/icon,僅192.168.23.129可以訪問和讀寫,root登錄時擁有root權限
/mnt/sda4/share/ds 192.168.23.0/24(rw)
# 設置共享目錄/mnt/sda4/share/ds,僅有192.168.23.0/24網段的主機才可訪問和讀寫此目錄文件
/mnt/sda4/share/diaos *(rw,all_squash,anonuid=500,anongid=500)
# 設置共享目錄/mnt/sda4/share/diaos,所有主機都允許訪問此共享目錄,具有讀寫權限,但他們訪問該共享目錄時,已將其UID、GID設置成500。NFS server主機中UID、GID=500的權限已經設置好
權限參數說明:
- Rw:read-write可讀寫的權限
- Ro:read-only只讀權限
- no_root_squash:登入nfs主機使用共享目錄的用戶,如果是用戶root,對於此共享目錄具有root權限,不建議使用。
- root_squash:登入nfs主機使用共享目錄的用戶,如果是用戶root,此用戶權限將被壓縮為匿名用戶,其UID和GID都會被壓縮為nobody(nfsnobody)系統賬號的身份。
- all_squash:共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。
- no_all_squash 保留共享文件的UID和GID(默認)。
- anonuid:xxx;指定nfs服務器/etc/passwd文件中匿名用戶的UID。
- anongid:xxx;指定nfs服務器/etc/passwd文件中匿名用戶的GID。
- sync:數據同步寫入到內存與硬盤中。
- async:數據先暫存於內存中,而非直接寫入硬盤。
- secure:限制客戶端只能從小於1024的tcp/ip端口連接nfs服務器(默認設置)。
- insecure:允許客戶端從大於1024的tcp/ip端口連接服務器。
- wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置)。
- no_wdelay:若有寫操作則立即執行,與sync配合使用。
- hide:在NFS共享目錄中不共享其子目錄。
- no_hide:共享NFS目錄的子目錄。
- subtree_check:如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)。
- no_subtree_check:和上面相對,不檢查父目錄權限。
- subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置)。
- no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率。
權限說明:
1.NFS server和NFS client具有相同的UID和賬號
如果NFS server和NFS client具有相同共享文件賬號和相同UID,客戶端登入NFS server時,就會擁有/etc/exports設置的權限
2.NFS server和NFS client具有不同的賬號
如果NFS client不擁有NFS server共享文件賬號,或NFS client的賬號在NFS server不存在,是否可以讀寫共享目錄,需要查看NFS server的權限而定,其身份會變為匿名用戶nobody
3.NFS client的身份為root
默認情況下,客戶端的root身份會被壓縮成匿名用戶nobody
一、服務器端配置
創建共享目錄
mkdir /home/share # 創建分享目錄
chown nobody.nogroup /home/share # 修改分享目錄權限
chmod 777 /home/share
創建或修改/etc/exports配置文件
vim /etc/exports
cat /etc/exports
# /home/share 192.168.102.15(rw,sync) *(ro)
# 配置說明: 對192.168.102.15賦予讀寫權限,其他機器僅有只讀權限。
# 重啟portmap和nfs服務
service portmap restart
service nfs restart
exportfs
重新修改 /etc/exports,執行 exportfs [-aruv] 命令
語法:exportfs [-aruv]
參數說明:
- -a :全部掛載(或卸除) /etc/exports 檔案內的設定
- -r :重新掛載 /etc/exports 里面的設定,此外,亦同步更新 /etc/exports 及/var/lib/nfs/xtab 的內容!
- -u :卸除某一目錄
- -v :在 export 的時候,將分享的目錄顯示到屏幕上!
服務器端使用showmount命令查詢nfs的共享狀態
showmount -e # 默認查看自己共享的服務,前提是要DNS能解析自己,不然容易報錯
showmount -a # 顯示已經與客戶端連接上的目錄信息
Iptables 防火牆
-A INPUT -p tcp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m multiport --dport 111,2049,4001,32764:32767 -j ACCEPT
啟動NFS
# 啟動nfs服務器
# service portmap start
# service nfs start
# 查詢nfs服務器狀態
# service portmap status
# service nfs status
# 停止nfs服務器
# 停止nfs運行時,需要先停止nfs服務再停止portmap服務,對於系統中有其他服務(如NIS)需要使用時,不需要停止portmap服務
# service nfs stop
# service portmap stop
/etc/init.d/portmap start # 啟動RPC進程,為NFS提供端口
/etc/init.d/nfs start
/etc/init.d/nfslock start # 來控制文件一致性
# 設置nfs服務器的自動啟動狀態
chkconfig --list portmap
chkconfig --list nfs
# 設置portmap和nfs服務在系統運行級別3和5自動啟動。
chkconfig --level 35 portmap on
chkconfig --level 35 nfs on
啟動自動掛載nfs文件系統
格式:
<server>:</remote/export> </local/directory> nfs < options> 0 0
# 修改 /etc/fstab 文件
vim /etc/fstab
二、客戶端配置
/etc/init.d/portmap start # 開啟客戶端的RPC
/etc/init.d/nfslock start # 開啟客戶端的nfslock(與服務器端對應)
# showmount –e nfs服務器IP
showmount –e 192.168.23.128[S2] # 檢查一下RPC是否開啟
# nfs掛載 格式:mount nfs服務器IP:共享目錄 本地掛載點目錄
mkdir -p /mnt/share/client/images # 創建掛載目錄
mount -t nfs 192.168.23.128:/mnt/sda4/share/b /mnt/share/client/images # 設置共享掛載點
mount | grep nfs
# 設置成開機啟動掛載
# 修改/etc/fstab文件
vim /etc/fstab
# 192.168.23.128:/mnt/sda4/share/images /mnt/share/client/images nfs defaults,rw 0 0
# 可以使用autofs設置客戶端需要時自動掛載,不需要時若干分鍾后自動卸載,還可在/etc/fstab或客戶端手動掛載時設置一些參數,方便客戶端使用。