检查清单

检查镜像-01:配置文件用户/组所有权是否设置为 root/glance?

配置文件包含组件平稳运行所需的关键参数和信息。如果未授权用户(无论是故意还是意外)修改或删除任何参数或文件本身,都将导致严重的可访问性问题,从而导致其他端用户服务受阻。因此,此类关键配置文件的用户所有权必须设置为 root,组所有权必须设置为 glance。此外,包含目录应具有相同的所有权,以确保正确拥有新文件。

运行以下命令

$ stat -L -c "%U %G" /etc/glance/glance-api-paste.ini | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-api.conf | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-cache.conf | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-manage.conf | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-registry-paste.ini | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-registry.conf | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-scrubber.conf | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/glance-swift-store.conf | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/policy.json | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/schema-image.json | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance/schema.json | egrep "root glance"
$ stat -L -c "%U %G" /etc/glance | egrep "root glance"

通过:如果所有这些配置文件的用户和组所有权分别设置为 root 和 glance。上述命令显示 root glance 的输出。

失败:如果上述命令不返回任何输出。

检查镜像-02:是否为配置文件设置了严格的权限?

与之前的检查类似,我们建议您为这些配置文件设置严格的访问权限。

运行以下命令

$ stat -L -c "%a" /etc/glance/glance-api-paste.ini
$ stat -L -c "%a" /etc/glance/glance-api.conf
$ stat -L -c "%a" /etc/glance/glance-cache.conf
$ stat -L -c "%a" /etc/glance/glance-manage.conf
$ stat -L -c "%a" /etc/glance/glance-registry-paste.ini
$ stat -L -c "%a" /etc/glance/glance-registry.conf
$ stat -L -c "%a" /etc/glance/glance-scrubber.conf
$ stat -L -c "%a" /etc/glance/glance-swift-store.conf
$ stat -L -c "%a" /etc/glance/policy.json
$ stat -L -c "%a" /etc/glance/schema-image.json
$ stat -L -c "%a" /etc/glance/schema.json
$ stat -L -c "%a" /etc/glance

也可以进行更广泛的限制:如果包含目录设置为 750,则可以保证在此目录中创建的新文件将具有所需的权限。

通过:如果权限设置为 640 或更严格,或者包含目录设置为 750。权限 640/750 转换为所有者 r/w,组 r,且其他用户无任何权限。例如,u=rw,g=r,o=

注意

检查镜像-01:配置文件用户/组所有权是否设置为 root/glance? 结合,并将权限设置为 640,root 具有读/写访问权限,glance 具有读取访问权限。还可以使用以下命令验证访问权限。如果您的系统支持 ACL,则此命令才可用。

$ getfacl --tabular -a /etc/glance/glance-api.conf
getfacl: Removing leading '/' from absolute path names
# file: /etc/glance/glance-api.conf
USER   root  rw-
GROUP  glance  r--
mask         r--
other        ---

失败: 如果权限未设置为至少 640。

检查镜像-03:是否使用 keystone 进行身份验证?

注意

此项目仅适用于 Rocky 及更早的 OpenStack 版本,因为 auth_strategy 在 Stein 中已被弃用。

OpenStack 支持各种身份验证策略,包括 noauth 和 keystone。如果使用 noauth 策略,则用户无需任何身份验证即可与 OpenStack 服务交互。这可能是一种潜在风险,因为攻击者可能会获得对 OpenStack 组件的未经授权的访问权限。我们强烈建议所有服务都使用其服务帐户通过 keystone 进行身份验证。

通过:如果 /etc/glance/glance-api.conf[DEFAULT] 部分下参数 auth_strategy 的值为 keystone,并且 /etc/glance/glance-registry.conf[DEFAULT] 部分下参数 auth_strategy 的值为 keystone

失败:如果 /etc/glance/glance-api.conf[DEFAULT] 部分下参数 auth_strategy 的值为 noauth,或者 /etc/glance/glance-registry.conf[DEFAULT] 部分下参数 auth_strategy 的值为 noauth

检查镜像-04:是否为身份验证启用了 TLS?

OpenStack 组件使用各种协议相互通信,并且通信可能涉及敏感或机密数据。攻击者可能会尝试窃听通道以获取对敏感信息的访问权限。所有组件必须使用安全的通信协议相互通信。

通过:如果 /etc/glance/glance-api.conf[keystone_authtoken] 部分下参数 www_authenticate_uri 设置为以 https:// 开头的 Identity API 端点,并且在相同的 [keystone_authtoken] 部分中,相同的 /etc/glance/glance-registry.conf 中的参数 insecure 设置为 False

失败:如果 /etc/glance/glance-api.conf[keystone_authtoken] 部分下参数 www_authenticate_uri 未设置为以 https:// 开头的 Identity API 端点,或者在相同的 [keystone_authtoken] 部分中,相同的 /etc/glance/glance-api.conf 中的参数 insecure 设置为 True

检查镜像-05:是否阻止了屏蔽的端口扫描?

Glance 提供的 Image Service API v1 中的 copy_from 功能可能允许攻击者执行屏蔽的网络端口扫描。如果启用了 v1 API,则此策略应设置为受限值。

通过:如果 /etc/glance/policy.json 中参数 copy_from 设置为受限值,例如 role:admin

失败:如果 /etc/glance/policy.json 中参数 copy_from 未设置。