ACL权限控制表是一项重要的企业级特性。在SMB文件系统不连通AD服务时,NAS SMB卷的ACL是只读的,用户登录身份为匿名(Everyone)。您可以将自建的AD服务与NAS SMB卷连通,通过AD域身份或者Everyone的方式挂载NAS SMB卷,从而对文件、文件夹设置ACL权限。本文简要介绍NAS SMB ACL的默认值设计及其相关特性。

默认值设计

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

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

逃逸机制

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

阿里云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选项,如图所示。nacal
    加入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文件系统