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。
说明 请参考从Windows以AD域用户身份挂载使用阿里云SMB协议文件系统,使用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挂载点是否已加入域的情况。
请参考从Windows以AD域用户身份挂载使用阿里云SMB协议文件系统,使用mklink工具以C盘下的符号链接的形式挂载好NAS SMB文件系统。
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.html。
2.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协议文件系统。