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

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

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

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

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

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

注意

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

接下来,您可以找到权限示例以及有关亚马逊NFS权限注意事项的讨论EFS。

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

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

以下mount命令将 Amazon EFS 文件系统的根目录(由文件系统DNS名称标识)挂载到/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。

如果用户从两个不同的实例访问 Amazon EFS 文件系统,则根据这些EC2实例上的用户是相同还是不同,您会看到不同的行为,如下所示: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 Mapper 的守护程序,用于管理用户名和之间的映射。IDs在 Amazon Linux 中,该守护程序称为 rpc.idmapd,在 Ubuntu 中称为 idmapd。它将用户和组IDs转换为名称,反之亦然。但是,Amazon只EFS处理数字IDs。我们建议您在EC2实例上关闭此流程。在 Amazon Linux 上,ID 映射器通常处于禁用状态,且不启用它。要关闭 ID 映射器,请使用如下所示的命令。

$ service rpcidmapd status $ sudo service rpcidmapd stop

无根挤压

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

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

使用客户端IAM授权启用 root 压缩 NFS

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

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

  • 创建明确允许对EFS文件系统的读写访问权限并隐式拒绝根访问权限的文件系统策略。

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

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

要使用NFS客户端IAM授权启用 root 压缩,请按以下步骤操作。

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

  2. 选择文件系统

  3. 选择要在其上启用 root 压缩功能的文件系统。

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

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

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

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

从管理工作站启用根访问权限
  1. 从 IAM 打开 https://console.aws.amazon.com/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实例,如下所述。有关更多信息,请参阅《Amazon Linux 实例EC2用户指南》中的将IAM角色附加到实例

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

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

    3. 选择实例。在 “操作” 中,选择 “实例设置”,然后选择 “附加/替换角色 IAM”。

    4. 选择您在第一步中创建的IAM角色EFS-client-root-access,然后选择 A pply

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

  6. 使用以下带有 mount 选项的命令将EFS文件系统iam装载到管理工作站上。

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

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

权限缓存

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

更改文件系统对象所有权

亚马逊EFS强制执行该POSIXchown_restricted属性。这意味着只有根用户可以更改文件系统对象的所有者。root 用户或所有者用户可以更改文件系统对象的所有者组。但是,除非用户是 root 用户,否则该组只能更改为所有者用户所属的组。

EFS接入点

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