将 ChainingRegExpFilter 添加到 rootwrap

https://blueprints.launchpad.net/oslo-incubator/+spec/chaining-regexp-filter

添加一个新的过滤器,该过滤器接受附加到其他命令的前缀实用程序,例如 ‘nice’ 和 ‘ionice’。这将提高配置文件可维护性。

问题描述

目前,我们没有一种好的方法来定义允许前缀实用程序的过滤器。例如,Cinder 使用 3 条 RegExpFilter 规则来允许 ‘ionice’ + ‘dd’ 命令,这些规则涵盖了各种 ‘dd’ 选项。但这容易受到 ‘dd’ 用法变化的影响(实际上,‘dd’ 的一个 bugfix 补丁已经破坏了这些规则:https://bugs.launchpad.net/cinder/+bug/1318748)。

提议的变更

通过添加 ChainingRegExpFilter,其配置格式如下,我们可以轻松添加一个新的过滤器,该过滤器接受前缀实用程序。

filter_name: ChainingRegExpFilter, <command>, <user>,

<参数的正则表达式列表>

此过滤器将正则表达式列表的长度视为要检查的参数数量,其余部分由其他过滤器检查。也就是说,指定为前缀实用程序参数的命令必须可以直接执行。

例如,‘ionice’+’dd’ 可以通过以下规则安全地接受(即,仅当其他过滤器接受以下命令时才接受)。

ionice: ChainingRegExpFilter, ionice, root, ionice, -c[0-3]( -n[0-7])?

‘dd’ 也必须允许直接执行(没有 ‘ionice’)。请注意,Cinder 当前使用 CommandFilter 作为默认值,允许 root 执行 ‘dd’。

备选方案

我们可以为每个前缀命令实现一个专门的过滤器类,例如 IpNetnsExecFilter,每次需要时都可以使用。这可能更容易在项目之间重用相同的规则,尽管这可能需要大量的类。ChainingRegExpFilter 更加通用,因此至少在找到可共享的实用程序之前仍然有用。

Impact on Existing APIs

无。

安全影响

必须仔细编写前缀实用程序的规则,以避免允许执行未检查的命令。例如,允许任何字符串(‘.*’)作为可以解释为要执行的命令的参数可能很危险。

性能影响

无。

Configuration Impact

新的过滤器 ‘ChainingRegExpFilter’ 将可用。

开发人员影响

无。

实现

负责人

主要负责人

tsekiyama

里程碑

完成目标里程碑

Juno-1

工作项

  1. 实现 ChainingRegExpFilter -> https://review.openstack.org/#/c/97336/

孵化

无。

采用

无。

无。

预计 API 稳定

无。

文档影响

应将 ChainingRegExpFilter 的用法添加到文档中。

依赖项

  • 此功能为 Cinder 提供了一种很好的方法来修复 ‘ionice’ 命令规则

  • 一个 Cinder 补丁,用于实现 I/O 速率限制,需要使用 rootwrap 执行 ‘cgexec’ 前缀实用程序(https://review.openstack.org/#/c/92894/

参考资料

无。

注意

本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode