Linux - 没有容器的隔离进程

Linux - 没有容器的隔离进程

我正在构建一个具有在线裁判系统功能的系统。我需要运行所有可执行文件并评估它们的输出。问题是,如果将它们全部放置在一个容器中,则在不同的文件夹中,其中一个应用程序可能会尝试退出其文件夹并访问属于另一个应用程序的另一个文件夹。在这种情况下,主服务器将受到保护,但其他应用程序和评估程序都不会受到保护。

我已经找到了自己的解决方案,但我认为有更好的解决方案,例如我将创建 5 个容器,每个容器都将运行相同的算法,并且每个容器一次评估 1 个问题。评估问题后,将删除该问题并收到另一问题。在这种情况下,主服务器和所有应用程序都将受到保护,但评估器不会受到保护。评估的应用程序可能会退出其文件夹并开始写入随机文本文件,例如,填充整个内存。

评估器将启动可执行文件,测量它的时间(如果超过 1 或 2 秒,它将杀死它)和它使用的内存(如果它达到一定的限制,它将杀死它)。

我还想过每次创建一个容器并在评估可执行文件后删除它,但创建和启动容器只需要几秒钟......

如何将评估过程与容器和评估器隔离?我基本上想阻止一个进程访问其他文件夹。

答案1

我没有阅读您的问题描述中任何会阻止您为应用程序创建不同用户帐户的内容。然后,您可以使用简单的文件权限来防止干扰:

chown app1 /var/lib/myapps/app1
chmod 700 /var/lib/myapps/app1
sudo -u app1 /var/lib/myapps/app1/run.sh

编辑

如果评估器正在运行,那么root它可以简单地通过 启动应用程序sudo

如果评估器没有运行,root那么它调用的应用程序(以正常方式)可以使用 SUID 位(设置用户 ID)进行安装,以便该进程将以拥有二进制文件的用户身份运行,而不是以评估者过程。

答案2

根据您的发行版和内核,您可以使用应用装甲 或者SELinux包含您的应用程序。总的来说,我认为 AppArmor 的设置和维护更方便。Ubuntu 维基有一些解释基本概念的文章。

答案3

如果没有遏制,我建议按照 Hauke Laging 的建议,由特定用户在 chroot 环境中运行应用程序。比照男子 chroot

设置很容易,复杂程度取决于您的应用程序需要访问哪些资源

相关内容