連線 NFS 用戶端

本頁面說明如何連線 NFS 用戶端。

事前準備

如果您使用防火牆控管網路流量,並想允許 NFS 流量,請參閱「NFS 磁碟區存取權的防火牆規則」。

根據 Linux 發行版類型安裝 NFS 用戶端工具,準備用戶端:

RedHat

執行下列指令:

sudo yum install -y nfs-utils

SuSe

執行下列指令:

sudo yum install -y nfs-utils

Debian

執行下列指令:

sudo apt-get install nfs-common

Ubuntu

執行下列指令:

sudo apt-get install nfs-common

使用匯出政策控管磁碟區存取權

NFSv3 和 NFSv4.1 的磁碟區存取控管機制是以用戶端的 IP 位址為依據。磁碟區的匯出政策最多可包含 20 項匯出規則。每項規則都是以半形逗號分隔的 IP 或網路 CIDR 清單,定義可掛接磁碟區的允許的用戶端。規則也會定義用戶端擁有的存取權類型,例如「讀取和寫入」或「唯讀」

請使用下列分頁,依據 NFS 版本查看政策:

不使用 Kerberos 的 NFS

所有不含 Kerberos 的 NFS 版本都使用 AUTH_SYS 安全性風味。在此模式下,您必須嚴格管理匯出規則,只允許您信任的用戶端,並確保使用者 ID 和群組 ID 的完整性。

為確保安全,NFS 伺服器會自動將 NFS 呼叫與 UID=0 (根目錄) 對應至 UID=65534 (匿名),後者在檔案系統中具有有限的權限。詳情請參閱「使用者 ID 壓縮」。

使用 Kerberos 的 NFSv4.1

使用 Kerberos 的 NFSv4.1 會使用匯出政策,並透過 Kerberos 進行額外驗證,以存取磁碟區。您可以設定匯出規則,套用至下列項目:

  • 僅限 Kerberos (krb5)

  • Kerberos 簽署 (krb5i)

  • Kerberos 隱私權 (krb5p)

匯出政策最佳做法

建議您遵循下列匯出政策最佳做法:

  • 請依據明確程度排序匯出規則,最明確的規則排在最前面。

  • 只匯出至信任的用戶端,例如具有信任用戶端的特定用戶端或 CIDR。

  • 將根存取權限制在少數幾個信任的管理用戶端。

規則 允許的用戶端 存取 根層級存取權 說明
1 10.10.5.3,
10.10.5.9
讀取及寫入 開啟 管理用戶端。超級使用者仍是超級使用者,可以管理
所有檔案權限。
2 10.10.5.0/24 讀取及寫入 關閉 10.10.5.0/24 網路中的所有其他用戶端都可以掛接,
但系統會將根存取權對應至 nobody。
3 10.10.6.0/24 唯讀 關閉 其他網路可以從磁碟區讀取資料,但無法寫入。

用戶端掛接磁碟區後,檔案層級存取控管會決定使用者可執行的動作。詳情請參閱「UNIX 樣式磁碟區的 NFS 檔案層級存取控管」。

管理匯出政策

請按照下列操作說明,使用 Google Cloud CLI 更新磁碟區的匯出政策。

gcloud

使用一項匯出政策更新磁碟區

使用一項匯出政策規則更新磁碟區:

gcloud netapp volumes update VOLUME_ID \
  --project=PROJECT_ID \
  --location=LOCATION \
  --export-policy=access-type=ACCESS_TYPE,allowed-clients=ALLOWED_CLIENTS_IP_ADDRESSES,has-root-access=TRUE_OR_FALSE,nfsv3=NFSV3,nfsv4=NFSV4

請替換下列資訊:

  • VOLUME_ID:磁碟區的 ID。

  • PROJECT_ID:磁碟區所在的專案名稱。

  • LOCATION:磁碟區的位置。

  • ACCESS_TYPE:存取類型必須是 READ_WRITEREAD_ONLYREAD_NONE

  • ALLOWED_CLIENTS_IP_ADDRESSES:以半形逗號分隔的允許用戶端 IP 位址或範圍清單。

  • NFSV3:設為 truefalse,將這項規則套用至 NFSv3。

  • NFSV4:設為 truefalse,將這項規則套用至 NFSv4。

新增多項出口政策規則

如要新增多個匯出規則,請重複 export-policy 參數區塊。 每個 export-policy 參數區塊都包含多個鍵/值組合,格式如下:

--export-policy=KEY1=VALUE1,KEY2=VALUE2,KEY3=VALUE3...

範例:使用半形冒號和半形逗號做為分隔符

