客户端权限控制(ACL)
JuiceFS 提供两种控制访问权限策略的机制,访问令牌和 POSIX Extended ACL。这是两个维度的权限管理方式,访问令牌控制谁能挂载(以及挂载点的整体权限);而 POSIX ACL 是面对同一个挂载点,不同系统用户的权限管理。
访问令牌
JuiceFS 文件系统的元数据,如目录结构、文件属性和时间戳等,均保存在 Metadata 服务中,通过令牌(Token)进行授权访问。
用户可以通过 JuiceFS Web 控制台管理令牌,支持基于 IP 范围、读写权限和挂载子目录等的访问规则。
运行 juicefs mount
挂载文件系统或 juicefs auth
进行交互认证时,系统将提示输入此令牌。默认令牌可以在文件系统设置页面找到,你也可以设置多个创建多个令牌,为每一个配置不同的 ACL 以及其他挂载设置。
默认令牌允许用户从任意 IP 范围对整个文件系统进行读写操作。如需进行更精细的配置,可以前往访问控制管理界面。
令牌分为两类,一类用于客户端访问文件系统内容,另一类仅供访问监控 API。
客户端访问令牌
客户端访问令牌用于授权客户端访问文件系统,并且控制着一些客户端行为,你可以在「控制台 → 访问控制」标签页进行配置。选项说明如下:
- IP 范围:仅允许来自指定 IP 范围的访问
- 读写权限
- 只读:仅允许读操作(
open
、read
、readdir
等)。 - 可读可追加写:在读操作的基础上同时允许以追加模式打开文件并写入。
- 可读可写:允许所有读写操作。
- 只读:仅允许读操作(
- 挂载选项
- 挂载子目录:只能挂载这个子目录之下的路径,通过
--subdir
参数指定。 - 允许后台任务:客户端默认开启后台任务,如数据块删除、碎片合并及文件系统跨区域同步等(该功能是全局的,不受读写、子目录权限影响)。因此对于低带宽的机器,建议禁用后台任务,避免影响系统整体性能。
- 挂载子目录:只能挂载这个子目录之下的路径,通过
令牌(Token)只能用于限制客户端访问元数据的权限,和对象存储权限则没有必然联系,因此如果你希望确保挂载点对你的文件系统是只读的,请使用只读权限的对象存储 Access Key、Secret Key。
API 访问令牌
JuiceFS 通过 Prometheus API 为每个文件系统导出监控数据,此列表中的令牌仅可用于访问监控 API,无法用于挂载文件系统。
POSIX Extended ACL
在 Linux 中,POSIX 文件系统支持最小化 ACL(minimal ACL),由 3 个要素构成,也就是我们熟悉的文件 Owner、Group、Other 权限。在最小化 ACL 之上,还有 Extended ACL,支持更高级的权限策略,每一个文件都可以为多个不同的组单独设置权限(查看 setfacl
了解使用细节)。
JuiceFS 同样支持 Extended ACL,考虑到相关权限查询会带来少量额外性能开销,因此默认关闭。需要挂载时添加 --enable-acl
以开启。
juicefs mount myjfs /jfs --enable-acl
启用 Extended ACL 后,别忘了 JuiceFS 还默认启用UID/GID 自动映射,这个功能会保证在不同节点上,名称相同的用户,即使其 UID 不同,也保持一致的文件权限。
设置 umask,令新创建的文件对其他用户可访问
umask 控制着用户创建文件的默认权限。这和 JuiceFS 的使用没有关系,仅仅作为常见问题收录在文档里。
对于 root 用户,默认的 umask 是 022,意味着用户创建文件的权限是 666 - 022 = 644,也就是 root 用户可读写,其他用户/组可读。
如果希望令创建的文件默认对其他用户可读写,那么需要调整 umask:
# 首位的 0 代表八进制
# 改为 000 后,创建文件的默认权限是 666,其他用户也可读写
umask 0000