CentOS 7 安裝NFS

引用:https://www.linuxidc.com/Linux/2017-01/139886.htm

https://www.cnblogs.com/liuyisai/p/5992511.html


Linux下NFS服務器的搭建與配置


一、NFS服務簡介

        NFS 就是 Network FileSystem 的縮寫,最早之前是由sun 這家公司所發展出來的。 它最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案 (share files)。所以,你也可以簡單的將他看做是一個文件服務器 (file server) 呢!這個 NFS 服務器可以讓你的 PC 來將網絡遠程的 NFS 服務器分享的目錄,掛載到本地端的機器當中, 在本地端的機器看起來,那個遠程主機的目錄就好像是自己的一個磁盤分區槽一樣 (partition)!使用上面相當的便利!

        因爲 NFS 支持的功能相當的多,而不同的功能都會使用不同的程序來啓動, 每啓動一個功能就會啓用一些端口來傳輸數據,因此, NFS 的功能所對應的端口纔沒有固定住, 而是隨機取用一些未被使用的小於 1024 的埠口來作爲傳輸之用。但如此一來又造成客戶端想要連上服務器時的困擾, 因爲客戶端得要知道服務器端的相關埠口才能夠聯機吧!

        此時我們就得需要遠程過程調用 (RPC) 的服務啦!RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,並且回報給客戶端,讓客戶端可以連結到正確的埠口上去。 那 RPC 又是如何知道每個 NFS 的埠口呢?這是因爲當服務器在啓動 NFS 時會隨機取用數個埠口,並主動的向 RPC 註冊,因此 RPC 可以知道每個埠口對應的 NFS 功能,然後 RPC 又是固定使用 port 111 來監聽客戶端的需求並回報客戶端正確的埠口, 所以當然可以讓 NFS 的啓動更爲輕鬆愉快了!

所以你要注意,要啓動 NFS 之前,RPC 就要先啓動了,否則 NFS 會無法向 RPC 註冊。 另外,RPC 若重新啓動時,原本註冊的數據會不見,因此 RPC 重新啓動後,它管理的所有服務都需要重新啓動來重新向 RPC 註冊。


當客戶端有 NFS 檔案存取需求時,他會如何向服務器端要求數據呢?

  1. 客戶端會向服務器端的 RPC (port 111) 發出 NFS 檔案存取功能的詢問要求;
  2. 服務器端找到對應的已註冊的 NFS daemon 埠口後,會回報給客戶端;
  3. 客戶端了解正確的埠口後,就可以直接與 NFS daemon 來聯機。

由於 NFS 的各項功能都必須要向 RPC 來註冊,如此一來 RPC 才能瞭解 NFS 這個服務的各項功能之 port number, PID, NFS 在服務器所監聽的 IP 等等,而客戶端才能夠透過 RPC 的詢問找到正確對應的埠口。 也就是說,NFS 必須要有 RPC 存在時才能成功的提供服務,因此我們稱 NFS 爲 RPC server 的一種。事實上,有很多這樣的服務器都是向 RPC 註冊的,舉例來說,NIS (Network Information Service) 也是 RPC server 的一種呢

二、所需要的軟件及軟件結構