如果您為 allowed-clients 指定多個 IP 位址或 CIDR,Google Cloud CLI 可能無法正確剖析值,因為 --export-policy 旗標會使用半形逗號做為不同鍵之間的預設分隔符,例如 access-typenfsv3。如果值 (例如 allowed-clients) 也含有逗號,剖析器就無法區分新鍵/值組合和 allowed-clients 清單中的其他 IP 位址。如要區分這些半形逗號,請設定 Google Cloud CLI,透過 Google Cloud CLI 逸出使用不同的參數分隔符。

以下指令會顯示匯出政策最佳做法中的範例。第一個規則使用半形冒號做為參數分隔符,正確剖析以半形逗號分隔的 allowed-clients 清單。第二和第三條規則使用預設的半形逗號做為分隔符。

gcloud netapp volumes update my_volume --location=us-east4 \
--export-policy=^:^access-type=READ_WRITE:allowed-clients="10.10.5.3,10.10.5.9":nfsv3=true:nfsv4=true:has-root-access=true \
--export-policy=access-type=READ_WRITE,allowed-clients=10.0.5.0/24,nfsv3=true,has-root-access=false \
--export-policy=access-type=READ_ONLY,allowed-clients=10.0.6.0/24,nfsv3=true,has-root-access=false

示例:使用 squash-mode 做為參數

以下範例使用替代的 squash-mode 參數,為管理員主機建立 NO_ROOT_SQUASH 規則,並為 CIDR 範圍建立 ALL_SQUASH 規則。

gcloud netapp volumes update my_volume --location=us-east4 \
--export-policy=^:^allowed-clients="10.10.5.3,10.10.5.9":nfsv3=true:access-type=READ_WRITE:squash-mode=NO_ROOT_SQUASH \
--export-policy=allowed-clients=10.0.2.0/24,nfsv3=true,access-type=READ_WRITE,squash-mode=ALL_SQUASH,anon-uid=2000

如要進一步瞭解其他選用標記,請參閱「Google Cloud SDK for volumes export policy」。

使用者 ID 壓縮

NFS 匯出政策提供使用者和群組 ID 壓縮的控制項,可讓您基於安全考量,將使用者和群組 ID 重新對應至匿名使用者 ID。

壓縮根目錄

NFS 伺服器會將超級使用者 (UID=0) 重新對應至 nobody (UID=65534),使超級使用者成為磁碟區的無權限使用者,藉此提升安全性。這項功能稱為「根目錄壓縮」。在 NFS 伺服器上,停用這項功能並保留 Root 權限的選項稱為 no_root_squash

根據預設,如果磁碟區未定義匯出政策,用戶端 IP 位址就無法存取。在 Google Cloud 控制台中建立匯出政策規則時,預設設定包括「讀取和寫入」存取權和「root squash」。Google Cloud API、Google Cloud CLI 和 Terraform 先前支援使用 has-root-access 參數控制根目錄壓縮。雖然系統仍接受 has-root-access,但已由 squash-mode 參數取代。

最佳做法是建立專用的匯出規則,為您信任的管理員主機啟用根存取權,並為其他用戶端停用根存取權。請先放置這項規則,再放置較通用的規則。

使用者和群組 ID 壓縮

squash-mode 參數可將使用者和群組 ID 壓縮為匿名 UID,這對公開 SFTP Dropbox 目錄很有用。這個參數也會取代 has-root-access 參數,且 API、Google Cloud CLI 和 Terraform 皆支援這個參數。

squash-mode 參數接受下列值:

  • no-root-squash:在這個模式中,超級使用者會維持超級使用者身分,不會重新對應至 nobody (UID=65534)。

  • root-squash:這項設定會將超級使用者重新對應至 nobody。

  • all-squash:這個選項可為所有使用者 (包括根層級) 提供匿名存取權。所有使用者都會重新對應至 anon-uid 參數指定的 UID 和 GID。使用 all-squash 時,您也必須指定 anon-uid,並將 access-type 設為 READ_WRITE

注意事項

針對含有 squash mode 的匯出政策規則,請考量下列事項:

  • 匯出政策僅支援一項 all-squash 規則。

  • 啟用 all-squash 後,系統會將超級使用者壓縮為匿名。如果優先順序較高的規則使用 no-root-squash,則可覆寫這項設定。

  • 如果磁碟區的匯出政策規則為 squash-mode 樣式,則不支援磁碟區複製功能。

  • 如果服務等級為 Flex File,all-squash 不會自動變更磁碟區根 inode 的擁有權。如要達成這個目標,請新增no-root-squash匯出規則,允許超級使用者使用 chown 將根 inode 的擁有權變更為所需 UID。

  • 支援 has-root-access 參數。使用 has-root-accesssquash-mode;不要同時使用這兩個參數。

NFS 用戶端掛接操作說明

按照下列操作說明,使用 Google Cloud 控制台、Google Cloud CLI 或 ONTAP 模式,取得 NFS 用戶端的掛接指令。

控制台

  1. 前往 Google Cloud 控制台的「NetApp Volumes」頁面。

    前往 NetApp Volumes

  2. 按一下「磁碟區」

  3. 按一下「顯示更多」

  4. 選取「掛接操作說明」

  5. 按照 Google Cloud 控制台中顯示的掛接說明操作。

  6. 請先在控制台中使用掛接指令和選項。如要進一步瞭解效能調整、核心並行、掛接選項和預先讀取,請參閱「為 NetApp Volumes 最佳化 Linux NFS 用戶端」。

    僅限 NFSv3:如果您的應用程式未使用鎖定,或您未設定用戶端來啟用 NSM 通訊,建議您新增 nolock 掛接選項。

gcloud

查詢磁碟區的掛接操作說明:

 gcloud netapp volumes describe VOLUME_NAME \
    --project=PROJECT_ID \
    --location=LOCATION \
    --format="value(mountOptions.instructions)"

請替換下列資訊:

  • VOLUME_NAME:磁碟區名稱。

  • PROJECT_ID:磁碟區所在專案的名稱。

  • LOCATION:磁碟區的位置。

如要進一步瞭解其他選用標記,請參閱磁碟區的 Google Cloud SDK 說明文件

ONTAP 模式

請按照下列步驟找出磁碟區的主機名稱或 IP 位址,以及匯出路徑:

  1. 查詢 data_cifs 服務的所有網路介面

  2. 判斷匯出路徑,這會對應至您為磁碟區指定的接合路徑

  3. IP:junction-path 格式建立掛接路徑,並新增任何必要的掛接選項。

找出所需指令後,請參閱 ONTAP 模式,瞭解如何將 ONTAP 指令提交至儲存空間集區。

其他 NFSv4.1 指令

為 Flex Unified、Standard、Premium 和 Extreme 服務等級的磁碟區啟用 NFSv4.1 時,系統會自動為這些磁碟區啟用 NFSv4.2。除非您指定要掛接的版本,否則 Linux 掛接指令一律會掛接最高可用 NFS 版本。如要使用 NFSv4.1 掛接,請在掛接指令中使用 -o vers=4.1 參數。

在 NFSv3 中,使用者和群組是透過使用者 ID (UID) 和群組 ID (GID) 識別,這些 ID 會透過 NFSv3 通訊協定傳送。請務必確保所有存取磁碟區的用戶端,都使用相同的 UID 和 GID 代表同一位使用者和群組。NFSv4 使用安全 ID,因此不需要明確的 UID 和 GID 對應。 安全 ID 是格式為 <username|groupname>@<full_qualified_domain> 的字串。 安全 ID 的範例為 bob@example.com。用戶端必須先將內部使用的 UID 和 GID 轉換為安全 ID,再將 NFSv4 要求傳送至伺服器。伺服器需要將傳入要求的安全 ID 轉換為 UID 和 GID,並將回應的 UID 和 GID 轉換為安全 ID。使用轉換的優點是,每個用戶端和伺服器都可以使用不同的內部 UID 和 GID。不過,缺點是所有用戶端和伺服器都必須維護 UID 和 GID 之間的對應清單,以及使用者和群組名稱。用戶端的對應資訊可來自本機檔案 (例如 /etc/passwd/etc/groups) 或 LDAP 目錄。這項對應的設定是由 rpc.idmapd 管理,且必須在用戶端上執行。

在 NetApp Volumes 上,LDAP 必須提供對應資訊,且 Active Directory 是唯一支援 RFC2307bis 相容 LDAP 伺服器。使用 Kerberos 搭配 NFSv4 時,安全 ID 會以 username@DOMAINNAME 格式儲存 Kerberos 主體,其中 DOMAINNAME (大寫) 會成為領域名稱。

數字 ID

如果使用者不想設定名稱對應,而是想使用 NFSv4 取代 NFSv3,NFSv4 導入了名為 numeric ID 的選項,可將 UID 和 GID 編碼文字字串做為安全 ID 傳送。這項功能可簡化使用者的設定程序。

您可以使用下列指令檢查用戶端設定:

     cat /sys/module/nfs/parameters/nfs4_disable_idmapping
   

