ACL權限控制表是一項重要的企業級特性。在不連通AD服務時,NAS SMB卷的ACL是隻讀的,使用者登入身份為匿名(EVERYONE)。現在阿裡雲使用者可以将自建的AD服務與NAS SMB卷連通,通過AD域身份或者EVERYONE的方式挂載NAS SMB卷,之後使用者可以對檔案、檔案夾設定ACL。具體配置AD的方法請參考 将SMB協定NAS挂載點接入AD域 ,挂載SMB卷的方法請參考 從Windows以AD域使用者身份挂載使用阿裡雲SMB協定檔案系統
。
接下來我們介紹如何使用NAS SMB ACL及其相關特性。
說明 目前AD/ACL功能需要通過
工單 送出申請後才能使用,預設關閉。1. 如何檢視和修改ACL
使用者可以使用Windows檔案資料總管的安全欄檢視/修改權限,也可以通過Get-Acl/Set-Acl Powershell指令或者icacls指令行指令檢視/修改ACL。
說明 請參考
,使用mklink工具以C槽下的符号連結的形式挂載好NAS SMB檔案系統。
mklink /D c:\myshare \\nas-mount-point.nas.aliyuncs.com\myshare
1.1. Windows檔案管理器
在符号連結生成後,使用者可以通過Windows檔案資料總管(File Explorer)檢視和編輯檔案/目錄的ACL。以下為示例(其中檔案系統名、密碼、密鑰内容等敏感資訊已塗黑)。

