阿里云NAS支持NFS v4 ACL和POSIX ACL。本文简要介绍POSIX ACL和NFS v4 ACL的概念及其相关注意事项。
企业级用户通过共享文件系统在多个用户和群组之间共享文件时,权限的控制和管理成为了不可缺少的功能。针对不同目录或文件,文件系统管理员需要给不同的用户和群组设置相应的权限,实现访问隔离。针对这个需求,阿里云NAS支持NFS ACL功能,ACL是与文件或目录关联的权限列表,由一个或多个访问控制项(ACE)组成。
POSIX ACL是NFS v3协议能够扩展支持的权限控制协议。POSIX ACL对mode权限控制进行了扩展,能够对owner、group、other以外的特定用户和群组设置权限,也支持权限继承。详细介绍请参见acl – Linux man page。
NFS v4 ACL是NFS v4协议能够扩展支持的权限控制协议,提供比POSIX ACL更细粒度的权限控制。详细介绍请参见nfs4_acl – Linux man page。
您可以使用NFS v3协议挂载含有NFS v4 ACL的文件系统,挂载后NFS v4 ACL会被转化为POSIX ACL。您也可以用NFS v4协议挂载含有POSIX ACL的文件系统,挂载后POSIX ACL会被转化为NFS v4 ACL。但由于NFS4 ACL和POSIX ACL并不完全兼容,加上mode和ACL之间的互操作也无法尽善尽美,另外NAS NFS v3挂载不支持锁,所以建议您在使用NFS ACL功能时尽量只使用NFS v4协议挂载并设置NFS4 ACL,不使用mode和POSIX ACL。相关特性说明请参见特性。
目前,NFS ACL功能只支持印度(孟买)、中国(香港)、华东2(上海)、英国(伦敦)、德国(法兰克福)、西南1(成都)、澳大利亚(悉尼)、印度尼西亚(雅加达)、美国(硅谷)、美国(弗吉尼亚)、华北3(张家口)、华东1(杭州)、华北5(呼和浩特)、华北2(北京)地域。如果您所在的地域还不支持NFS ACL功能,请您提交工单。
通过控制台配置NFS ACL功能
单击
关闭(默认状态),停止NFS ACL功能。

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