首页 > 其他分享 >设备白名单控制器 【ChatGPT】

设备白名单控制器 【ChatGPT】

时间:2023-12-09 22:00:44浏览次数:33  
标签:控制器 rwm devices 条目 cgroup 白名单 ChatGPT 设备

设备白名单控制器

1. 描述

实现一个 cgroup 来跟踪和强制设备文件的打开和 mknod 限制。设备 cgroup 将设备访问白名单与每个 cgroup 关联起来。白名单条目有 4 个字段。'type' 是 (all)、c (字符) 或 b (块)。'all' 表示它适用于所有类型和所有主次编号。主次编号可以是整数,也可以是 * 表示所有。访问是 r (读)、w (写) 和 m (mknod) 的组合。

根设备 cgroup 从 'all' 开始具有 rwm。子设备 cgroup 获取父级的副本。管理员可以从白名单中移除设备或添加新条目。子 cgroup 永远不会接收被其父级拒绝的设备访问。

2. 用户界面

使用 devices.allow 添加条目,使用 devices.deny 移除条目。例如:

echo 'c 1:3 mr' > /sys/fs/cgroup/1/devices.allow

允许 cgroup 1 读取和 mknod 设备,通常被称为 /dev/null。执行:

echo a > /sys/fs/cgroup/1/devices.deny

将移除默认的 'a : rwm' 条目。执行:

echo a > /sys/fs/cgroup/1/devices.allow

将添加 'a : rwm' 条目到白名单中。

3. 安全性

任何任务都可以在 cgroup 之间移动。这显然是不够的,但随着人们对此有了一些经验,我们可以决定适当限制移动的最佳方式。我们可能只想要求 CAP_SYS_ADMIN,至少这是与 CAP_MKNOD 不同的一个单独的位。我们可能只想拒绝移动到不是当前 cgroup 的后代的 cgroup。或者我们可能想使用 CAP_MAC_ADMIN,因为我们确实正在尝试锁定 root。

需要 CAP_SYS_ADMIN 来修改白名单或将另一个任务移动到新的 cgroup。(再次,我们可能会想要更改这一点)。

cgroup 不得被授予比其父 cgroup 更多的权限。

4. 层次结构

设备 cgroup 通过确保 cgroup 永远不具有比其父级更多的访问权限来维护层次结构。每当向 cgroup 的 devices.deny 文件写入条目时,所有子级将从其白名单中移除该条目,并重新评估所有本地设置的白名单条目。如果本地设置的白名单条目中有一个比 cgroup 的父级提供更多访问权限的条目,它将从白名单中移除。

示例:

  A
 / \
    B

组          行为          异常
A           允许          "b 8:* rwm", "c 116:1 rw"
B           拒绝          "c 1:3 rwm", "c 116:2 rwm", "b 3:* rwm"

如果在组 A 中拒绝了一个设备:

echo "c 116:* r" > A/devices.deny

它将向下传播,在重新验证 B 的条目后,白名单条目 "c 116:2 rwm" 将被移除:

组          白名单条目                        被拒绝的设备
A           all                              "b 8:* rwm", "c 116:* rw"
B           "c 1:3 rwm", "b 3:* rwm"         所有其余设备

如果父级的异常更改,本地异常不再允许,它们将被删除。

请注意,新的白名单条目不会被传播:

  A
 / \
    B

组          白名单条目                        被拒绝的设备
A           "c 1:3 rwm", "c 1:5 r"           所有其余设备
B           "c 1:3 rwm", "c 1:5 r"           所有其余设备

当添加 c *:3 rwm 时:

echo "c *:3 rwm" > A/devices.allow

结果为:

组          白名单条目                        被拒绝的设备
A           "c *:3 rwm", "c 1:5 r"           所有其余设备
B           "c 1:3 rwm", "c 1:5 r"           所有其余设备

但现在可以向 B 添加新条目:

echo "c 2:3 rwm" > B/devices.allow
echo "c 50:3 r" > B/devices.allow

