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

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

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

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

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

下面,您可以找到权限示例以及有关 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 权限

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

  • 创建可写的每用户子目录。如需分步指导,请参阅 演练:创建可写的每用户子目录以及配置在重启时自动重新挂载

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

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

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

      $ sudo chmod 777 /EFSroot

      该命令为所有挂载了文件系统的 EC2 实例上的所有用户授予读写执行权限。

文件系统中文件和目录的用户和组 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

无根 Squash

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

权限缓存

Amazon EFS 会将文件权限缓存一小段时间。因此,可能存在一个短暂的窗口,允许之前能够访问文件系统对象但最近被撤销访问权限的用户访问该对象。

更改文件系统对象所有权

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

EFS 访问点

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