全部產品
Search
文件中心

File Storage NAS:簡介

更新時間:Dec 27, 2024

NAS NFS ACL(包括NFSv4 ACL和POSIX ACL)是阿里雲NAS推出的針對NFS協議檔案系統的ACL。您可以通過NFS ACL實現給不同的使用者和群組設定不同目錄或檔案的許可權。本文簡要介紹POSIX ACL和NFSv4 ACL的概念、注意事項及通過控制台開啟NFS ACL。

背景資訊

企業級使用者通過共用檔案系統在多個使用者和群組之間共用檔案時,許可權的控制和管理成為了不可缺少的功能。針對不同目錄或檔案,檔案系統管理員需要給不同的使用者和群組設定相應的許可權,實現訪問隔離。針對這個需求,阿里雲NAS支援NFS ACL功能(包括NFSv4 ACL和POSIX ACL),ACL是與檔案或目錄關聯的許可權列表,由一個或多個存取控制項目(ACE)組成。

您可以使用NFSv3協議掛載含有NFSv4 ACL的檔案系統,掛載後NFSv4 ACL會被轉化為POSIX ACL。同樣,您也可以使用NFSv4協議掛載含有POSIX ACL的檔案系統,掛載後POSIX ACL會被轉化為NFSv4 ACL。然而,由於NFSv4 ACL和POSIX ACL並不完全相容,並且mode和ACL之間的互操作也存在一定的不完美性。此外,NAS NFSv3掛載不支援鎖,因此建議您在使用NFSv4 ACL功能時盡量只使用NFSv4協議掛載,並設定NFSv4 ACL,而不使用mode和POSIX ACL。更多關於NAS NFS ACL的特性,請參見特性

關於如何為NFS協議檔案系統開啟NFS ACL功能的操作,請參見配置NFS ACL功能

POSIX ACL

POSIX ACL是NFSv3協議能夠擴充支援的許可權控制協議。POSIX ACL對mode許可權控制進行了擴充,能夠對owner、group、other以外的特定使用者和群組設定許可權,也支援許可權繼承。

POSIX ACL由一組ACE組成。ACE將單個使用者或一組使用者對關聯對象的存取權限指定為讀取、寫入、執行許可權的組合。

ACE包含一個ACE標記類型、一個可選的ACE標記限定符和一組許可權。每組ACE分別由2個半形冒號(:)分隔,格式為default:type:permissions

  • default:目錄繼承ACE

    標識目錄的繼承ACE,僅目錄支援該類型的ACE。

  • type:ACE標記類型

    POSIX ACL的ACE有6種類型,每種類型都由一個字元表示,且必須只有一種類型。

    標記類型

    標識

    說明

    ACL_USER_OBJ

    user:

    檔案所有者owner。

    ACL_USER

    user:uid

    自訂使用者。例如,owner: admini

    ACL_GROUP_OBJ

    group:

    檔案所有者組owner。

    ACL_GROUP

    group:uid

    自訂使用者組。例如,group:players

    ACL_MASK

    mask:

    自訂使用者、使用者組、自訂使用者組的ACE最大許可權。

    ACL_OTHER

    other:

    其他使用者。

  • permissions:許可權

    許可權位

    說明

    r

    讀許可權。

    w

    寫入權限。

    x

    執行檔案或進入目錄許可權。

    -

    沒有許可權。

    更多有關POSIX ACL的資訊,請參見acl - Linux man page

NFSv4 ACL

NFSv4 ACL是NFSv4協議擴充支援的許可權控制協議,提供比POSIX ACL更細粒度的許可權控制。

