本文介绍阿里云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协议文件系统

默认值设计

阿里云NAS SMB ACL的卷根目录权限默认值如图所示:SMB_ACL_default_value
  • 默认值设计的原因
    • 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卷

只能以一种身份挂载一个NAS SMB卷。如果尝试以另一身份挂载会出现以下错误:Connect_existed_network

逃逸机制

如果出现恶意用户强行删除了管理者权限以及其他人的权限,导致文件、文件夹不可用,需要用管理员身份挂载并重写该文件、文件夹的权限。

阿里云NAS SMB文件卷实现了与Windows Server文件卷类似的逃逸机制。例如:当恶意用户把文件夹的拥有者改成自己,然后设置Deny Everyone之后,管理者(Domain Admins,Built-in Administrators)可以在单击确认后作以下操作:
  • 将文件夹的拥有者修改为管理者本人或者Everyone。
  • 将Deny Everyone的权限项删除并添加合适的Allow权限项。
escape

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。可能会出现客户端显示有权限,但是服务端拒绝请求的情况。
  • 在/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协议文件系统