設定 Azure NetApp Files 的 NFS 用戶端
本文所述的 NFS 用戶端設定,是當您設定 NFSv4.1 Kerberos 加密,或建立雙重通訊協定磁碟區或具有 LDAP 的 NFSv3/NFSv4.1 時設定的一部分。 有各種 Linux 發行版本可以搭配 Azure NetApp Files 使用。 本文描述兩個較常用環境的設定:RHEL 8 與 Ubuntu 18.04。
需求和考量
無論您使用的 Linux 類別為何,都需要下列設定:
- 設定 NTP 用戶端以避免發生時間誤差的問題。
- 設定 Linux 用戶端的 DNS 項目以進行名稱解析。
此設定必須包含 “A” (正向) 記錄與 PTR (反向) 記錄。 - 針對網域加入,請在目標 Active Directory 中建立 Linux 用戶端的電腦帳戶 (這會在領域聯結命令期間建立)。
注意
下列命令中使用的
$SERVICEACCOUNT
變數應該是具有權限或委派的使用者帳戶,以在目標組織單位中建立電腦帳戶。
RHEL 8 設定
本節描述 NFSv4.1 Kerberos 加密與雙重通訊協定所需的 RHEL 設定。
本節中的範例會使用下列網域名稱與 IP 位址:
- 網域名稱:
contoso.com
- 私人 IP:
10.6.1.4
使用 NFSv4.1 Kerberos 加密時的 RHEL 8 設定
使用適當的 DNS 伺服器來設定
/etc/resolv.conf
。例如:
[root@reddoc cbs]# cat /etc/resolv.conf
search contoso.com
nameserver 10.6.1.4(private IP)
在 DNS 伺服器中新增 DNS 正向與反向對應區域的 NFS 用戶端記錄。
若要驗證 DNS,請使用來自 NFS 用戶端的下列命令:
# nslookup [hostname/FQDN of NFS client(s)]
# nslookup [IP address of NFS client(s)]
安裝套件:
yum update
sudo yum -y install realmd sssd adcli samba-common krb5-workstation chrony nfs-utils
設定 NTP 用戶端。
根據預設,RHEL 8 會使用 chrony。
加入 Active Directory 網域:
sudo realm join $DOMAIN.NAME -U $SERVICEACCOUNT --computer-ou="OU=$YOUROU"
例如:
sudo realm join CONTOSO.COM -U ad_admin --computer-ou="CN=Computers"
確定已將
default_realm
設定為/etc/krb5.conf
中提供的領域。 若尚未設定,請在檔案的[libdefaults]
區段下加以新增,如下列範例所示:[libdefaults] default_realm = CONTOSO.COM default_tkt_enctypes = aes256-cts-hmac-sha1-96 default_tgs_enctypes = aes256-cts-hmac-sha1-96 permitted_enctypes = aes256-cts-hmac-sha1-96 [realms] CONTOSO.COM = { kdc = dc01.contoso.com admin_server = dc01.contoso.com master_kdc = dc01.contoso.com default_domain = contoso.com } [domain_realm] .contoso.com = CONTOSO.COM contoso.com = CONTOSO.COM [logging] kdc = SYSLOG:INFO admin_server = FILE=/var/kadm5.log
重新啟動所有 NFS 服務:
systemctl start nfs-*
systemctl restart rpc-gssd.service
重新啟動會在 Kerberos 掛接期間防止錯誤狀況
“mount.nfs: an incorrect mount option was specified”
。藉由使用者帳戶執行
kinit
命令以取得票證:sudo kinit $SERVICEACCOUNT@DOMAIN
例如:
sudo kinit ad_admin@CONTOSO.COM
使用雙重通訊協定時的 RHEL 8 設定
下列是選用的步驟。 只有當您在 NFS 用戶端使用使用者對應時,才需要執行下列步驟:
完成使用 NFSv4.1 Kerberos 加密時的 RHEL 8 設定中所述的所有步驟。
在您的 /etc/hosts 檔案中新增靜態 DNS 記錄,以針對 AD 使用完整網域名稱 (FQDN),而不是在 SSSD 設定檔中使用 IP 位址:
cat /etc/hosts
10.6.1.4 winad2016.contoso.com
為網域新增額外區段,以從 AD LDAP 伺服器解析識別碼:
[root@reddoc cbs]# cat /etc/sssd/sssd.conf
[sssd]
domains = contoso.com, contoso-ldap (new entry added for LDAP as id_provider)
config_file_version = 2
services = nss, pam, ssh, sudo (ensure nss is present in this list)
[domain/contoso-ldap] (Copy the following lines. Modify as per your domain name.)
auth_provider = krb5
chpass_provider = krb5
id_provider = ldap
ldap_search_base = dc=contoso,dc=com(your domain)
ldap_schema = rfc2307bis
ldap_sasl_mech = GSSAPI
ldap_user_object_class = user
ldap_group_object_class = group
ldap_user_home_directory = unixHomeDirectory
ldap_user_principal = userPrincipalName
ldap_account_expire_policy = ad
ldap_force_upper_case_realm = true
ldap_user_search_base = cn=Users,dc=contoso,dc=com (based on your domain)
ldap_group_search_base = cn=Users,dc=contoso,dc=com (based on your domain)
ldap_sasl_authid = REDDOC$ (ensure $ at the end you can get this from “klist -kte” command)
krb5_server = winad2016.contoso.com (same as AD address which is added in /etc/hosts)
krb5_realm = CONTOSO.COM (domain name in caps)
krb5_kpasswd = winad2016.contoso.com (same as AD address which is added in /etc/hosts)
use_fully_qualified_names = false
在上述
[domain/contoso-ldap]
設定中:- 將
id_provider
設定為ldap
,而不是ad
。 - 設定已指定搜尋基礎及用於搜尋的使用者和群組類別。
ldap_sasl_authid
是來自klist -kte
的電腦帳戶名稱。use_fully_qualified_names
設定為false
。 此設定表示使用簡短名稱時,會使用此設定。- 「未」指定
ldap_id_mapping
,其預設值為false
。
realm join
設定由用戶端產生,看起來像這樣:[domain/contoso.com] (Do not edit or remove any of the following information. This information is automatically generated during the realm join process.)
ad_domain = contoso.com
krb5_realm = CONTOSO.COM
realmd_tags = manages-system joined-with-adcli
cache_credentials = True
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = True
use_fully_qualified_names = True
fallback_homedir = /home/%u@%d
access_provider = ad
在上述
[domain/contoso.com]
設定中:id_provider
設定為ad
。ldap_id_mapping
設定為true
。 其會使用由 SSSD 產生的識別碼。 或者,若您想要針對使用者名稱的所有樣式使用 POSIX UID,則可以將此值設定為false
。 您可以根據用戶端設定來判斷值。use_fully_qualified_names
為true
。 此設定表示user@CONTOSO.COM
將會使用此設定。
- 將
請確定您的
/etc/nsswitch.conf
有sss
項目:cat /etc/nsswitch.conf
passwd: sss files systemd
group: sss files systemd
netgroup: sss files
重新啟動
sssd
服務並清除快取:service sssd stop
rm -f /var/lib/sss/db/*
service sssd start
測試以確定您的用戶端已與 LDAP 伺服器整合:
[root@red81 cbs]# id ldapuser1
uid=1234(ldapuser1) gid=1111(ldapgroup1) groups=1111(ldapgroup1)
Ubuntu 設定
本節描述 NFSv4.1 Kerberos 加密與雙重通訊協定所需的 Ubuntu 設定。
本節中的範例會使用下列網域名稱與 IP 位址:
- 網域名稱:
contoso.com
- 私人 IP:
10.6.1.4
使用適當的 DNS 伺服器來設定
/etc/resolv.conf
:root@ubuntu-rak:/home/cbs# cat /etc/resolv.conf
search contoso.com
nameserver <private IP address of DNS server>
在 DNS 伺服器中新增 DNS 正向與反向對應區域的 NFS 用戶端記錄。
若要驗證 DNS,請使用來自 NFS 用戶端的下列命令:
# nslookup [hostname/FQDN of NFS client(s)]
# nslookup [IP address of NFS client(s)]
安裝套件:
apt-get update
apt-get install -y realmd packagekit sssd adcli samba-common chrony krb5-user nfs-common
出現提示時,輸入
$DOMAIN.NAME
(使用大寫,例如CONTOSO.COM
) 作為預設 Kerberos 領域。重新啟動服務
rpc-gssd.service
:sudo systemctl start rpc-gssd.service
根據預設,Ubuntu 18.04 會使用 chrony。 遵循 Ubuntu Bionic:使用 chrony 設定 NTP 中的設定指導方針。
加入 Active Directory 網域:
sudo realm join $DOMAIN.NAME -U $SERVICEACCOUNT --computer-ou="OU=$YOUROU"
例如:
sudo realm join CONTOSO.COM -U ad_admin --computer-ou="CN=Computers"
與使用者一起執行
kinit
以取得票證:sudo kinit $SERVICEACCOUNT
例如:
sudo kinit ad_admin
使用雙重通訊協定時的 Ubuntu 設定
下列是選用的步驟。 只有在您想要在 NFS 用戶端使用使用者對應時,才需要執行下列步驟:
執行下列命令來升級已安裝的套件:
sudo apt update && sudo apt install libnss-ldap libpam-ldap ldap-utils nscd
下列範例使用範例值。 當命令提示您輸入時,您應該根據環境來提供輸入。
base dc=contoso,dc=com uri ldap://10.20.0.4:389/ ldap_version 3 rootbinddn cn=admin,cn=Users,dc=contoso,dc=com pam_password ad
請確定您的
/etc/nsswitch.conf
檔案具有下列ldap
項目:
passwd: compat systemd ldap
group: compat systemd ldap
執行下列命令來重新啟動並啟用服務:
sudo systemctl restart nscd && sudo systemctl enable nscd
下列範例會從 Ubuntu LDAP 用戶端查詢 AD LDAP 伺服器,以取得 LDAP 使用者 ‘hari1’
:
root@cbs-k8s-varun4-04:/home/cbs# getent passwd hari1
hari1:*:1237:1237:hari1:/home/hari1:/bin/bash
設定兩個具有相同主機名稱的 VM,以存取 NFSv4.1 磁碟區
本節說明您可以如何設定兩個具有相同主機名稱的 VM,以存取 Azure NetApp Files NFSv4.1 磁碟區。 當您進行災害復原 (DR) 測試,而且需要具有與主要 DR 系統相同之主機名稱的測試系統時,此程序很實用。 只有在存取相同 Azure NetApp Files 磁碟區的兩部 VM 上具有相同主機名稱時,才需要此程序。
NFSv4.x 需要每個用戶端以「唯一」字串,將自身識別為伺服器。 在一個用戶端與一部伺服器之間共用的檔案開啟與鎖定狀態會與此身分識別建立關聯。 若要支援強固的 NFSv4.x 狀態復原與透明狀態移轉,此身分識別字串不得在用戶端重新開機之間變更。
使用下列命令,在 VM 用戶端上顯示
nfs4_unique_id
字串:# systool -v -m nfs | grep -i nfs4_unique
nfs4_unique_id = ""
若要在具有相同主機名稱的其他 VM 上掛接相同的磁碟區 (例如 DR 系統),請建立
nfs4_unique_id
,以便其將自身唯一識別為 Azure NetApp Files NFS 服務。 此步驟允許服務區分具有相同主機名稱的兩部 VM,並在這兩部 VM 上啟用掛接 NFSv4.1 磁碟區。您只需要在測試 DR 系統上執行此步驟。 為了保持一致性,您可以考慮在每部涉及的虛擬機器上套用唯一設定。
在測試 DR 系統上,將下列這一行新增至
nfsclient.conf
檔案 (通常位於/etc/modprobe.d/
):options nfs nfs4_unique_id=uniquenfs4-1
只要字串
uniquenfs4-1
在要連線至服務的 VM 中為唯一,該字串就可以是任何英數字元字串。請查看發行版本的文件,以了解如何設定 NFS 用戶端設定。
重新開機 VM,變更才會生效。
在測試 DR 系統上,確認 VM 重新開機之後已設定
nfs4_unique_id
:# systool -v -m nfs | grep -i nfs4_unique
nfs4_unique_id = "uniquenfs4-1"
照常在兩部 VM 上掛接 NFSv4.1 磁碟區。
具有相同主機名稱的兩部 VM 現在均可掛接及存取 NFSv4.1 磁碟區。