阿里云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。但由于NFS v4 ACL和POSIX ACL并不完全兼容,加上mode和ACL之间的互操作也无法尽善尽美,另外NAS NFS v3挂载不支持锁,所以建议您在使用NFS v4 ACL功能时尽量只使用NFS v4协议挂载并设置NFS v4 ACL,不使用mode和POSIX 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,则很可能是个安全漏洞。