阿里云NAS支持NFSv4 ACL和POSIX ACL。本文简要介绍POSIX ACL和NFSv4 ACL的概念及其相关注意事项。

企业级用户通过共享文件系统在多个用户和群组之间共享文件时,权限的控制和管理成为了不可缺少的功能。针对不同目录或文件,文件系统管理员需要给不同的用户和群组设置相应的权限,实现访问隔离。针对这个需求,阿里云NAS支持NFS ACL功能,ACL是与文件或目录关联的权限列表,由一个或多个访问控制项(ACE)组成。

POSIX ACL是NFSv3协议能够扩展支持的权限控制协议。POSIX ACL对mode权限控制进行了扩展,能够对owner、group、other以外的特定用户和群组设置权限,也支持权限继承。详细介绍请参见acl - Linux man page

NFSv4 ACL是NFSv4协议能够扩展支持的权限控制协议,提供比POSIX ACL更细粒度的权限控制。详细介绍请参见nfs4_acl - Linux man page

您可以使用NFSv3协议挂载含有NFSv4 ACL的文件系统,挂载后NFSv4 ACL会被转化为POSIX ACL。您也可以用NFSv4协议挂载含有POSIX ACL的文件系统,挂载后POSIX ACL会被转化为NFSv4 ACL。但由于NFS4 ACL和POSIX ACL并不完全兼容,加上mode和ACL之间的互操作也无法尽善尽美,另外NAS NFSv3挂载不支持锁,所以建议您在使用NFS ACL功能时尽量只使用NFSv4协议挂载并设置NFS4 ACL,不使用mode和POSIX ACL。相关特性说明请参见特性

说明 目前,ACL功能只支持华北 3(张家口)、华北 5(呼和浩特)、亚太东南 2(悉尼)、亚太东南 3(吉隆坡)和美国西部 1(硅谷)地域,并且需要通过工单提交申请后才能使用。

POSIX ACL注意事项

  • 使用继承(default)方式让子目录树获得相同的ACL,避免每次创建文件/目录都需要设置ACL。
  • 因为每次系统进行权限检查时,都需要扫描所有ACE,所以尽量减少ACE数量。滥用ACL会造成文件系统性能下降。
  • 请谨慎使用递归方式(setfacl -R)设置ACL。针对大的目录树进行递归操作时,可能产生较大的元数据压力影响业务运行。
  • 请在设置ACL前,先规划好用户组及其权限,每个用户可属于一个或多个用户组。如果您要增加、删除、修改用户权限,只需调整用户所在的用户组,只要用户组结构不变就无需修改用户组的ACL。在设置ACL时,尽量使用用户组而非单个用户,通过用户组设置ACL,简单省时,权限清晰易于管理。
  • 如果跨客户端使用POSIX ACL,需要给相同的用户名/群组名设置相同的UID/GID,因为NAS后端存储的是UID/GID。
  • 建议将other的权限设置到最低,因为other允许的权限对任何用户都适用。如果某个ACE的权限低于other,则可能是个安全漏洞。
  • 建议将other的权限设置到最低,所以在操作前先执行umask 777,这样创建文件/目录时传入的mode会变成000,使默认的权限最小化,详情请参见umask与默认mode
  • 启动POSIX ACL后other会变为everyone,mode的other也会变为everyone。在权限判断时other的权限会作为everyone的权限进行判断。

NFSv4 ACL注意事项

  • 使用UID/GID(如UID 1001)设置ACL。
  • 强烈建议使用NFSv4 ACL之后请勿使用mode。
  • nfs4_setfacl提供了-a、-x、-m等命令行选项去增加、删除、修改ACE的参数,但建议使用nfs4_setfacl -e <file>可以更直观的进行交互式编辑。
  • NAS NFSv4 ACL只支持Allow不支持Deny,所以建议将everyone的权限设置到最低,因为被everyone允许的权限对任何用户都适用。如果某个ACE的权限低于everyone,则很可能是个安全漏洞。
  • NFS4 ACL对权限划分很细,尤其是写权限细分在绝大多数场景下是不必要的。例如:当一个文件有写权限(w)但没有追加写的权限(a)时,执行写文件操作可能返回错误,在目录下做修改也有类似情况。为了避免意想不到的权限错误,建议使用nfs4_setfacl操作写权限时使用大写W,nfs4_setfacl会将大写W转化为完整的写权限(对文件为wadT,对目录为wadTD)。
  • 使用继承的方式让子目录树获得相同的ACL,避免每次创建文件或目录都需要设置ACL。
  • 因为每次系统进行权限检查时,都需要扫描所有ACE,所以尽量减少ACE数量。滥用ACL会造成文件系统性能下降。
  • 请谨慎使用递归方式(nfs4_setfacl -R)设置ACL。针对大的目录树进行递归操作时,可能产生较大的元数据压力影响业务运行。
  • 请在设置ACL前,先规划好用户组及其权限。每个用户可属于一个或多个用户组,如果您要增加、删除、修改用户权限,只需调整用户所在的用户组,只要用户组结构不变就无需修改用户组的ACL。在设置ACL时,尽量使用用户组而非单个用户,通过用户组设置ACL,简单省时,权限清晰易于管理。