网络文件系统(NFS)级别用户、组和权限 - Amazon Elastic File System

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

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

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

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

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

注意

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

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

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

在您的 VPC 中创建 Amazon EFS 文件系统并为该文件系统挂载目标后,您可以在 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 文件系统中的文件和目录支持基于用户 ID 和组的标准 Unix 式读取、写入和执行权限。 IDs当 NFS 客户端在不使用访问点的情况下挂载 EFS 文件系统时,客户端提供的用户 ID 和组 ID 将受信任。您可以使用 EFS 接入点来覆盖 NFS 客户端 IDs 使用的用户 ID 和组。当用户尝试访问文件和目录时,Amazon EFS 会检查其用户 IDs 和群组, IDs 以验证每个用户是否有权访问这些对象。Amazon EFS 还使用它们 IDs 来指明用户创建的新文件和目录的所有者和群组所有者。Amazon EFS 不会检查用户或组的名称,它仅使用数字标识符。

注意

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

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

  • 如果两个 EC2 实例上的用户相同, IDs 则无论使用何种实例,Amazon EFS 都认为他们表示相同的用户。 EC2 两个 EC2 实例访问文件系统时的用户体验是相同的。

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

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

您可以考虑一致地管理跨 EC2 实例的用户 ID 映射。用户可以使用 id 命令检查其数字 ID。

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

关闭 ID 映射器

操作系统中的 NFS 实用程序包括一个名为 ID 映射器的守护程序,用于管理用户名和之间的映射。 IDs在 Amazon Linux 中,该守护程序称为 rpc.idmapd,在 Ubuntu 中称为 idmapd。它将用户和组 IDs 转换为名称,反之亦然。但是,Amazon EFS 仅处理数字 IDs。我们建议您在 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 用户,并绕过权限检查(允许访问和修改所有文件系统对象)。当 AWS Identity and Access Management (AWS IAM) 身份或资源策略不允许访问ClientRootAccess操作时,可以在客户端连接上启用根压缩。当根挤压处于启用状态时,根用户将被转换为在 NFS 服务器上具有有限权限的用户。

有关更多信息,请参阅 使用 IAM 控制文件系统数据访问

使用 IAM 授权为 NFS 客户端启用根挤压

您可以将 Amazon EFS 配置为防止除单个管理工作站之外的所有 AWS 委托人以根访问您的 Amazon EFS 文件系统。可以通过为网络文件系统(NFS)客户端配置 AWS Identity and Access Management (IAM)授权来执行此操作。

为此,需要配置两个 IAM 权限策略,如下所示:

  • 创建 EFS 文件系统策略,该策略明确允许对文件系统进行读取和写入访问,并隐式拒绝根访问。

  • 使用 Amazon EC2 实例配置文件为需要文件系统根访问权限的 Amazon EC2 管理工作站分配 IAM 身份。有关 Amazon EC2 实例配置文件的更多信息,请参阅AWS Identity and Access Management 用户指南中的使用实例配置文件

  • AmazonElasticFileSystemClientFullAccess AWS 托管策略分配给管理工作站的 IAM 角色。有关 EFS AWS 托管策略的更多信息,请参阅Amazon EFS 的身份和访问管理

要使用 IAM 授权为 NFS 客户端启用根挤压,请使用以下过程。

防止对文件系统进行根访问
  1. 打开 Amazon Elastic File System 控制台,网址为https://console.aws.amazon.com/efs/

  2. 选择文件系统

  3. 从“文件系统”页面中选择要启用根挤压的文件系统。

  4. 在文件系统详细信息页面上,选择文件系统策略,然后选择编辑。此时将显示 File system policy (文件系统策略) 页面。

  5. 策略选项下,选择默认阻止根访问*。策略 JSON 对象将显示在策略编辑器中。

  6. 选择 Save (保存) 以保存文件系统策略。

非匿名客户端可以通过基于身份的策略获得对文件系统的根访问权限。将 AmazonElasticFileSystemClientFullAccess 托管的策略附加到工作站的角色时,IAM 会根据工作站的身份策略授予对工作站的根访问权限。

从管理工作站启用根访问权限
  1. 使用 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

  2. EC2 为 Amazon 创建一个名为的角色EFS-client-root-access。IAM 会创建与您创建的 EC2 角色同名的实例配置文件。

  3. 将 AWS 托管策略AmazonElasticFileSystemClientFullAccess分配给您创建的 EC2 角色。本策略的内容如下所示。

    { "Version”: "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientRootAccess", "elasticfilesystem:ClientWrite", "elasticfilesystem:DescribeMountTargets" ], "Resource": "*" } ] }
  4. 将实例配置文件附加到您用作管理工作站的 EC2 实例,如下所述。有关更多信息,请参阅 A mazon Linux 实例 EC2 用户指南中的将 IAM 角色附加到实例

    1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

    2. 在导航窗格中,选择实例

    3. 选择实例。对于 Actions (操作),选择 Instance Settings (实例设置),然后选择 Attach/Replace IAM role (附加/替换 IAM 角色)

    4. 选择您在第一步中创建的 IAM 角色 EFS-client-root-access,然后选择 Apply (应用)

  5. 在管理工作站上安装 EFS 挂载帮助程序。有关 EFS 挂载帮助程序和 amazon-efs-utils软件包的更多信息,请参阅安装 Amazon EFS 客户端

  6. 通过使用带 iam 挂载选项的以下命令,在管理工作站上挂载 EFS 文件系统。

    $ sudo mount -t efs -o tls,iam file-system-id:/ efs-mount-point

    您可以将 Amazon EC2 实例配置为通过 IAM 授权自动挂载文件系统。有关使用 IAM 授权挂载 EFS 文件系统的更多信息,请参阅使用 IAM 授权挂载

权限缓存

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

更改文件系统对象所有权

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

EFS 接入点

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