︿
Top

1、前言

簡言之 NFS 就是 Unix-Like 作業系統之間的網路芳鄰,本篇將在 SELinux 安全機制及 IPTables 防火牆開啟的環境下實作,關於 NFS 檔案分享伺服器內容及更詳細設定參數可以參考官方文件 RedHat - Storage Administration Guide - Chapter 12. Network File System (NFS)




文章目錄

1、前言
2、實作環境
3、NFS Server 所需要啟動的服務
4、安裝 NFS 檔案分享套件
5、設定 IPTables 防火牆規則
6、修改 NFS 設定檔
7、修改 SELinux 設定值
8、啟動 NFS 服務
9、NFS Client 掛載分享資源

2、實作環境

  • OS: CentOS 6.0 (32 bit)
  • NFS 套件資訊: rpcbind-0.2.0-8.el6.i686、nfs-utils-1.2.2-7.el6.i686
  • NFS 設定檔: /etc/exports、/etc/sysconfig/nfs
  • IPTables 防火牆: TCP/UDP 協定 Port 111、2049、40001 ~ 40004
  • SELinux 權限: var_lib_nfs_t、domain_kernel_load_modules=1

3、NFS Server 所需要啟動的服務

  • rpcbind: NFS Server 用於讓 NFS Client 能正確 「找到」 NFS Server 的服務 Port,以便進一步溝通(舊版 CentOS 5.x 稱之為 Portmap)。
  • nfsd: NFS Server 用於「接收」 NFS Client 所傳送過來讀寫檔案資源的需求,再將請求傳遞給 mountd 執行序處理。
  • mountd: NFS Server 實際用於 「處理」 NFS Client 對於讀寫檔案資源的動作。

了解 NFS Server 及 NFS Client 所需服務以及開啟 Port 號:


4、安裝 NFS 檔案分享套件

請使用 yum 指令搭配 NFS 套件名稱 rpcbind、nfs-utils 即可進行套件安裝。
#yum -y install rpcbind nfs-utils  //安裝 NFS 套件(預設已安裝)
#rpm -qa rpcbind nfs-utils          //查詢 NFS 套件版本
  rpcbind-0.2.0-8.el6.i686
  nfs-utils-1.2.2-7.el6.i686
#rpm -ql rpcbind nfs-utils          //查詢 NFS 相關檔案路徑
  /etc/rc.d/init.d/rpcbind
  /sbin/rpcbind
  /usr/sbin/rpcinfo
  /usr/share/doc/rpcbind-0.2.0
  ...略...  


5、設定 IPTables 防火牆規則

NFS 檔案分享服務屆時啟動時會 TCP/UDP 協定 Port 111、2049、50001 ~ 50004,因此我們必須修改 IPTables 防火牆規則以便等一下進行測試,請修改 IPTables 防火牆規則設定檔 「/etc/sysconfig/iptables」 加上允許相關 Port 號的規則,修改防火牆規則後請使用指令「service iptables restart」來重新啟動防火牆服務,以便防火牆規則套用生效,並且使用「service iptables status」指令來確定目前防火牆規則是否有允許相關 Port 號。
#vi /etc/sysconfig/iptables                             //修改防火牆規則(加入如下六行)
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 50001:50004 -j ACCEPT
  -A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
  -A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
  -A INPUT -m state --state NEW -m udp -p udp --dport 50001:50004 -j ACCEPT
#service iptables restart                               //重新啟動防火牆服務
#service iptables status | grep -E '111|2049|4000'  //查看防火牆規則是否套用生效
  5  ACCEPT  tcp  --  0.0.0.0/0   0.0.0.0/0   state NEW tcp dpt:111
  6  ACCEPT  tcp  --  0.0.0.0/0   0.0.0.0/0   state NEW tcp dpt:2049
  7  ACCEPT  tcp  --  0.0.0.0/0   0.0.0.0/0   state NEW tcp dpts:50001:50004
  8  ACCEPT  udp  --  0.0.0.0/0   0.0.0.0/0   state NEW udp dpt:111
  9  ACCEPT  udp  --  0.0.0.0/0   0.0.0.0/0   state NEW udp dpt:2049
  10 ACCEPT  udp  --  0.0.0.0/0   0.0.0.0/0   state NEW udp dpts:50001:50004
#chkconfig nfs on                                        //開機自動啟動 NFS 服務
#chkconfig rpcbind on                                   //開機自動啟動 Rpcbind 服務


6、修改 NFS 設定檔

接著修改 NFS 設定檔 「/etc/exports」,設定內容中分享 /home/nfs 資料夾同時僅允許 10.10.25.0/24 網段主機才能存取此分享資源,下列為修改內容:
#vi /etc/exports     //修改 NFS 設定檔
  /home/nfs   10.10.25.0/255.255.255.0(rw,no_root_squash)  

