使用 rootwrap¶
Rootwrap 允许非特权用户安全地以 root 用户身份运行 Compute 操作。Compute 之前使用 sudo 来实现此目的,但维护起来很困难,并且不允许高级过滤。 rootwrap 命令取代了 Compute 中的 sudo。
要使用 rootwrap,请在 Compute 命令前加上 nova-rootwrap。例如
$ sudo nova-rootwrap /etc/nova/rootwrap.conf command
一个通用的 sudoers 条目允许 Compute 用户以 root 身份运行 nova-rootwrap。 nova-rootwrap 代码在其配置文件中查找过滤器定义目录,并从中加载命令过滤器。然后,它检查 Compute 请求的命令是否与其中一个过滤器匹配,如果是,则执行该命令(以 root 身份)。如果没有过滤器匹配,则拒绝该请求。
注意
请注意在使用 NFS 和 root 拥有的文件时可能存在问题。为了使 rootwrap 正常工作,NFS 共享必须配置为启用 no_root_squash 选项。
Rootwrap 完全由 root 用户控制。root 用户拥有 sudoers 条目,该条目允许 Compute 以 root 身份运行特定的 rootwrap 可执行文件,并且仅使用特定的配置文件(该配置文件也应由 root 拥有)。 nova-rootwrap 命令从清理过的、系统默认的 PYTHONPATH 导入它需要的 Python 模块。root 拥有的配置文件指向 root 拥有的过滤器定义目录,其中包含 root 拥有的过滤器定义文件。这个链条确保 Compute 用户本身无法控制 nova-rootwrap 可执行文件使用的配置或模块。
配置 rootwrap¶
在 rootwrap.conf 文件中配置 rootwrap。由于它位于受信任的安全路径中,因此必须仅由 root 用户拥有和可写。 rootwrap_config=entry 参数指定 sudoers 条目和 nova.conf 配置文件中的文件位置。
rootwrap.conf 文件使用带有以下部分和参数的 INI 文件格式
配置选项=默认值 |
(类型) 描述 |
[DEFAULT] filters_path=/etc/nova/rootwrap.d,/usr/share/nova/rootwrap |
(ListOpt) 包含过滤器定义文件的目录的逗号分隔列表。定义 rootwrap 过滤器存储的位置。此行定义的目录都应存在,并且只能由 root 用户拥有和可写。 |
如果 root 包装器未正确执行,可以在 nova.conf 配置文件中添加一个解决方法选项。此解决方法会将 root 包装器配置重新配置为回退到以 sudo 运行命令,这是 Kilo 版本的特性。
将此解决方法包含在您的配置文件中,可以保护您的环境免受可能损害 root 包装器性能的问题影响。例如,影响 Python Build Reasonableness (PBR) 的工具更改是一个已知问题,会影响 root 包装器性能。
要设置此解决方法,请在 nova.conf 配置文件的 [workaround] 部分中配置 disable_rootwrap 选项。
过滤器定义文件包含 rootwrap 将用于允许或拒绝特定命令的过滤器的列表。它们通常以 .filters 为后缀。由于它们位于受信任的安全路径中,因此它们需要只能由 root 用户拥有和可写。它们的位置在 rootwrap.conf 文件中指定。
过滤器定义文件使用带有 [Filters] 部分和多行的 INI 文件格式,每行都有一个唯一的参数名称,该名称应与您定义的每个过滤器不同
配置选项=默认值 |
(类型) 描述 |
[Filters] filter_name=kpartx: CommandFilter, /sbin/kpartx, root |
(ListOpt) 逗号分隔的列表,包含要使用的过滤器类,后跟过滤器参数(具体取决于所选的过滤器类)。 |
配置 rootwrap 守护进程¶
管理员可以使用 rootwrap 守护进程支持,而不是使用 sudo 运行 rootwrap。rootwrap 守护进程减少了使用 sudo 运行 oslo.rootwrap 产生的开销和性能损失。每次需要 rootwrap 权限的调用都需要一个新的 rootwrap 实例。守护进程可以防止重复调用造成的开销。但是,守护进程不支持长期运行的进程。
要启用 rootwrap 守护进程,请在 Compute 服务配置文件中将 use_rootwrap_daemon 设置为 True。