访问权限控制

本页面介绍如何控制对 Filestore 实例的访问权限。

  • 借助 NFSv4.1 协议(预览版),您可以使用 Kerberos 来保护对 Filestore 实例的访问。如需了解详情,请参阅关于支持的协议

  • 或者,您可以使用 Linux 选项来控制 NFS 访问权限,并使用 Identity and Access Management (IAM) 来控制对实例操作的访问权限,例如创建、修改、查看和删除实例。以下指南将为您逐步介绍如何完成每项任务。

文件共享导出设置

Filestore 文件共享分配有以下默认 /etc/exports 设置:

  • 客户端列表用于标识允许连接到文件共享的客户端,包含您为 Filestore 实例选择的 VPC 网络中的每个内部 IP 地址。内部 IP 地址可以是子网范围中列出的任何范围。但是,如果您的客户端位于非 RFC 1918 子网范围内,则必须使用基于 IP 的访问权限控制明确授予它们对 Filestore 实例的访问权限。
  • 使用了 rw 选项,因此文件共享允许执行读取和写入操作。
  • 使用了用户 ID 映射选项 no_root_squash,因此 Filestore 实例和客户端上的所有用户和群组(包括 root 用户)都应该是相同的。
  • 所有其他选项均使用 /etc/exports 默认值。

基本层级实例

基本 SSD 和基本 HDD 实例会创建标有 /config/google-prober 的导出共享,用于帮助支持内部探测流程,而内部探测流程会验证访问权限、耐用性或性能。系统会使用上一部分中所述的相同设置,将该共享导出到一个只能供实例 IP 地址访问的客户端列表。该共享只能由托管在该实例上或来自该实例的探测器访问,不能在该实例外部进行访问。无论是否应用基于 IP 的访问权限控制,实例都会导出共享。用户可以使用 showmount -e 命令查看导出的共享。

基于 IP 的访问权限控制

如需更改这些导出设置,您可以使用 Google Cloud 控制台创建访问权限控制规则,也可以在创建实例期间使用 gcloud CLI 指定 JSON 配置文件。如需了解详情,请参阅配置基于 IP 的访问权限控制

您还可以在创建实例后添加新的访问权限控制规则或修改现有规则。如需了解详情,请参阅修改实例

文件共享权限

创建 Filestore 实例时,该实例的文件共享具有默认的 POSIX 文件权限 rwxr-xr-x。这些权限意味着在 Filestore 实例上,只有连接的客户端上的 root 用户才拥有文件共享的读/写权限。其他用户默认只具有读取访问权限;但客户端 root 用户可以更改权限和所有者。

配置对文件共享的访问权限

装载文件共享时,您可以使用装载选项/etc/fstab 设置来确定文件共享是否可写入数据以及是否可在该文件共享中执行文件。装载文件共享后,您便可以使用 chmodsetfacl 等标准 Linux 命令来设置文件和文件共享权限。只有基本层级支持 setfacl

设置一致的权限

我们强烈建议您为连接到同一 Filestore 实例的所有客户端上的每位用户设置一致的权限,以防止提权。如果文件共享装载在多个客户端上,并且用户在其中某个客户端上具有(但在其他客户端上没有)root 权限,则可能会发生以下提权现象:

  • 假设用户从其具有 root 访问权限的客户端设置可执行文件的 setuid 属性。
  • 然后,用户将该可执行文件上传到文件共享。
  • 那么,用户在其至少具有读取访问权限的任何客户端上,便能够以 root 用户身份执行上传的文件。

出现这种情况的原因是 setuid 位允许用户使用文件所有者(在本例中为 root)的权限来执行文件。

权限重叠

可用区级(以前称为大规模 SSD)实例和企业实例现在支持重叠的权限。

如果为重叠的 IP 地址子网定义了两条单独的访问权限控制规则,则为较小子网定义的规则优先。

例如,如果 JSON 配置文件包含一条授予 IPv4 地址子网 10.0.0.0/24 的读写权限的规则,而另一条规则授予对 IPv4 地址子网 10.0.0.0/28 的只读权限,则 Filestore 会首先识别并应用针对较小子网的规则。然后,将另一条规则应用于已定义的 IP 地址子网的其余部分。在此示例中,使用 IPv4 地址 10.0.0.20 的客户端被授予读写权限,而使用 10.0.0.12 的客户端被授予只读权限:

   {
  "--file-share":
    {
      "capacity": "2048",
      "name": "my_vol",
      "nfs-export-options": [
        {
          "access-mode": "READ_WRITE",
          "ip-ranges": [
            "10.0.0.0/24"
          ],
          "squash-mode": "ROOT_SQUASH",
          "anon_uid": 1003,
          "anon_gid": 1003
        },
         {
          "access-mode": "READ_ONLY",
          "ip-ranges": [
            "10.0.0.0/28"
          ],
          "squash-mode": "NO_ROOT_SQUASH"
        }
      ]
    }
}

需遵守相关限制:

  • 相同的 IPv4 子网不支持重叠权限,系统会返回错误。

  • 基本 SSD 或基本 HDD 实例不支持重叠权限。

后续步骤