NFSv4 ACL的ACE格式為:type:flags:principal:permissions

  • type:ACE類型

    NFSv4 ACL的ACE有四種類型,每種類型都由一個字元表示,且必須只有一種類型。

    類型名

    標識

    說明

    Allow

    A

    允許。

    允許的ACL許可權。

    Deny

    D

    禁止。

    禁止的ACL許可權。

    Audit

    U

    審計。

    將所有需要許可權的訪問記錄寫入記錄檔,需要1個或2個成功訪問和失敗訪問標識。僅部分系統支援。

    Alarm

    L

    警示。

    對所有需要許可權的訪問操作產生一個系統警示,需要1個或2個成功訪問和失敗訪問標識。僅部分系統支援。

  • flags:標識

    ACE有三種標識,分別為組、繼承和管理。

    標識名

    標識

    說明

    group

    g

    指定使用者組。

    directory-inherit

    d

    目錄繼承ACE。

    新建立的子目錄將繼承ACE。

    file-inherit

    f

    檔案繼承ACE。

    • 新建立的檔案將繼承該目錄的ACE,同時繼承的檔案會去掉其繼承標誌。

    • 新建立的子目錄將繼承父目錄的ACE。如果在父ACE中未同時指定directory-inherit,則inherit-only將添加到繼承的ACE中。

    inherit-only

    i

    在許可權檢查中不考慮ACE,但它是可繼承的;但是,從繼承的ACE中剝離了“僅繼承”標誌。

    no-propagate-inherit

    n

    新建立的子目錄將繼承ACE,同時繼承的檔案會去掉其繼承標誌。

    successful-access

    S

    當主體被允許執行許可權所涵蓋的操作時,觸發警報。必須包含一個成功訪問和失敗訪問標識。

    failed-access

    F

    當主體被阻止執行許可權所涵蓋的操作時,觸發審核。必須包含一個成功訪問和失敗訪問標識。

  • principal:操作對象

    對某個檔案可以進行操作的對象,包括:OWNER@、GROUP@、EVERYONE@及指定對象。

  • permissions:許可權

    說明
    • 預設OWNER最小許可權為:tTnNcCy,不允許少於這個許可權。

    • 預設GROUP和EVERYONE最小許可權為:tncy,不允許少於這個許可權。

    檔案的NFSv4 ACL許可權表

    許可權位

    功能介紹

    注意事項

    r

    讀檔案

    w

    寫檔案/建立檔案

    需要wa同時存在才起效,單獨w無效。

    a

    追加寫檔案

    需要wa同時存在才起效,單獨a無效。

    x

    執行檔案

    需要rx同時存在才起效,單獨x無效。

    d

    刪除檔案

    d許可權無效。使用者如果有父目錄的wx許可權,就可以刪除當前檔案,不受檔案上的d許可權影響。

    D

    -

    檔案不能設定D許可權,nfs4_setfacl D會被用戶端過濾掉。

    t

    讀檔案屬性資訊

    預設最小許可權tncy之一,不允許去除。

    T

    修改檔案屬性資訊

    n

    讀檔案的named attributes屬性資訊

    預設最小許可權tncy之一,不允許去除。

    N

    修改檔案的named attributes屬性資訊

    NAS NFS不支援設定named attributes。N許可權無效。

    c

    讀檔案的ACL

    預設最小許可權tncy之一,不允許去除。

    C

    修改檔案的ACL

    o

    修改檔案的擁有者(owner)資訊

    有o許可權的目前使用者可以把檔案擁有者(owner)改為自己,但是不允許改成其他使用者,除非目前使用者是root。

    y

    允許同步訪問

    預設最小許可權tncy之一,不允許去除。

    目錄的NFSv4 ACL許可權表

    許可權位

    功能介紹

    注意事項

    r

    查詢目錄

    w

    建立檔案、目錄

    w許可權無效。w許可權功能包含在D許可權中,需要Dx同時存在才起效。

    a

    建立子目錄

    a許可權無效。a許可權功能包含在D許可權中,需要Dx同時存在才起效。

    x

    進入目錄

    d

    刪除目錄

    d許可權無效。使用者如果有父目錄的wx許可權,就可以刪除目前的目錄,不受目錄上的d許可權影響。

    D

    目錄刪除子檔案、子目錄

    需要Dx同時存在才起效,單獨D無效。

    t

    讀目錄屬性資訊

    預設最小許可權tncy之一,不允許去除。

    T

    修改目錄屬性資訊

    n

    讀目錄的named attributes屬性資訊

    預設最小許可權tncy之一,不允許去除。

    N

    修改目錄的named attributes屬性資訊

    NAS NFS不支援設定named attributes。N許可權無效。

    c

    讀目錄的ACL

    預設最小許可權tncy之一,不允許去除。

    C

    修改目錄的ACL

    o

    修改檔案的擁有者(owner)資訊

    有o許可權的目前使用者可以把檔案擁有者(owner)改為自己,但是不允許改成其他使用者,除非目前使用者是root。

    y

    允許同步訪問

    預設最小許可權tncy之一,不允許去除。

    更多有關NFSv4 ACL的資訊,請參見nfs4_acl - Linux man page

