使用网络文件系统(NFS)级的用户、组和权限 - Amazon Elastic File System
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用网络文件系统(NFS)级的用户、组和权限

创建文件系统后,默认情况下,只有根用户 (UID 0) 具有读取、写入和执行权限。为了让其他用户也能修改文件系统,根用户必须明确授予他们访问权限。您可以使用访问点自动创建非根用户可从中写入的目录。有关更多信息,请参阅使用 Amazon EFS 访问点

Amazon EFS 文件系统对象具有关联的 Unix 风格模式。此模式值定义了对该对象执行操作的权限。熟悉 Unix 风格系统的用户可以轻松了解 Amazon EFS 在这些权限方面的行为。

此外,在 Unix 风格的系统上,用户和组被映射到数字标识符,Amazon EFS 使用这些标识符来表示文件所有权。对于 Amazon EFS,文件系统对象(即文件、目录等)由单个所有者和单个组拥有。当用户尝试访问文件系统对象时,Amazon EFS 使用映射的数字 ID 来检查权限。

注意

NFS 协议支持每个用户最多 16 个组 ID(GID),任何更多 GID 都会被从 NFS 客户端请求中截断。有关更多信息,请参阅拒绝访问 NFS 文件系统上允许的文件

下面,您可以找到权限示例以及有关 Amazon EFS 的 NFS 权限注意事项的讨论。

示例 Amazon EFS 文件系统使用案例和权限

创建 Amazon EFS 文件系统并在 VPC 中创建该文件系统的挂载目标后,您可以将远程文件系统本地挂载到您的 Amazon EC2 实例上。mount 命令可以挂载文件系统中的任何目录。不过,在您首次创建文件系统时,只有 / 处的一个根目录。根用户和根组拥有挂载的目录。

以下 mount 命令将由文件系统 DNS 名称标识的 Amazon EFS 文件系统的根目录挂载到 /efs-mount-point 本地目录中。

sudo mount -t nfs -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.efs.aws-region.amazonaws.com:/ efs-mount-point

初始权限模式可授予以下权限:

  • 对所有者目录的 read-write-execute 权限

  • 对组目录的 read-execute 权限

  • 对其他目录的 read-execute 权限

只有根用户可以修改此目录。根用户还可以向其他用户授予对此目录的写入权限。例如:

  • 创建可写的每用户子目录。有关 step-by-step 说明,请参阅演练:创建可写的每用户子目录以及配置在重启时自动重新挂载

  • 允许用户写入 Amazon EFS 文件系统根目录。具有根用户权限的用户可以向其他用户授予访问该文件系统的权限。

    • 要将 Amazon EFS 文件系统所有权更改为非用户和组,请使用以下命令:

      $ sudo chown user:group /EFSroot
    • 要更改文件系统的权限使其更加宽松,请使用以下命令:

      $ sudo chmod 777 /EFSroot

      此命令向安装了文件系统的所有 EC2 实例上的所有用户授予 read-write-execute 权限。

文件系统中文件和目录的用户和组 ID 权限

Amazon EFS 文件系统中的文件和目录支持 Unix 风格的标准读/写/执行权限,这些权限基于用户 ID 和组 ID。当 NFS 客户端在不使用访问点的情况下挂载 EFS 文件系统时,客户端提供的用户 ID 和组 ID 将受信任。可以使用 EFS 访问点覆盖 NFS 客户端所使用的用户 ID 和组 ID。当用户尝试访问文件和目录时,Amazon EFS 会检查其用户 ID 和组 ID,以验证用户是否有权访问对象。Amazon EFS 还使用这些 ID 指示用户创建的新文件和目录的所有者和组所有者。Amazon EFS 不会检查用户或组的名称,它仅使用数字标识符。

注意

在 EC2 实例上创建用户时,可为用户分配任何数字用户 ID (UID) 和组 ID (GID)。数字用户 ID 在 Linux 系统上的 /etc/passwd 文件中设置。数字组 ID 在 /etc/group 文件中。这些文件定义名称与 ID 之间的映射。除 EC2 实例外,Amazon EFS 不对这些 ID 执行任何身份验证,包括根 ID 0。

如果用户从两个不同的 EC2 实例访问 Amazon EFS 文件系统,根据用户的 UID 在这些实例上是相同还是不同,您会看到如下所示的不同行为:

  • 如果两个 EC2 实例上的用户 ID 相同,Amazon EFS 会将其视为指明同一用户,而不考虑他们使用的 EC2 实例。从两个 EC2 实例访问文件系统的用户体验相同。

  • 如果两个 EC2 实例上的用户 ID 不相同,则 Amazon EFS 会将其视为不同的用户。从两个不同的 EC2 实例访问 Amazon EFS 文件系统的用户体验不相同。

  • 如果不同 EC2 实例上的两个不同用户共享一个 ID,则 Amazon EFS 会将其视为同一个用户。

您可以考虑以统一方式管理 EC2 实例间的用户标识映射。用户可以使用 id 命令检查其数字 ID。

$ id uid=502(joe) gid=502(joe) groups=502(joe)

关闭 ID 映射器

操作系统中的 NFS 实用软件包括一个名为 ID 映射器的守护程序,用于管理用户名与 ID 之间的映射。在 Amazon Linux 中,该守护程序称为 rpc.idmapd,在 Ubuntu 中称为 idmapd。它能将用户和组 ID 转换为名称,以及反向转换。但是,Amazon EFS 仅处理数字 ID。我们建议您在 EC2 实例上关闭此进程。在 Amazon Linux 上,ID 映射器通常处于禁用状态,且不启用它。要关闭 ID 映射器,请使用如下所示的命令。

$ service rpcidmapd status $ sudo service rpcidmapd stop

无根挤压

默认情况下,EFS 文件系统上禁用根挤压。Amazon EFS 的行为与 no_root_squash 的 Linux NFS 服务器类似。如果用户或组 ID 为 0,Amazon EFS 会将该用户视为 root 用户,并绕过权限检查(允许访问和修改所有文件系统对象)。当 Amazon Identity and Access Management (Amazon IAM) 身份或资源策略不允许访问ClientRootAccess操作时,可以在客户端连接上启用根压缩。当根挤压处于启用状态时,根用户将被转换为在 NFS 服务器上具有有限权限的用户。

有关更多信息,请参阅 使用 IAM 控制文件系统数据访问演练:使用 IAM 授权为 NFS 客户端启用根目录压缩

权限缓存

Amazon EFS 会将文件权限缓存一小段时间。因此,可能会有一个短暂的窗口,最近被吊销访问权限的用户仍然可以访问该对象。

更改文件系统对象所有权

Amazon EFS 强制实施 POSIX chown_restricted 属性。这意味着只有根用户可以更改文件系统对象的所有者。root 用户或所有者用户可以更改文件系统对象的所有者组。但是,除非用户是 root 用户,否则该组只能更改为所有者用户所属的组。

EFS 接入点

访问点 将操作系统用户、组和文件系统路径应用于使用访问点发出的任何文件系统请求。访问点的操作系统用户和组覆盖 NFS 客户端提供的任何身份信息。文件系统路径作为访问点的根目录向客户端公开。此方法可确保每个应用程序在访问共享的基于文件的数据集时始终使用正确的操作系统身份和正确的目录。使用访问点的应用程序只能访问其自己的目录及之下目录中的数据。有关接入点的更多信息,请参阅 使用 Amazon EFS 访问点