DAOS 使用了一个灵活的安全模型,将身份验证和受权分离开来。它的设计令其对 I/O 的影响被降到最小。html
DAOS 对用于 I/O 传输的网络结构没有提供任何传输安全性保障。在部署 DAOS 时,管理员负责特定网络结构的安全配置。对于以太网 RDMA,建议启用 IPsec。有关更多信息,请参阅 RDMA protocol spec (RFC 5040) 。git
DAOS 从两个方面实现本身的安全层:github
有不一样的身份验证方法,这取决于调用者是访问客户端资源仍是 DAOS 管理网络。安全
客户端库 libdaos
是不受信任的组件。使用客户端库的 DAOS 用户级命令也是不受信任的组件。网络
受信任的 DAOS 代理进程 daos_agent
在每一个客户端节点上运行,并对用户进程进行身份验证。数据结构
DAOS 安全模型的设计支持客户端进程的不一样身份验证方法。目前,咱们只支持 AUTH_SYS 身份验证。dom
每一个受信任的 DAOS 组件(daos_server
、daos_agent
和 dmg
管理工具)都经过为该组件生成的证书进行身份验证。这些组件经过相互认证的 TLS 在 DAOS 管理网络上相互标识。分布式
资源的客户端受权由资源的访问控制列表 (Access Control List, ACL) 控制。管理网络上的受权是经过配置 DAOS 系统时生成的 certificates 上的设置来实现的。工具
对 DAOS management RPCs 的访问是经过设置每一个管理组件证书中的 CommonName (CN) 进行控制的。给定的 management RPC 只能由与正确证书链接的组件调用。this
客户端对 Pool 和 Container 等资源的访问由 DAOS 访问控制列表 (ACL) 控制。这些 ACL 部分来自 NFSv4 ACL,而且适应分布式系统的特殊需求。
客户端支持对请求对资源的进行只读或读写访问。若是资源的 ACL 没有给它们的请求授予访问级别,客户端将没法链接资源。
链接时,它们对该资源的句柄将被授予特定操做的权限。句柄的权限在其存在期间保持,相似于 POSIX 系统中的打开文件描述符,此时没法注销句柄。
在 DAOS 工具的输入和输出中,访问控制项 (Access Control Entry, ACE) 是用冒号分隔的字符串定义的,格式以下:
TYPE:FLAGS:PRINCIPAL:PERMISSIONS
全部字段都区分大小写。
name@domain
。若是名称是本地域的 UNIX 用户/组,则应省略该域。目前,这是 DAOS 支持的惟一方式。OWNER@
、GROUP@
和 EVERYONE@
,它们与传统 POSIX 权限位中的 User、Group 和Other 对齐。当以 ACE 字符串格式提供它们时,它们的拼写必须与此处所写的彻底一致:大写,不附加域。GROUP@
项还必须有 G
(Group) 标志。read
或 get-prop
)。具备只写权限的用户在请求对资源的 RW 访问时将被拒绝。Permission | Pool Meaning | Container Meaning |
---|---|---|
r (Read) | Alias for 't' | Read container data and attributes |
w (Write) | Alias for 'c' + 'd' | Write container data and attributes |
c (Create) | Create containers | N/A |
d (Delete) | Delete any container | Delete this container |
t (Get-Prop) | Connect/query | Get container properties |
T (Set-Prop) | N/A | Set/Change container properties |
a (Get-ACL) | N/A | Get container ACL |
A (Set-ACL) | N/A | Set/Change container ACL |
o (Set-Owner) | N/A | Set/Change container's owner user and group |
A::daos_user@:rw
daos_user
的 UNIX 用户具备读写访问权限。A::project_users@:tc
project_users
中的任何人访问 Pool 的内容并建立 Container。A::OWNER@:rwdtTaAo
A:G:GROUP@:rwdtT
A::EVERYONE@:r
A::daos_user@:
daos_user
的 UNIX 用户对资源的任何访问。访问控制项 (ACE) 将按如下顺序执行:
通常来讲,强制执行将第一个匹配,并忽略较低优先级的条目。
若是用户是资源的全部者,而且存在 OWNER@
项,则仅接受全部者权限。即便与其余条目匹配,它们也不会在命名用户/组条目中接受任何权限。
若是用户不是全部者,或者没有 OWNER@
项,但用户标识有 ACE,则仅接受用户标识的权限。即便这些组条目具备比用户条目更广的权限,它们也不会收到任何组的权限。用户最多应匹配一个用户项。
若是找不到匹配的用户项,但存在项与一个或多个用户组匹配,则强制执行将基于全部匹配组(包括全部者组)的 GROUP@
项的权限。
若是找不到匹配的组,则将使用 EVERYONE@
项的权限(若是存在)。
默认状况下,若是用户与 ACL 中的 ACE 不匹配,则访问将被拒绝。
接受 ACL 文件的工具但愿它是一个简单的文本文件,每行有一个 ACE。
能够使用 #
做为行上的第一个非空白字符,将该行标记为注释。
例如:
# ACL for my container # Owner can't touch data - just do admin-type things A::OWNER@:dtTaAo # My project's users can generate and access data A:G:my_great_project@:rw # Bob can use the data to generate a report A::bob@:r
权限位和 ACE 自己不须要按任何特定顺序排列。可是,当 DAOS 解析和显示 ACL 时,顺序可能不一样。
DAOS ACL 内部的数据结构中 ACE 列表的最大大小为 64KiB。
要计算 ACL 内部数据的大小,须要对每一个 ACE 使用如下公式:
GitHub: https://github.com/storagezhang
Emai: debugzhang@163.com
华为云社区: https://bbs.huaweicloud.com/blogs/254553