本文介绍阿里云NAS SMB ACL相关特性。
背景信息
ACL权限控制表是一项重要的企业级特性。在SMB文件系统不连通AD服务时,NAS SMB卷的ACL是只读的,用户登录身份为匿名(Everyone)。目前,阿里云用户可以将自建的AD服务与NAS SMB卷连通,通过AD域身份或者Everyone的方式挂载NAS SMB卷,从而可以对文件、文件夹设置ACL权限。
具体配置AD的方法,请参见将阿里云SMB协议文件系统挂载点接入AD域。
挂载SMB卷的方法,请参见从Windows以AD域用户身份挂载并使用阿里云SMB协议文件系统。
默认值设计

- 默认值设计的原因
- SYSTEM和Administrators这两个ACE权限项是为了与Windows NTFS的权限对齐,保证管理员权限的程序能够正常运行。同时,在连通阿里云RAM账号系统之后,为超级用户提供管理员权限提供可能性。
- CREATOR OWNER是为了实现继承机制,也为了与Windows NTFS权限对齐。
- 设置Owner为Everyone,让Everyone有根目录的所有权限。这样,没有使用AD的用户也能够以Everyone的身份登录卷,并且在卷上实现创建新文件、文件夹的操作而不受影响。
- NAS SMB ACL可以修改配置,将允许匿名访问设置为否,在卷上禁止以Everyone身份进行访问,只有域身份用户才能访问。
- 兼容用户使用习惯
- 为了兼容不使用AD的用户,对于AD功能打开之前创建的文件或文件夹,Everyone身份拥有所有权限(Full Control),保证不使用AD的用户不受影响。不使用AD的用户可以通过NTLM协议以Everyone的身份挂载文件卷并能访问Everyone所拥有的内容。
- 文件卷根目录权限是锁定的,这可以保障所有用户能够访问根目录。如需隔离,请自行建立子目录并设置隔离权限,让Everyone不能访问。
- 新的AD用户创建的文件或文件夹不会继承Everyone权限,所以不使用AD的用户并不能访问新的AD用户创建的文件或文件夹,只有创建者用户和管理员用户可以访问。
- AD用户可以访问不使用AD的用户(即Everyone)创建的文件或文件夹。
不支持多重身份挂载同一NAS SMB卷

逃逸机制
如果出现恶意用户强行删除了管理者权限以及其他人的权限,导致文件、文件夹不可用,需要用管理员身份挂载并重写该文件、文件夹的权限。
- 将文件夹的拥有者修改为管理者本人或者Everyone。
- 将Deny Everyone的权限项删除并添加合适的Allow权限项。
Cygwin应用
Cygwin可以在Windows环境中虚拟POSIX环境,运行POSIX程序。但是在启用SMB ACL之后,用户SID、群组SID和Windows DACL权限在Cygwin中会转化成POSIX uid、gid和POSIX ACL。转化细节请参见Cygwin ntsec.html。
- 在/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。可能会出现客户端显示有权限,但是服务端拒绝请求的情况。
- 文件夹默认mode和uid、gid(755)
- 在/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选项。
在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权限操作都将不起作用。