设置访问控制
目标 限制节点可以使用的主题。
辅导水平: 高级
时间 20 分钟
背景介绍
在继续之前,请确保您已完成 设置安全 教程。
权限非常灵活,可用于控制 ROS 图形中的许多行为。
在本教程中,我们将演示一种策略,该策略只允许在默认的 唠叨
主题。例如,这可以防止在启动监听器时重新映射主题,或将相同的安全飞地用于其他目的。
为了执行这一策略,我们需要更新 permissions.xml
文件,并在启动节点前重新签署。这可以通过手动修改权限文件或使用 XML 模板来实现。
修改 permissions.xml
首先备份权限文件,然后打开 permissions.xml
进行编辑:
CD ~/sros2_demo/demo_keystore/enclaves/talker_listener/talker mv 权限.p7s 权限 permissions.xml permissions.xml~ vi permissions.xml
我们将修改 <allow_rule>;
对于 发布
和 订阅;
.该 XML 文件中的主题使用 DDS 命名格式,而不是 ROS 名称。有关在 ROS 和 DDS 之间映射主题名称的详情,请参阅 主题和服务名称设计文件.
将以下 XML 内容粘贴到 permission.xml
保存文件并退出文本编辑器。这将显示 唠叨
和 莲雾
将 ROS 主题更名为 DDS rt/chatter
和 rt/rosout
分别是
<dds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:noNamespaceSchemaLocation="http://www.omg.org/spec/DDS-SECURITY/20170901/omg_shared_ca_permissions.xsd";>;
<权限>;
<grant 名称"/talker_listener/talker";>;
<主题名称>;CN=/talker_listener/talker</subject_name>;
有效性;
不早于 <not_before>;2021-06-01T16:57:53</not_before>;
不在之后;2031-05-31T16:57:53</not_after>;
</validity>;
<allow_rule>;
<domains>;
id>;0</id>;
</域>;
发布
<主题>;
<主题>;rt/chatter</topic>;
<主题>;rt/rosout</topic>;
<主题>;rt/parameter_events</topic>;
<主题>;*/talker/*</topic>;
</topics>;
</publish>;
订阅;
<主题>;
<主题>;rt/parameter_events</topic>;
<主题>;*/talker/*</topic>;
</topics>;
订阅</subscribe>;
</allow_rule>;
<allow_rule>;
<domains>;
id>;0</id>;
</域>;
发布
<主题>;
<主题>;ros_discovery_info(发现信息</topic>;
</topics>;
</publish>;
订阅;
<主题>;
<主题>;ros_discovery_info(发现信息</topic>;
</topics>;
订阅</subscribe>;
</allow_rule>;
默认值;拒绝</default>;
</grant>;
</permissions>;
</dds>;
该政策允许发言者在 唠叨
和 莲雾
主题。它还允许发布和订阅谈论者节点管理参数(所有节点都需要)所需的权限。发现权限与原始模板保持不变。
签署政策文件
下一条命令将创建新的 S/MIME 签名策略文件 权限.p7s
从更新的 XML 文件中 permissions.xml
.文件必须使用 Permissions CA 证书签名、 这需要访问权限 CA 私钥.如果私人密钥受到保护,则可能需要根据安全计划采取其他步骤才能解锁和使用。
opensl 默记 -签名 -文本 -在 permissions.xml -退出 权限.p7s \
--签署人 permissions_ca.cert.pem \
-钥匙 ~/sros2_demo/demo_keystore/private/permissions_ca.key.pem
启动节点
更新权限后,我们就可以使用之前教程中使用的相同命令成功启动节点了:
玫瑰2 运行 演示节点 话匣子 --ros-args --飞地 /talker_listener/talker
然而,试图重新映射 唠叨
主题阻止节点启动(注意,这需要使用 安全战略
设为 执行
).
玫瑰2 运行 演示节点 话匣子 --ros-args --飞地 /talker_listener/talker \
--remap 唠叨:=不唠叨
使用模板
安全策略很快就会变得混乱,因此 sros2
实用程序添加了从模板创建策略的功能。使用 政策文件样本 中提供的 sros2
仓库。让我们同时为 话匣子
和 听众
只使用 唠叨
主题。
首先下载 sros2
存储库中的示例策略文件:
笨蛋 复制 https://github.com/ros2/sros2.git /tmp/sros2
然后使用 创建许可
动词,同时指向样本策略以生成 XML 权限文件:
玫瑰2 安全 创建许可 demo_keystore \
/talker_listener/talker \
/tmp/sros2/sros2/test/policies/sample.policy.xml ros2 安全 创建许可 demo_keystore \
/talker_listener/listener \
/tmp/sros2/sros2/test/policies/sample.policy.xml
这些权限文件只允许节点发布或订阅 唠叨
并启用参数所需的通信。
在一个启用了安全功能的终端中,如前面的安全教程一样,运行 话匣子
演示程序:
玫瑰2 运行 演示节点 话匣子 --ros-args -e /talker_listener/talker
在另一个终端中使用 听众
计划
玫瑰2 运行 演示节点 听众 --ros-args -e /talker_listener/listener
此时,您的 话匣子
和 听众
节点将使用显式访问控制列表进行安全通信。不过,以下尝试 听众
节点来订阅除 唠叨
就会失败:
玫瑰2 运行 演示节点 听众 --ros-args --飞地 /talker_listener/listener \
--remap 唠叨:=不唠叨