本文简要介绍NAS SMB ACL卷的根目录默认值、相关特性及工作原理。
背景信息
ACL权限控制表是一项重要的企业级特性。在SMB文件系统不连通AD服务时,NAS SMB卷的ACL是只读的,用户登录身份为匿名(Everyone)。阿里云SMB协议文件存储服务支持基于AD域系统的用户身份认证及文件系统级别的权限访问控制。您可以将自建的AD服务与NAS SMB卷连通,通过AD域身份或者Everyone的方式挂载NAS SMB卷,从而对文件、文件夹设置ACL权限。
NAS SMB ACL卷根目录默认值
文件存储NAS SMB ACL的卷根目录权限默认值如图所示:
默认值设计的原因
SYSTEM和Administrators这两个ACL权限项是为了与Windows NTFS的权限对齐,保证管理员权限的程序能够正常运行。同时,在连通阿里云RAM账号系统之后,为超级用户提供管理员权限提供可能性。
CREATOR OWNER是为了实现继承机制,也为了与Windows NTFS权限对齐。
NAS SMB ACL可以修改配置,将允许匿名访问设置为否,在卷上禁止以Everyone身份进行访问,只有域身份用户才能访问。
兼容用户使用习惯
为了兼容不使用AD的用户,对于AD功能打开之前创建的文件或文件夹,Everyone身份拥有所有权限(Full Control),保证不使用AD的用户不受影响。不使用AD的用户可以通过NTLM协议以Everyone的身份挂载文件卷并能访问Everyone所拥有的内容。
新的AD用户创建的文件或文件夹不会继承Everyone权限,所以不使用AD的用户并不能访问新的AD用户创建的文件或文件夹,只有创建者用户和管理员用户可以访问。
AD用户可以访问不使用AD的用户(即Everyone)创建的文件或文件夹。
NAS SMB ACL特性
不支持多重身份挂载同一NAS SMB卷
一个Windows Session,只能以一个身份挂载同一个文件系统。如果一个用户登录一台Windows机器后,他用一个域身份(可以是登录的域身份USER A,也可以其他域身份USER B)挂载了NAS SMB文件系统,那么他就不能在这个Windows Session以其它域身份(例如,USER C)再挂载NAS SMB文件系统。如果以另一身份挂载会出现以下错误:
逃逸机制
如果出现恶意用户强行删除了管理员权限以及其他人的权限,导致文件、文件夹不可用,需要用管理员身份挂载并重写该文件、文件夹的权限。
阿里云NAS SMB文件卷实现了超级用户功能,您可以在控制台上配置某个用户或群组为超级用户,直接查看和修改任何文件及其相关权限,不受现有文件权限的限制。例如:当恶意用户把文件夹的拥有者改成自己,然后设置Deny Everyone之后,超级用户就可以将改坏的权限恢复回正确的权限。
在控制台更新超级用户之后,请重新挂载SMB文件系统。
Cygwin应用
Cygwin可以在Windows环境中虚拟POSIX环境,运行POSIX程序。但是在启用SMB ACL之后,用户SID、群组SID和Windows DACL权限在Cygwin中会转化成POSIX uid、gid和POSIX ACL。转化细节请参见Cygwin ntsec.html。
在/etc/fstab中加入noacl选项,如图所示。
加入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。可能会出现客户端显示有权限,但是服务端拒绝请求的情况。
在/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权限操作都将不起作用。
更多信息,请参见Linux客户端以AD域用户身份挂载并使用SMB文件系统。
NAS SMB ACL工作原理
阿里云文件存储NAS支持用户VPC(Virtual Private Cloud)或者用户IDC(Internet Data Center)内的AD域控制器的用户管理和文件系统访问权限控制,这样可以打通混合云用户的云上和云下用户认证以及文件系统权限控制。阿里云SMB协议文件存储服务可以依赖用户部署在线下或者阿里云上的AD域控制器,通过Kerberos网络身份认证协议来进行AD域用户身份的认证。用户可以在配置了域控制器的Windows或者Linux服务器上,以域用户身份连接并访问SMB文件系统,文件系统服务器可以得到用户的域身份,然后达到目录和文件级别的访问权限控制。
NAS SMB ACL创建用户认证及访问控制的流程如下:
生成Keytab文件。更多信息,请参见将SMB文件系统挂载点接入AD域。
开启SMB AD ACL功能并上传Keytab文件,将阿里云SMB文件系统挂载点接入AD域内。更多信息,请参见步骤二:上传Keytab文件。
完成Keytab文件上传后,Keytab信息就保存到了阿里云NAS文件系统。这样,阿里云SMB文件系统挂载点接入到了AD域内,您可以开始以AD域用户身份挂载使用阿里云SMB协议文件系统。 详情请参见Windows客户端以AD域用户身份挂载并使用SMB文件系统或Linux客户端以AD域用户身份挂载并使用SMB文件系统。
通过客户端实现用户认证和访问控制。
用户通过VPC内的VM或者IDC内的应用资源访问SMB文件系统建立连接的时候,首先可以通过目前已经实现的文件系统权限组进行权限验证,根据配置的权限组信息控制客户端的连接及访问,然后根据下面的逻辑进行用户认证和访问控制。
通过AD域访问文件系统建立连接后,通过SMB协议协商用户认证协议。
文件服务器通过查找用户文件系统的配置,查询是否配置了Kerberos认证支持。更多信息,请参见Kerberos网络身份认证协议介绍及SMB文件系统对其的支持。
用户客户端向AD(用户VPC或是用户IDC内的AD服务器)发出访问阿里云文件系统服务的请求。
AD域控制器认证用户后,使用阿里云文件系统服务账号的密钥加密用户信息,返回给用户客户端。
用户客户端将加密的用户信息通过SMB Session Setup传给SMB文件服务器。
文件服务器通过用户提供的文件系统Keytab解密用户信息。
说明其后在该Session上的所有访问都用该用户作为授权对象。
通过认证后,文件系统返回给用户客户端认证通过。否则拒绝Session Setup请求。
应用向文件系统发出文件系统访问,读写及其它请求。
文件服务器向用户系统返回文件访问结果。
文件访问控制由文件系统服务器执行。文件服务器根据Session的用户信息和文件系统的目录或文件的访问权限配置,允许或者拒绝用户访问。