要設定好 NFS 服務器我們必須要有兩個軟件才行,分別是:

    • RPC 主程序:rpcbind

      就如同剛剛提的到,我們的 NFS 其實可以被視爲一個 RPC 服務,而要啓動任何一個 RPC 服務之前,我們都需要做好 port 的對應 (mapping) 的工作才行,這個工作其實就是『 rpcbind 』這個服務所負責的!也就是說, 在啓動任何一個 RPC 服務之前,我們都需要啓動 rpcbind 才行! (在 CentOS 5.x 以前這個軟件稱爲 portmap,在 CentOS 6.x 之後才稱爲 rpcbind 的!)

    • NFS 主程序:nfs-utils

      就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其他相關 documents 與說明文件、執行文件等的軟件!這個就是 NFS 服務所需要的主要軟件啦!一定要有喔!

 NFS 這個咚咚真的是很簡單,上面我們提到的 NFS 軟件中,配置文件只有一個,執行檔也不多, 記錄文件也三三兩兩而已吶!趕緊先來看一看吧! ^_^

  • 主要配置文件:/etc/exports
    這個檔案就是 NFS 的主要配置文件了!不過,系統並沒有默認值,所以這個檔案『 不一定會存在』,你可能必須要使用 vim 主動的建立起這個檔案喔!我們等一下要談的設定也僅只是這個檔案而已吶!

  • NFS 文件系統維護指令:/usr/sbin/exportfs
    這個是維護 NFS 分享資源的指令,我們可以利用這個指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸除或重新分享等等,這個指令是 NFS 系統裏面相當重要的一個喔!至於指令的用法我們在底下會介紹。

  • 分享資源的登錄檔:/var/lib/nfs/*tab
    在 NFS 服務器的登錄文件都放置到 /var/lib/nfs/ 目錄裏面,在該目錄下有兩個比較重要的登錄檔, 一個是 etab ,主要記錄了 NFS 所分享出來的目錄的完整權限設定值;另一個 xtab 則記錄曾經鏈接到此 NFS 服務器的相關客戶端數據。

  • 客戶端查詢服務器分享資源的指令:/usr/sbin/showmount
    這是另一個重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。這個 showmount 可以用來察看 NFS 分享出來的目錄資源喔!

就說不難吧!主要就是這幾個囉!


三、系統環境

CetOS 7       IP 192.168.2.162


四、安裝NFS服務

1、查看系統是否已安裝NFS

[root@system1 today_smb_test]# rpm -qa nfs-utils

[root@system1 today_smb_test]# rpm -qa rpcbind


2、安裝NFS

[root@bogon ~]# yum -y install nfs-utils rpcbind


五、服務端配置

在NFS服務端上創建共享目錄/nfs-share/test並設置權限

[root@system1 today_smb_test]# mkdir -p /nfs-share/test

[root@system1 today_smb_test]# chmod 666 /nfs-share/test/


編輯export文件

[root@system1 today_smb_test]# cat /etc/exports

/nfs-share/test 192.168.2.0/24(rw,no_root_squash,no_all_squash,sync)

常見的參數則有:

參數值        內容說明
rw           讀寫 
ro           只讀
但最終能不能讀寫,還是與文件系統的 rwx 及身份有關。

sync 代表數據會同步寫入到內存與硬盤中
async 則代表數據會先暫存於內存當中,而非直接寫入硬盤!

root_squash    當NFS客戶端以root管理員訪問時,映射爲NFS服務器的匿名用戶
no_root_squash 當NFS客戶端以root管理員訪問時,映射爲NFS服務器的root管理員

all_squash    不論登入 NFS 的使用者身份爲何, 均被映射爲匿名用戶,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名用戶的 UID 設定值,通常爲 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是羣組的 GID 囉。

配置生效

[root@bogon lys]# exportfs -r

啓動rpcbind、nfs服務及開機自啓動

[root@system1 today_smb_test]# systemctl start rpcbind

[root@system1 today_smb_test]# systemctl start nfs

[root@system1 today_smb_test]# systemctl enable rpcbind
[root@system1 today_smb_test]# systemctl enable nfs


查看 RPC 服務的註冊狀況    

[root@bogon lys]# rpcinfo -p localhost

選項與參數:
rpcinfo -p [host]

rpcinfo [-n port] -u | -t host program [version]

rpcinfo -b | -d program version

-p probe,探測)列出所有在hostportmap註冊的RPC程序,如果沒有指定host,就查找本機上的RPC程序。

-n  port number,端口號)根據-t或者-u,使用編號爲port的端口,而不是由portmap指定的端口號。

-u  UDP UDP RPC調用host上程序programversion版本(如果指定的話),並報告是否接收到響應。

-t  TCP TCP RPC調用host上程序programversion版本(如果指定的話),並報告是否接收到響應。

-b  broadcast,廣播)向程序programversion版本進行RPC廣播,並列出響應的主機。

-d  delete,刪除)  將程序programversion版本從本機的RPC註冊表中刪除。只有具有root特權的用戶纔可以使用這個選項。


查看共享出來的目錄:

[root@dns test]# showmount -e 192.168.2.162                服務端或者客戶端都可以
Export list for 192.168.2.162:
/nfs-share/test 192.168.2.0/24


showmount命令:

-e       顯示NFS服務器的共享列表

-a       顯示本機掛載的文件資源情況

-v       顯示版本號


客戶端創建掛載點,掛載,測試:

[root@dns test]# mkdir /nfs_test
[root@dns test]# mount -t nfs 192.168.2.162:/nfs-share/test /nfs_test


開機自動掛載:

[root@dns nfs_test]# vim /etc/fstab 

192.168.2.162:/nfs-share/test   /nfs_test       nfs     defaults        0 0



補充部分:

爲了方便配置防火牆,需要固定nfs服務端口

NFS啓動時會隨機啓動多個端口並向RPC註冊,這樣如果使用iptables對NFS端口進行限制就會有點麻煩,可以更改配置文件固定NFS服務相關端口。

[root@bogon lys]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper

分配端口,編輯配置文件:

[root@bogon lys]# vim /etc/sysconfig/nfs

添加:

RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004                   

重啓

[root@bogon lys]# systemctl restart rpcbind
[root@bogon lys]# systemctl restart rpcbind

查看結果

[root@bogon lys]# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  30003  mountd
    100005    1   tcp  30003  mountd
    100005    2   udp  30003  mountd
    100005    2   tcp  30003  mountd
    100005    3   udp  30003  mountd
    100005    3   tcp  30003  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  30002  nlockmgr
    100021    3   udp  30002  nlockmgr
    100021    4   udp  30002  nlockmgr
    100021    1   tcp  30002  nlockmgr
    100021    3   tcp  30002  nlockmgr
    100021    4   tcp  30002  nlockmgr

可以看到,隨機端口以固定

iptables策略問題完美解決!!

發佈了10 篇原創文章 · 獲贊 41 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章