在預設情況下 mountd 這個執行序會使用 大於 1024 的隨機 Port 號,但這樣會影響我們 IPTables 防火牆的設定,因此我們修改 NFS 服務設定檔「/etc/sysconfig/nfs」把相關隨機 Port 號設定為固定 Port 號,也就是先前設定的 TCP/UDP 50001 ~ 50004 Port 號。
#vi /etc/sysconfig/nfs      //修改 NFS 服務設定檔(加入如下五行)
  RQUOTAD_PORT=50001
  LOCKD_TCPPORT=50002
  LOCKD_UDPPORT=50002
  MOUNTD_PORT=50003
  STATD_PORT=50004  


7、修改 SELinux 設定值

修改 SELinux 安全機制的設定值,因為將 NFS 分享目錄由預設的 「/var/lib/nfs」 修改至 「/home/nfs」,因此新的 /home/nfs 資料夾其 SELinux 安全機制的權限勢必與原來的 /var/lib/nfs 資料夾不同,若不進行修改的話屆時啟動 NFS 服務時便可能會因為 SELinux 權限問題造成無法啟動 NFS 服務的狀況。
#ls -dZ /var/lib/nfs /home/nfs
  drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 /home/nfs
  drwxr-xr-x. root root system_u:object_r:var_lib_nfs_t:s0 /var/lib/nfs  

接著透過「semanage fcontext -a -t」指令配合 SELinux 權限「var_lib_nfs_t」,指定「/home/nfs」資料夾設定此權限為「SELinux預設權限」,之後使用「restorecon -Rv」指令把 /home/nfs 相關資料夾還原至剛才設定的 SELinux 預設權限,若執行 semanage 指令發現系統中沒有此一指令請安裝 policycoreutils-python 套件即可(yum -y install policycoreutils-python)。
#semanage fcontext -a -t var_lib_nfs_t "/home/nfs(/.*)?"  //設定 SELinux 預設權限
#restorecon -Rv /home/nfs                                     //還原 SELinux 權限
#ls -dZ /var/lib/nfs /home/nfs                               //查看資料夾 SELinux 權限
  drwxr-xr-x. root root system_u:object_r:var_lib_nfs_t:s0 /home/nfs
  drwxr-xr-x. root root system_u:object_r:var_lib_nfs_t:s0 /var/lib/nfs  

最後則是要將相關的 SELinux 安全機制的布林值打開,將「domain_kernel_load_modules」設定為 1 啟動 NFS 服務才不會發生錯誤。
#setsebool -P domain_kernel_load_modules=1       //開啟 SELinux 安全機制的布林值
#getsebool -a |grep domain_kernel_load_modules  //查詢設定是否成功
  domain_kernel_load_modules --> on  


8、啟動 NFS 服務

完成修改 SELinux 安全機制權限設定後,我們可以放心啟動 NFS 相關服務,請使用指令「service nfs start、service rpcbind start」來啟動 NFS 服務,並且於服務啟動後使用「netstat」指令來查看系統是否開啟了相關 Port 號,以及使用「ps」指令來查看相關執行序是否運作。
#service rpcbind start                        //啟動 rpcbind 服務
#service nfs start                             //啟動 nfs 服務
#netstat -tunpl |grep -E '111|2049|4000'   //查看是否開啟相關 Port 號
  tcp   0   0 0.0.0.0:2049   0.0.0.0:*   LISTEN    -
  tcp   0   0 0.0.0.0:111    0.0.0.0:*   LISTEN    4825/rpcbind
  ...略...
#ps aux |grep -E 'rpcbind|nfsd|mountd'      //查看相關執行序
  rpc       4825  0.0  0.0   2516   872 ?        Ss   11:52   0:00 rpcbind
  root      4868  0.0  0.0      0     0 ?        S    11:52   0:00 [nfsd4]
  ...略...
#rpcinfo -p localhost                        //查看哪些執行序使用哪些 Port 號
  program vers proto   port  service
     100000    4   tcp    111  portmapper
     100000    3   tcp    111  portmapper
  ...略...
#showmount -e localhost                       //查看 NFS 分享資源
  Export list for localhost:
  /home/nfs 10.10.25.0/255.255.255.0  


9、NFS Client 掛載分享資源

NFS Client 先使用 showmount 指令確定可以找到 NFS Server 分享資源,之後使用 mount 指令掛載資源至本機的 /mnt 掛載點下,掛載成功後即可進行相關操作。
#showmount -e 10.10.25.115            //查看 NFS Server 分享資源
  Exports list on 10.10.25.115:
  /home/nfs                          10.10.25.0/255.255.255.0
#mount 10.10.25.115:/home/nfs /mnt   //掛載資源
#df -h | grep mnt
  10.10.25.115:/home/nfs    7.4G    2.3G    4.8G    32%    /mnt  //掛載成功  

此時在 NFS Server 可以看到誰正在使用分享資源。
#showmount -a localhost
  All mount points on localhost:
  10.10.25.245:/home/nfs     //此 IP 正掛載分享資源  

最後 NFS Client 不使用分享資源時即可使用指令 umount 來卸載 NFS Server 分享資源。
#umount /mnt  
文章標籤: