本頁面說明如何連線 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 檔案層級存取權控管」。
使用者 ID 壓縮
NFS 匯出政策提供使用者和群組 ID 壓縮的控制項,可將使用者和群組 ID 重新對應至匿名使用者 ID,確保安全性。
壓縮 Root 權限
NFS 伺服器會將根使用者 (UID=0) 重新對應至 nobody (UID=65534),藉此提升安全性,讓根使用者成為磁碟區檔案存取權的非特權使用者。這項功能稱為「根目錄壓縮」。在 NFS 伺服器上,停用這項功能並保留根目錄權限的選項稱為 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,
all-squash不會自動變更磁碟區根節點的擁有權。如要達成這個目標,請新增no-root-squash匯出規則,允許根使用者使用chown將根 inode 的擁有權變更為所需 UID。支援
has-root-access參數。使用has-root-access或squash-mode;不要同時使用這兩個參數。
編輯磁碟區
請按照下列操作說明,使用 Google Cloud CLI 透過 squash 模式更新磁碟區的匯出政策:
gcloud
使用 squash 模式更新具有匯出政策的磁碟區:
gcloud netapp volumes update VOLUME_ID \ --project=PROJECT_ID \ --location=LOCATION \ --export-policy=access-type=ACCESS_TYPE,squash-mode=SQUASH_MODE,anon-uid=ANON_UID,allowed-clients=ALLOWED_CLIENTS_IP_ADDRESSES
請替換下列資訊:
VOLUME_ID:磁碟區 ID。PROJECT_ID:磁碟區所在的專案名稱。LOCATION:磁碟區的位置。ACCESS_TYPE:存取類型必須是READ_WRITE、READ_ONLY或READ_NONE。SQUASH_MODE:匯出規則必須是NO_ROOT_SQUASH、ROOT_SQUASH或ALL_SQUASH。ANON_UID:要壓縮的 UID 號碼。ALLOWED_CLIENTS_IP_ADDRESSES:以半形逗號分隔的允許用戶端 IP 位址或範圍清單。
您可以重複使用匯出政策參數,納入多項規則。
以下範例顯示匯出政策同時具有 root-squash 和 all-squash 規則:
gcloud netapp volumes update my_volume --location=us-east4 \ --export-policy=allowed-clients=10.0.1.18,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 說明文件。
NFS 用戶端的掛接操作說明
請按照下列操作說明,使用 Google Cloud 控制台或 Google Cloud CLI,取得 NFS 用戶端的掛接指令:
控制台
前往 Google Cloud 控制台的「NetApp Volumes」頁面。
按一下「磁碟區」。
按一下「顯示更多」。
選取「掛接操作說明」。
按照 Google Cloud 控制台中顯示的掛接說明操作。
找出掛接指令並使用掛接選項,除非工作負載有特定掛接選項需求。
僅限 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 磁碟區說明文件。
其他 NFSv4.1 指令
為 Flex Unified、Standard、Premium 和 Extreme 服務等級的磁碟區啟用 NFSv4.1 時,系統會自動為這些磁碟區啟用 NFSv4.2。除非您指定要掛接的版本,否則 Linux 掛接指令一律會掛接最高可用 NFS 版本。如要使用 NFSv4.1 掛接,請在掛接指令中使用 -o vers=4.1 參數。
在 NFSv3 中,使用者和群組是透過 NFSv3 通訊協定傳送的使用者 ID (UID) 和群組 ID (GID) 識別。請務必確保在存取磁碟區的所有用戶端上,相同的 UID 和 GID 代表相同的使用者和群組。NFSv4 使用安全 ID,因此不再需要明確的 UID 和 GID 對應。
安全 ID 是格式為 <username|groupname>@<full_qualified_domain> 的字串。
安全識別碼的例子是 bob@example.com。用戶端必須先將內部使用的 UID 和 GID 轉譯為安全識別碼,再將 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:
在用戶端上開啟
/etc/idmapd.conf檔案,然後將網域參數變更為下列其中一項:如果您的磁碟區未啟用 LDAP,請參閱
domain = defaultv4iddomain.com。如果 LDAP 已啟用磁碟區,請按照
domain = <FDQN_of_Windows_Domain>中的步驟操作。
執行下列指令,啟用對
rpc.idmapd的變更:nfsidmap -c
支援 NFSv4.2
除了 NFSv4.1 之外,Flex Unified、Standard、Premium 和 Extreme 服務等級現在也支援 NFSv4.2 通訊協定,適用於已啟用 NFSv4.1 的磁碟區。
掛接 NFS 磁碟區時,Linux mount 指令會自動選取可用的最高 NFS 版本。掛接已啟用 NFSv4.1 的磁碟區時,系統會自動預設為 NFSv4.2,除非明確指定 vers=4.1 掛接選項。
NetApp Volumes 支援 NFS 擴充屬性 xattrs,搭配 NFSv4.2 使用。如 TR-4962 所述,xattrs 的使用方式和限制也適用於此。
將 Linux 連線至 LDAP
如果您使用 NFSv3 擴充群組或 NFSv4.1 (含安全 ID),您已設定 NetApp Volumes,透過附加至儲存集區的 Active Directory,將 Active Directory 設為 LDAP 伺服器。
如要確保 NFS 用戶端和伺服器之間的使用者資訊一致,您可能需要將用戶端設定為使用 Active Directory 做為 LDAP 名稱服務,以取得使用者和群組資訊。
如要設定 LDAP,請參閱下列資源:
使用 Kerberized NFS 時,您可能需要使用本節提及的部署指南設定 LDAP,並確保用戶端和伺服器之間的一致性。