站長新書 站長開講 首頁 最新文章 站長著作及審校 FreeBSD 筆記 Linux 筆記 Windows 筆記 虛擬化筆記 網管人雜誌 遊山玩水 關於本站
站長新書 VMware vSphere ICM 團購開跑了!!

邁向 RHCE 之路 (Day28) - NFS 檔案分享伺服器

前言

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

實作環境

NFS Server 所需要啟動的服務

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

_NFS ServerNFS ClientPort
rpcbind Yes Yes 111
nfsd Yes None 2049
mountd Yes None < 1024

安裝 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   
  ...略...  

設定 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 服務

修改 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  

修改 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  

啟動 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  

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  
Go To Oddmuse OrgGo To FreeBSD OrgCreative Commons 2.5 Taiwansitestates.com