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,不允許少于這個權限。
權限位
功能介紹
注意事項
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之一,不允許去除。
權限位
功能介紹
注意事項
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功能
通過調用EnableNfsAcl接口開啟NFS ACL功能。
通過調用DisableNfsAcl接口關閉NFS ACL功能。
開啟NFS ACL功能后,您就可以使用POSIX ACL或NFSv4 ACL來進行文件或目錄權限管理。
如果您是使用的NFS v3協議掛載的文件系統,請參見使用POSIX ACL進行權限管理。
如果您是使用的NFSv4協議掛載的文件系統,請參見使用NFSv4 ACL進行權限管理。