POSIX ACL注意事項

  • ACL的設定

    • 使用繼承(default)方式讓子目錄樹獲得相同的ACL,避免每次建立檔案/目錄都需要設定ACL。

    • 請謹慎使用遞迴方式(setfacl -R)設定ACL。針對大的分類樹進行遞迴操作時,可能產生較大的中繼資料壓力影響業務運行。

    • 請在設定ACL前,先規劃好使用者組及其許可權,每個使用者可屬於一個或多個使用者組。如果您要增加、刪除、修改使用者權限,只需調整使用者所在的使用者組,只要使用者組結構不變就無需修改使用者組的ACL。在設定ACL時,盡量使用使用者組而非單個使用者,通過使用者組設定ACL,簡單省時,許可權清晰易於管理。

    • 如果跨用戶端使用POSIX ACL,需要給相同的使用者名稱或群組名設定相同的UID或GID,因為NAS後端儲存的是UID或GID。

  • ACL的使用

    • 因為每次系統進行許可權檢查時,都需要掃描所有ACE,所以盡量減少ACE數量。濫用ACL會造成檔案系統效能下降。

  • other的使用權限設定

    • 建議將other的使用權限設定到最低,因為other允許的許可權對任何使用者都適用。如果某個ACE的許可權低於other,則可能是個安全性漏洞。

    • 建議將other的使用權限設定到最低,所以在執行相應的代碼前先執行umask 777,這樣建立檔案和目錄時傳入的mode會變成000,使預設的許可權最小化,詳情請參見umask與預設mode

    • 啟動POSIX ACL後other會變為everyone,mode的other也會變為everyone。在許可權判斷時other的許可權會作為everyone的許可權進行判斷。

NFSv4 ACL注意事項

  • ACL的設定

    • 使用UID或GID(例如:UID 1001)設定ACL。

    • 使用繼承的方式讓子目錄樹獲得相同的ACL,避免每次建立檔案或目錄都需要設定ACL。

    • 請謹慎使用遞迴方式(nfs4_setfacl -R)設定ACL。針對大的分類樹進行遞迴操作時,可能產生較大的中繼資料壓力影響業務運行。

  • ACL的使用

    • 因為每次系統進行許可權檢查時,都需要掃描所有ACE,所以盡量減少ACE數量。濫用ACL會造成檔案系統效能下降。

  • ACL使用權限設定

    • 強烈建議使用NFSv4 ACL之後請勿使用mode。

    • nfs4_setfacl提供了-a、-x、-m等命令列選項去增加、刪除、修改ACE的參數,但建議使用nfs4_setfacl -e <file>可以更直觀地進行互動式編輯。

    • NFSv4 ACL對許可權劃分很細,尤其是寫入權限細分在絕大多數情境下是不必要的。例如:當一個檔案有寫入權限(w)但沒有追加寫的許可權(a)時,執行寫檔案操作可能返回錯誤,在目錄下做修改也有類似情況。為了避免意想不到的許可權錯誤,建議使用nfs4_setfacl操作寫入權限時使用大寫W,nfs4_setfacl會將大寫W轉化為完整的寫入權限(對檔案為wadT,對目錄為wadTD)。

    • 請在設定ACL前,先規劃好使用者組及其許可權。每個使用者可屬於一個或多個使用者組,如果您要增加、刪除、修改使用者權限,只需調整使用者所在的使用者組,只要使用者組結構不變就無需修改使用者組的ACL。在設定ACL時,盡量使用使用者組而非單個使用者,通過使用者組設定ACL,簡單省時,許可權清晰易於管理。

    • NAS NFSv4 ACL只支援Allow不支援Deny,所以建議將everyone的使用權限設定到最低,因為被everyone允許的許可權對任何使用者都適用。如果某個ACE的許可權低於everyone,則很可能是個安全性漏洞。

配置NFS ACL功能

使用控制台

開啟NFS ACL

  1. 登入阿里雲NAS控制台

  2. 在左側導覽列,選擇檔案系統 > 檔案系統列表

  3. 在頂部功能表列,選擇地區。

  4. 檔案系統列表頁面,找到目標檔案系統,單擊檔案系統ID或者管理

  5. 選擇存取控制頁簽,單擊开启,開啟NFS ACL功能。NAS_ACL_Open

關閉NFS ACL

存取控制頁簽,單擊關閉(預設狀態),停止NFS ACL功能。

NAS_ACL_Close

使用API

開啟NFS ACL功能後,您就可以使用POSIX ACL或NFSv4 ACL來進行檔案或目錄許可權管理。