甚至:

echo "c *:3 rwm" > B/devices.allow

通过向 devices.allow 或 devices.deny 写入 'a' 来允许或拒绝所有将不再可能,一旦设备 cgroup 具有子级。

4.1 层次结构(内部实现)

设备 cgroup 在内部使用行为(允许、拒绝)和异常列表来实现。内部状态使用相同的用户界面来控制,以保持与先前仅白名单实现的兼容性。向下传播将删除或添加减少对设备访问的异常。对于每个传播的异常,将根据当前父级的访问规则重新评估有效规则。

标签:控制器,rwm,devices,条目,cgroup,白名单,ChatGPT,设备
From: https://www.cnblogs.com/pengdonglin137/p/17891635.html

相关文章

  • Cgroup Freezer 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/freezer-subsystem.htmlCgroupFreezercgroup冷冻器对于批处理作业管理系统非常有用,该系统可以启动和停止一组任务,以便根据系统管理员的需求安排机器的资源。这种程序通常用于HPC集群,以安排对整个集群的访问。cgr......
  • CPUSETS 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cpusets.htmlCPUSETS1.Cpusets1.1什么是cpusets?Cpusets提供了一种机制,用于将一组CPU和内存节点分配给一组任务。在本文档中,“内存节点”指的是包含内存的在线节点。Cpusets限制了任务的CPU和内存放置......
  • 控制组 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cgroups.html控制组由[email protected]编写,基于CPUSETS来自CPUSETS的原始版权声明:部分版权所有(C)2004BULLSA。部分版权所有(c)2004-2006SiliconGraphics,Inc.由[email protected]修改......
  • Block IO 控制器 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/blkio-controller.htmlBlockIO控制器概述cgroup子系统"blkio"实现了块IO控制器。在存储层次结构中,似乎需要各种类型的IO控制策略(如比例带宽、最大带宽),无论是在叶节点还是在中间节点都需要。计划是使用......
  • CPU核算控制器 【ChatGPT】
    原文:https://www.kernel.org/doc/html/v6.6/admin-guide/cgroup-v1/cpuacct.htmlCPU核算控制器CPU核算控制器用于使用cgroups对任务进行分组,并核算这些任务组的CPU使用情况。CPU核算控制器支持多层级分组。一个核算组累积其所有子组和直接存在于其组中的任务的CPU使用情况。可......
  • RCU补丁审查清单 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/RCU/checklist.htmlRCU补丁审查清单本文档包含了一个用于生成和审查使用RCU的补丁的清单。违反以下列出的任何规则都会导致与省略锁原语相同类型的问题。这份清单基于审查这类补丁的经验,经历了相当长的一段时间,但总是欢迎改进!RCU是否......
  • Linux通用中断处理 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/genericirq.htmlLinux通用中断处理版权©2005-2010:ThomasGleixner©2005-2006:IngoMolnar简介通用中断处理层旨在为设备驱动程序提供完整的中断处理抽象。它能够处理所有不同类型的中断控制器硬件。设备驱动程序使用......
  • 循环缓冲区 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/circular-buffers.html循环缓冲区作者[email protected]@linux.ibm.comLinux提供了许多功能,可用于实现循环缓冲区。有两组这样的功能:用于确定2的幂大小缓冲区信息的便利函数。......
  • Linux中的红黑树(rbtree)【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/rbtree.html红黑树(rbtree)在Linux中日期2007年1月18日作者[email protected]红黑树是什么,它们有什么作用?红黑树是一种自平衡的二叉搜索树,用于存储可排序的键/值数据对。这与基数树(用于高效存储稀疏数组,因......
  • 本地原子操作的语义和行为 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/core-api/local_ops.html这篇文档介绍了本地原子操作的语义和行为,以及如何在任何给定的架构中实现它们,并展示了它们如何被正确地使用。它还强调了在读取这些本地变量时必须采取的预防措施,特别是当内存写入的顺序很重要时。注意请注意,......