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的資訊,請參見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功能後,您就可以使用POSIX ACL或NFSv4 ACL來進行檔案或目錄許可權管理。
如果您是使用的NFS v3協議掛載的檔案系統,請參見使用POSIX ACL進行許可權管理。
如果您是使用的NFSv4協議掛載的檔案系統,請參見使用NFSv4 ACL進行許可權管理。