小编Ste*_*phQ的帖子

最简单的安全沙箱(需要的资源有限)

我正在做一个实现分布式模拟的项目:在多个节点上执行任意代码,然后收集和聚合结果。

每个节点都是 Ubuntu Linux 虚拟机的一个实例,并运行一个主进程,负责将要执行的代码转发到多个工作进程(每个内核 1 个)。

这个问题是关于如何确保每个工作人员都在沙盒环境中运行,而不需要为每个工作人员使用虚拟机实例。对工人的确切要求是:

  • fs:无写权限,只读权限仅限于单个目录(和子文件夹)
  • net : 只允许本地通信(IPC、TCP 等等……)
  • mem:内存使用上限(无交换内存)如果超过内存限制则终止
  • cpu : 只允许 1 个核心,如果超过时间限制则杀死

不应强加其他限制:worker 应该能够加载动态库(从只读文件夹)、生成新线程或进程、调用系统函数、ecc ecc 但限制必须由生成/加载的实体继承和应该以总和的方式应用(例如,我们不能让一个工作线程产生两个线程,每个线程使用 800MB,这样的工作线程的内存限制为 1GB)。

不言而喻,工人应该没有办法提高自己的权利。

我花了大量时间审查可用的替代方案(SELinux、AppArmor、cgroups、ulimit、Linux 命名空间、LXC、Docker 等)以获得满足我的要求的最简单的解决方案,但我在该领域的经验有限。

目前的理解:LXC 和 Docker 对我的用例来说有点偏重,并不完全安全1。AppArmor 由于更容易配置而优于 SELinux,将其用于 fs 和 net 限制;cgroups 优于 ulimit(在单个进程上运行),将其用于 mem 和 cpu 限制。

这是实现我的目标的最简单方法吗?我可以只使用 AppArmor 或 cgroups 吗?我的模型中是否存在明显的安全漏洞?指导方针应该是“允许工人自己倒下,但不能做其他事情”

apparmor cgroups sandbox

17
推荐指数
1
解决办法
3209
查看次数

标签 统计

apparmor ×1

cgroups ×1

sandbox ×1