共享访问控制

共享文件系统服务允许为其他客户端授予或拒绝对服务不同实体的访问权限。

将共享作为文件系统的远程挂载实例,您可以管理对指定共享的访问,并列出指定共享的权限。

共享可以是公共的私有的。这是共享的可见性级别,定义了其他租户是否可以看到该共享。默认情况下,所有共享都是作为私有创建的。在创建共享时,使用键 --public 使您的共享对其他租户可见,以便他们在共享列表中查看它及其详细信息。

根据 policy.json 文件,管理员和作为共享所有者的用户可以通过创建访问规则来管理对共享的访问。使用 manila access-allowmanila access-denymanila access-list 命令,您可以分别授予、拒绝和列出对指定共享的访问权限。

提示

默认情况下,当创建共享并具有其导出位置时,共享文件系统服务期望没有人可以通过挂载访问该共享。请注意,您使用的共享驱动程序可以更改此配置,或者可以直接在共享存储上更改它。为了确保对共享的访问,请检查导出协议的挂载配置。

当刚创建共享时,没有与它关联的默认访问规则和挂载权限。这可以在所用导出协议的挂载配置中看到。例如,在存储上有一个 NFS 命令 exportfs/etc/exports 文件,它控制每个远程共享并定义可以访问它的主机。如果没有任何主机可以挂载共享,则该文件为空。对于远程 CIFS 服务器,有一个 net conf list 命令,显示配置。 hosts deny 参数应由共享驱动程序设置为 0.0.0.0/0,这意味着拒绝任何主机挂载共享。

使用共享文件系统服务,您可以授予或拒绝对共享的访问,通过指定以下受支持的共享访问级别

  • rw。读写 (RW) 访问。这是默认值。

  • ro。只读 (RO) 访问。

提示

RO 访问级别在公共共享中很有用,管理员可以为某些特定的编辑或贡献者提供读写 (RW) 访问权限,并为其余用户(查看者)提供只读 (RO) 访问权限。

您还必须指定以下受支持的身份验证方法

  • ip。通过 IP 地址验证实例。有效格式为 XX.XX.XX.XX 或 XX.XX.XX.XX/XX。例如 0.0.0.0/0。

  • cert。通过 TLS 证书验证实例。将 TLS 身份指定为 IDENTKEY。有效值是证书的通用名 (CN) 中任何长达 64 个字符的字符串。

  • user。通过指定的用户名或组名进行身份验证。有效值是字母数字字符串,可以包含一些特殊字符,长度为 4 到 32 个字符。

注意

受支持的身份验证方法取决于您配置和使用的共享驱动程序、安全服务和共享文件系统协议。受支持的共享文件系统协议是 NFS、CIFS、GlusterFS 和 HDFS。受支持的安全服务是 LDAP、Kerberos 协议或 Microsoft Active Directory 服务。有关不同驱动程序对功能的支持的详细信息,请参阅 Manila 共享功能支持映射

要验证共享的访问规则 (ACL) 是否配置正确,您可以列出其权限。

提示

您还可以选择并添加 安全服务,该服务受共享驱动程序支持,以使用适合您共享的客户端的身份验证方法创建访问规则。受支持的安全服务是 LDAP、Kerberos 和 Microsoft Active Directory。

以下是使用 Generic 驱动程序的 NFS 共享示例。创建共享后,它具有导出位置 10.254.0.3:/shares/share-b2874f8d-d428-4a5c-b056-e6af80a995de。如果您尝试在 IP 地址为 10.254.0.4 的主机上挂载它,您将收到“权限被拒绝”消息。

# mount.nfs -v 10.254.0.3:/shares/share-b2874f8d-d428-4a5c-b056-e6af80a995de /mnt
mount.nfs: timeout set for Mon Oct 12 13:07:47 2015
mount.nfs: trying text-based options 'vers=4,addr=10.254.0.3,clientaddr=10.254.0.4'
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 10.254.0.3:/shares/share-b2874f8d-...

作为管理员,您可以连接到 IP 地址为 10.254.0.3 的主机,检查其上的 /etc/exports 文件,并看到该文件为空

# cat /etc/exports
#

我们在示例中使用的 Generic 驱动程序不支持任何安全服务,因此使用 NFS 共享文件系统协议,我们只能通过 IP 地址授予访问权限

$ manila access-allow Share_demo2 ip 10.254.0.4
+--------------+--------------------------------------+
| Property     | Value                                |
+--------------+--------------------------------------+
| share_id     | e57c25a8-0392-444f-9ffc-5daadb9f756c |
| access_type  | ip                                   |
| access_to    | 10.254.0.4                           |
| access_level | rw                                   |
| state        | new                                  |
| id           | 62b8e453-d712-4074-8410-eab6227ba267 |
+--------------+--------------------------------------+

规则状态变为 active 后,我们可以再次连接到 10.254.0.3 主机并检查 /etc/exports 文件,查看是否添加了包含规则的行

# cat /etc/exports
/shares/share-b2874f8d-d428-4a5c-b056-e6af80a995de     10.254.0.4(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash)
#

现在我们可以将共享挂载到 IP 地址为 10.254.0.4 的主机上,并对共享具有 rw 权限

# mount.nfs -v 10.254.0.3:/shares/share-b2874f8d-d428-4a5c-b056-e6af80a995de /mnt
# ls -a /mnt
.  ..  lost+found
# echo "Hello!" > /mnt/1.txt
# ls -a /mnt
.  ..  1.txt  lost+found
#