預設值為 Y,可啟用數字 ID。NetApp Volumes 支援使用數字 ID。

在 NFS 用戶端上設定 rpc.idmapd

無論您使用哪種 ID 或安全 ID,都必須在 NFS 用戶端上設定 rpc.idmapd。如果您已按照「事前準備」一節的用戶端公用程式安裝說明操作,應該已安裝該公用程式,但可能尚未執行。部分發行版本會在掛接第一個 NFS 磁碟區時,使用 systemd 自動啟動。設定網域是使用 rpc.idmapd 的最低要求。否則,使用者根目錄會顯示為 nobody,並附上 UID=65534 or 4294967295

請按照下列操作說明,在 NFS 用戶端上設定 rpc.idmapd

  1. 在用戶端開啟 /etc/idmapd.conf 檔案,然後將網域參數變更為下列其中一項:

    • 如果您的磁碟區未啟用 LDAP,請參閱domain = defaultv4iddomain.com

    • 如果 LDAP 已啟用,請按照domain = <FDQN_of_Windows_Domain>中的步驟操作。

  2. 執行下列指令,啟用對 rpc.idmapd 的變更:

     nfsidmap -c

支援 NFSv4.2

除了 NFSv4.1 之外,Flex 統合式、Standard、Premium 和 Extreme 服務等級現在也支援 NFSv4.2 通訊協定,適用於已啟用 NFSv4.1 的磁碟區。

掛接 NFS 磁碟區時,Linux mount 指令會自動選取可用的最高 NFS 版本。掛接啟用 NFSv4.1 的磁碟區時,系統預設會使用 NFSv4.2,除非明確指定 vers=4.1 掛接選項。

NetApp Volumes 支援 NFS 擴充屬性 xattrs,並使用 NFSv4.2。xattrs 的使用方式和限制也適用於此,詳情請參閱 TR-4962

NFS 磁碟區存取的防火牆規則

NFS 會使用多個通訊埠,在用戶端和伺服器之間通訊。在 Google Compute Engine 和 NetApp Volumes 之間的通訊中,這些通訊埠預設不會遭到封鎖。如果您使用防火牆,必須為完整的 NetApp Volume PSA CIDR 或個別磁碟區 IP 位址,啟用下列連接埠的存取權:

  • 111 TCP/UDP portmapper

  • 635 TCP/UDP mountd

  • 2049 TCP/UDP nfsd

  • 4045 TCP/UDP nlockmgr (僅適用於 NFSv3)

  • 4046 TCP/UDP status (僅適用於 NFSv3)

系統會從您在網路對等互連期間指派給服務的 CIDR 範圍,自動指派 NetApp Volumes 的 IP 位址。詳情請參閱「設定私人服務連線」。

搭配 NFSv3 使用諮詢鎖

如果您搭配 NFSv3 使用諮詢鎖定,則必須在用戶端上執行 rpc.statd 精靈,才能支援網路鎖定管理員,該管理員會與 NFS 搭配運作,透過網路提供 System V 樣式的諮詢檔案和記錄鎖定。NFS 用戶端必須開啟連入通訊埠,rpc.statd 才能接收 Network Lock Manager 回呼。在大多數 Linux 發行版中,掛接第一個 NFS 共用時,rpc.statd 就會啟動。並使用隨機通訊埠,您可以使用 rpcinfo -p 指令識別該通訊埠。如要讓 rpc.statd 與防火牆相容,請將其設定為使用靜態通訊埠。

如要為 rpc.statd 設定靜態通訊埠,請參閱下列資源:

如果您未使用 NFSv3 諮詢鎖定或網路鎖定管理員,可以使用 nolock 掛接選項掛接 NFSv3 共用項目。

NFSv4.1 會在 NFSv4.1 通訊協定中實作鎖定功能,該通訊協定會在通訊埠 2049 上,透過用戶端啟動的 TCP 連線連至 NFSv4.1 伺服器。用戶端不需要為輸入流量開啟防火牆通訊埠。

將 Linux 連線至 LDAP

如果您使用 NFSv3 擴充群組或 NFSv4.1 (含安全 ID),您已設定 NetApp Volumes,透過附加至儲存集區的 Active Directory,將 Active Directory 設為 LDAP 伺服器。

如要確保 NFS 用戶端和伺服器之間的使用者資訊一致,您可能需要將用戶端設定為使用 Active Directory 做為 LDAP 名稱服務,以取得使用者和群組資訊。

請使用下列資源設定 LDAP:

使用 Kerberized NFS 時,您可能需要使用本節提及的部署指南設定 LDAP,並確保用戶端和伺服器之間的一致性。

後續步驟