說明 需要注意的是,阿裡雲NAS檔案系統并沒有實際加入使用者的AD域。如果不是通過c:\myshare通路,而是通過網絡路徑\\nas-mount-point.nas.aliyuncs.com\myshare通路檔案系統,在設定ACL時,會遇到因RPC伺服器不可用而無法确定NAS挂載點是否已加入域的情況。
請參考
mklink /D c:\myshare \\nas-mount-point.nas.aliyuncs.com\myshare
更多Windows檔案管理器設定ACL的相關内容請參考
Set-file-folder-permission-windows注意:一定要保證檔案管理器路徑欄顯示的是本地盤路徑,否則設定ACL時會向NAS SMB卷發送RPC請求造成修改ACL失敗。使用時注意如果需要回退,請點選回退或者上退按鈕,但是不要點選路徑中的某一段來回退。
1.2. Get-Acl/Set-Acl Powershell指令
Windows Powershell支援Get-Acl/Set-Acl來檢視、修改ACL。
Get-Acl示例如下,更多資料請參考
Get-Acl文檔:
$value = Get-Acl dir
$value.Access
Set-Acl示例如下,更多資料請參考
Set-Acl文檔Set-Acl .\dirKid2 $value
Get-Acl .\dirKid1 | Set-Acl .\dirKid2
1.3. Icacls Cmd指令
icacls是Windows指令行下的ACL操作标準指令。示例如下,更多資料請參考
icacls文檔icacls .\dir0
icacls .\dir0 /grant *S-1-1-0:(d,wdac)
icacls .\dir0
2. 阿裡雲NAS SMB ACL基本特性
介紹完NAS SMB ACL的基本使用方法,接下來我們介紹NAS SMB ACL的基本特性。
2.1. 阿裡雲NAS SMB ACL的預設值
阿裡雲NAS SMB ACL的卷根目錄權限預設值如下:
2.1.1. 預設值設計的原因
- SYSTEM, Administrators這兩個ACE權限項是為了與Windows NTFS的權限對齊,保證管理者權限的程式能夠正常運作。同時也為未來連通阿裡雲RAM賬号系統之後,為超級使用者提供管理者權限提供可能性。
- CREATOR OWNER是為了實作繼承機制,也與Windows NTFS權限對齊。
- 設定Owner為Everyone,讓Everyone有根目錄的所有權限,這樣沒有使用AD的使用者也能夠以Everyone的身份登入卷并且在卷上進行建立新檔案、檔案夾的操作而不受影響。
- NAS SMB AD/ACL設計了卷選項可以在卷上禁止以Everyone身份進行通路,隻有域身份使用者才能通路。有需要的使用者請申請
2.1.2. 如何與已有使用者的使用習慣進行相容
- 為了相容不使用AD的使用者,AD功能打開之前建立的檔案/檔案夾會有Everyone的所有權限,保證不使用AD的使用者不受影響。不使用AD的使用者可以通過NTLM協定以Everyone的身份挂載檔案卷并能通路Everyone所擁有的内容。
- 檔案卷根目錄權限是鎖定的,這可以保障所有使用者能夠通路根目錄。如需隔離,請自行建立子目錄并設定隔離權限,讓Everyone不能通路。或者申請 禁止以Everyone身份進行通路。
- 新的AD使用者建立的檔案/檔案夾不會繼承Everyone權限,是以新的AD使用者的檔案/檔案夾不使用AD的使用者并不能通路,隻有建立者使用者和管理者使用者可以通路。
- AD使用者可以通路不使用AD的使用者(即EVERYONE)建立的檔案、檔案夾。
2.2. 不支援多重身份挂載同一個NAS SMB卷
隻能以一個身份挂載一個NAS SMB卷。嘗試用另一身份挂載會出現以下錯誤:
2.3. 逃逸機制
如果出現惡意使用者強行删除了管理者權限以及其他人的權限,導緻檔案/檔案夾不可用,需要用管理者身份挂載并重寫該檔案/檔案夾的權限。阿裡雲NAS SMB檔案卷實作了與Windows Server檔案卷類似的逃逸機制。
比如,當惡意使用者把檔案夾的擁有者改成自己,然後設定Deny Everyone之後,管理者(Domain Admins, Built-in Administrators)可以在點選确認之後将檔案夾的擁有者修改為管理者本人或者Everyone,然後把Deny Everyone的權限項删除并添加合适的Allow權限項即可。
2.4. Cygwin
Cygwin可以在Windows環境中虛拟POSIX環境,運作POSIX程式。但是在啟用AD/ACL之後,使用者SID和Windows SD權限在Cygwin中會轉化成POSIX uid/gid和POSIX ACL。這個轉化的具體細節請參考
Cygwin ntsec.html2.4.1. /etc/fstab中加入noacl選項
在Cygwin中使用NAS SMB卷時,建議在Cygwin的/etc/fstab中加入noacl的挂載選項,這樣Cygwin不會啟用複雜的ACL轉化,而是對新生成的檔案和檔案夾使用預設mode值,USER/GROUP則為目前Windows登入使用者的使用者名和群組。基本規則如下:
-
檔案夾預設mode和uid/gid(755)
drwxr-xr-x 1 cat Domain Users 0 Jul 25 06:18 dir
-
檔案的預設mode和uid/gid(644)
-rw-r--r-- 1 cat Domain Users 0 Jul 25 06:42 file
- 檔案的mode值可以為644或者444。如果是444,則檔案設定了DOS Read-only權限。noacl隻會轉換檔案的DOS Read-only權限
- chmod指令不能修改檔案夾的權限,可以修改檔案的mode值到644或者444
- chown/chgrp指令無效
- getfacl/setfacl指令不支援
- 因為用戶端檔案夾權限隻會顯示成755,檔案權限隻會顯示成644或444,可能會出現用戶端顯示有權限但是服務端拒絕請求的情況
2.4.2. /etc/fstab如果使用預設acl選項
因為NAS SMB的預設挂載使用Everyone權限,而Everyone在Cygwin對應為other。Cygwin在生成檔案/檔案夾時,會有類似Linux的行為,在建立檔案之後自動執行chmod操作使檔案/檔案夾mode達到預設值。因為檔案夾的other預設值是r-x,檔案的預設值是r--,是以Everyone隻有r-x或者r--的權限,導緻新生成的檔案夾裡Everyone無法建立新檔案,新生成的檔案對于Everyone也是隻讀的。
是以,強烈建議使用者在Cygwin下使用noacl選項,不要使用acl選項。
2.5. Linux下使用AD/ACL
在Linux下使用mount -t cifs挂載時,使用者可以指定挂載的域使用者身份,以及挂載後的檔案gid/uid/file mode/dir mode等。在使用檔案卷時,用戶端會根據挂載的uid/gid和登入的真實使用者身份進行基本的posix權限檢查,而在檔案伺服器端,無論Linux使用者以何種uid/gid身份登入,都将映射到該域使用者身份進行操作。Linux Root身份也沒有管理者權限,而是該域使用者的權限。chmod, chown, chgrp, getfacl/setfacl等Linux權限操作都将不起作用。
更多内容請參考
從LinuxAD以域使用者身份挂載使用阿裡雲SMB協定檔案系統