iT邦幫忙

DAY 28
4

邁向 RHCE 之路系列 第 28

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

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

* 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

----- 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 號:

_	   NFS Server    NFS Client	Port
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

(上一篇)邁向 RHCE 之路 (Day27) - vsftp 檔案傳輸伺服器
(下一篇)邁向 RHCE 之路 (Day29) - Samba 檔案分享伺服器
邁向 RHCE 之路系列文章連結


上一篇
邁向 RHCE 之路 (Day27) - vsftp 檔案傳輸伺服器
下一篇
邁向 RHCE 之路 (Day29) - Samba 檔案分享伺服器
系列文
邁向 RHCE 之路30

尚未有邦友留言

立即登入留言