检查清单¶
检查身份-01:配置文件用户/组所有权是否设置为 keystone?¶
配置文件包含组件平稳运行所需的关键参数和信息。如果未授权用户有意或无意地修改或删除任何参数或文件本身,则会导致严重的可用性问题,从而导致其他最终用户无法访问服务。因此,此类关键配置文件的用户和组所有权必须设置为该组件的所有者。此外,包含目录应具有相同的所有权,以确保正确拥有新文件。
运行以下命令
$ stat -L -c "%U %G" /etc/keystone/keystone.conf | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone/keystone-paste.ini | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone/policy.json | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone/logging.conf | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone/ssl/certs/signing_cert.pem | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone/ssl/private/signing_key.pem | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone/ssl/certs/ca.pem | egrep "keystone keystone"
$ stat -L -c "%U %G" /etc/keystone | egrep "keystone keystone"
通过:如果所有这些配置文件的用户和组所有权都设置为 keystone。上述命令显示 keystone keystone 的输出。
失败:如果上述命令未返回任何输出,因为用户或组所有权可能已设置为 keystone 以外的任何用户。
推荐在:内部实现的身份验证方法。
检查身份-02:是否为身份配置文件设置了严格的权限?¶
与之前的检查类似,建议为这些配置文件设置严格的访问权限。
运行以下命令
$ stat -L -c "%a" /etc/keystone/keystone.conf
$ stat -L -c "%a" /etc/keystone/keystone-paste.ini
$ stat -L -c "%a" /etc/keystone/policy.json
$ stat -L -c "%a" /etc/keystone/logging.conf
$ stat -L -c "%a" /etc/keystone/ssl/certs/signing_cert.pem
$ stat -L -c "%a" /etc/keystone/ssl/private/signing_key.pem
$ stat -L -c "%a" /etc/keystone/ssl/certs/ca.pem
$ stat -L -c "%a" /etc/keystone
也可以进行更广泛的限制:如果包含目录设置为 750,则可以保证在此目录中创建的新文件将具有所需的权限。
通过:如果权限设置为 640 或更严格,或者包含目录设置为 750。
失败:如果权限未设置为至少 640/750。
推荐在:内部实现的身份验证方法。
检查身份-03:是否为身份启用了 TLS?¶
OpenStack 组件使用各种协议相互通信,并且通信可能涉及敏感或机密数据。攻击者可能会尝试窃听通道以获取对敏感信息的访问权限。因此,所有组件必须使用安全的通信协议(如 HTTPS)相互通信。
如果使用 HTTP/WSGI 服务器进行身份验证,则应在 HTTP/WSGI 服务器上启用 TLS。
通过:如果在 HTTP 服务器上启用了 TLS。
失败:如果在 HTTP 服务器上未启用 TLS。
推荐在:安全通信。
检查身份-04:(已弃用)¶
检查身份-05:max_request_body_size 是否设置为默认值 (114688)?¶
参数 max_request_body_size 定义了每个请求的最大正文大小(以字节为单位)。如果未定义最大大小,攻击者可以构造一个任意大小的请求,导致服务崩溃并最终导致拒绝服务攻击。分配最大值可确保阻止任何恶意超大请求,从而确保组件的持续可用性。
通过:如果 /etc/keystone/keystone.conf 中参数 max_request_body_size 的值设置为默认值 (114688) 或基于您的环境的某个合理值。
失败:如果未设置参数 max_request_body_size 的值。
检查身份-06:在 /etc/keystone/keystone.conf 中禁用 admin token¶
admin token 通常用于引导 Identity。此 token 是最有价值的 Identity 资产,可用于获得云管理员权限。
通过:如果在 /etc/keystone/keystone.conf 的 [DEFAULT] 部分下禁用 admin_token。并且从 /etc/keystone/keystone-paste.ini 中删除了 [filter:admin_token_auth] 下的 AdminTokenAuthMiddleware。
失败:如果在 [DEFAULT] 部分下设置了 admin_token 并且 AdminTokenAuthMiddleware 存在于 keystone-paste.ini 中。
提示
禁用 admin_token 意味着它的值为 <none>。
检查身份-07:在 /etc/keystone/keystone.conf 中 insecure_debug false¶
如果将 insecure_debug 设置为 true,则服务器将在 HTTP 响应中返回信息,这些信息可能允许未经身份验证或经过身份验证的用户获取比通常更多的信息,例如有关身份验证失败原因的更多详细信息。
通过:如果 /etc/keystone/keystone.conf 的 [DEFAULT] 部分下的 insecure_debug 为 false。
失败:如果 /etc/keystone/keystone.conf 的 [DEFAULT] 部分下的 insecure_debug 为 true。
检查身份-08:在 /etc/keystone/keystone.conf 中使用 fernet token¶
OpenStack Identity 服务提供 uuid 和 fernet 作为 token 提供程序。uuid token 必须持久化,并且被认为是不安全的。
通过:如果 /etc/keystone/keystone.conf 的 [token] 部分下的参数 provider 设置为 fernet。
失败:如果 [token] 部分下的参数 provider 设置为 uuid。