在沙箱中的Linux上运行不受信任的应用程序

use*_*973 7 sandbox selinux embedded-linux

我们有一台运行Linux的设备,我们需要在此上运行不受信任的应用程序.我们正在努力减轻以下安全问题 -

  1. 不受信任的应用程序不应该对核心OS数据和二进制文件产生负面影响
  2. 不受信任的应用程序不应该对另一个应用程序的数据和二进制文件产生负面影响
  3. 不受信任的应用程序不应该消耗过多的CPU,内存或磁盘,并导致DoS /资源不足,如核心操作系统或其他应用程序

从不受信任的应用程序角度来看,它只需要能够读取和写入自己的目录,也可能是已安装的USB驱动器

我们正在考虑使用以下方法之一 -

方法1 - 使用SELinux作为沙箱

  • 这可能吗?我已经阅读了一些SELinux,它在设置策略文件和在运行时强制执行等方面看起来有点复杂.SELinux可以这样做并限制不受信任的应用程序只读/写自己的目录,也能够设定配额限制?

方法2 - 自己创建一个新的沙箱

  • 在安装期间

    • 为每个不受信任的应用程序创建新的应用程序用户
    • 使用权限标记整个应用程序目录和文件,以便只有应用程序用户可以读写
    • 使用ulimit/quota为应用程序用户设置配额
  • 在运行时,使用启动不受信任的应用程序

    • 关闭所有打开的文件描述符/句柄
    • 使用chroot将root设置为应用程序目录
    • 在应用程序用户的上下文中启动应用程序

关于上述的想法?哪种方法比另一种更安全?还有其他方法可能更好吗?由于某些原因,我们无法选择移动Android,因此我们无法使用Android本身提供的沙盒功能...

让我知道

谢谢,

小智 1

SELinux 是一组规则,其应用有点类似于用户权限甚至更复杂。您可以为每个进程使用它来设置该进程的域并允许或拒绝几乎任何访问。它意味着对文件、网络或进程/线程的访问。这样它就可以用作一种沙箱。但是,您必须为每个进程准备一个规则集,或者您可以制作一个必须在沙盒应用程序之前运行的脚本来准备规则本身。

如果您想控制 CPU 消耗,SELinux 没有 CPU 规划器,因为任何规则都只有“允许”或“拒绝”访问这两个逻辑结果之一。我建议您使用“cgroups”来控制 CPU 消耗。