共用方式為


設定 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 設定

  1. 使用適當的 DNS 伺服器來設定 /etc/resolv.conf

    例如:

    [root@reddoc cbs]# cat /etc/resolv.conf
    search contoso.com
    nameserver 10.6.1.4(private IP)

  2. 在 DNS 伺服器中新增 DNS 正向與反向對應區域的 NFS 用戶端記錄。

  3. 若要驗證 DNS,請使用來自 NFS 用戶端的下列命令:

    # nslookup [hostname/FQDN of NFS client(s)]
    # nslookup [IP address of NFS client(s)]

  4. 安裝套件:

    yum update
    sudo yum -y install realmd sssd adcli samba-common krb5-workstation chrony nfs-utils

  5. 設定 NTP 用戶端。

    根據預設,RHEL 8 會使用 chrony。

  6. 加入 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
    
  7. 重新啟動所有 NFS 服務:

    systemctl start nfs-*
    systemctl restart rpc-gssd.service

    重新啟動會在 Kerberos 掛接期間防止錯誤狀況 “mount.nfs: an incorrect mount option was specified”

  8. 藉由使用者帳戶執行 kinit 命令以取得票證:

    sudo kinit $SERVICEACCOUNT@DOMAIN

    例如:

    sudo kinit ad_admin@CONTOSO.COM

使用雙重通訊協定時的 RHEL 8 設定

下列是選用的步驟。 只有當您在 NFS 用戶端使用使用者對應時,才需要執行下列步驟:

  1. 完成使用 NFSv4.1 Kerberos 加密時的 RHEL 8 設定中所述的所有步驟。

  2. 在您的 /etc/hosts 檔案中新增靜態 DNS 記錄,以針對 AD 使用完整網域名稱 (FQDN),而不是在 SSSD 設定檔中使用 IP 位址:

    cat /etc/hosts
    10.6.1.4 winad2016.contoso.com

  3. 為網域新增額外區段,以從 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_namestrue。 此設定表示 user@CONTOSO.COM 將會使用此設定。
  4. 請確定您的 /etc/nsswitch.confsss 項目:

    cat /etc/nsswitch.conf
    passwd: sss files systemd
    group: sss files systemd
    netgroup: sss files

  5. 重新啟動 sssd 服務並清除快取:

    service sssd stop
    rm -f /var/lib/sss/db/*
    service sssd start

  6. 測試以確定您的用戶端已與 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
  1. 使用適當的 DNS 伺服器來設定 /etc/resolv.conf

    root@ubuntu-rak:/home/cbs# cat /etc/resolv.conf
    search contoso.com
    nameserver <private IP address of DNS server>

  2. 在 DNS 伺服器中新增 DNS 正向與反向對應區域的 NFS 用戶端記錄。

    若要驗證 DNS,請使用來自 NFS 用戶端的下列命令:

    # nslookup [hostname/FQDN of NFS client(s)]
    # nslookup [IP address of NFS client(s)]

  3. 安裝套件:

    apt-get update
    apt-get install -y realmd packagekit sssd adcli samba-common chrony krb5-user nfs-common

    出現提示時,輸入 $DOMAIN.NAME (使用大寫,例如 CONTOSO.COM) 作為預設 Kerberos 領域。

  4. 重新啟動服務 rpc-gssd.service

    sudo systemctl start rpc-gssd.service

  5. 根據預設,Ubuntu 18.04 會使用 chrony。 遵循 Ubuntu Bionic:使用 chrony 設定 NTP 中的設定指導方針。

  6. 加入 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"

  7. 與使用者一起執行 kinit 以取得票證:

    sudo kinit $SERVICEACCOUNT

    例如:
    sudo kinit ad_admin

使用雙重通訊協定時的 Ubuntu 設定

下列是選用的步驟。 只有在您想要在 NFS 用戶端使用使用者對應時,才需要執行下列步驟:

  1. 執行下列命令來升級已安裝的套件:
    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

  2. 請確定您的 /etc/nsswitch.conf 檔案具有下列 ldap 項目:
    passwd: compat systemd ldap
    group: compat systemd ldap

  3. 執行下列命令來重新啟動並啟用服務:

    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 狀態復原與透明狀態移轉,此身分識別字串不得在用戶端重新開機之間變更。

  1. 使用下列命令,在 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 系統上執行此步驟。 為了保持一致性,您可以考慮在每部涉及的虛擬機器上套用唯一設定。

  2. 在測試 DR 系統上,將下列這一行新增至 nfsclient.conf 檔案 (通常位於 /etc/modprobe.d/):

    options nfs nfs4_unique_id=uniquenfs4-1

    只要字串 uniquenfs4-1 在要連線至服務的 VM 中為唯一,該字串就可以是任何英數字元字串。

    請查看發行版本的文件,以了解如何設定 NFS 用戶端設定。

    重新開機 VM,變更才會生效。

  3. 在測試 DR 系統上,確認 VM 重新開機之後已設定 nfs4_unique_id

    # systool -v -m nfs | grep -i nfs4_unique
    nfs4_unique_id = "uniquenfs4-1"

  4. 照常在兩部 VM 上掛接 NFSv4.1 磁碟區

    具有相同主機名稱的兩部 VM 現在均可掛接及存取 NFSv4.1 磁碟區。

下一步