首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Linux的沙箱中运行不受信任的C程序,阻止其打开文件、派生等。

在Linux的沙箱中运行不受信任的C程序,阻止其打开文件、派生等。
EN

Stack Overflow用户
提问于 2010-11-23 02:50:10
回答 9查看 50.6K关注 0票数 115

我想知道是否有一种方法可以在Linux的沙箱下运行不受信任的C程序。什么会阻止程序打开文件、网络连接、forking、exec等?

这将是一个小程序,一个家庭作业,上传到服务器并在其上执行单元测试。因此,该程序将是短暂的。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-11-23 03:08:31

我已经使用Systrace以交互和自动模式对不受信任的程序进行沙箱保护。它有一个ptrace()-based后端,可以在没有特殊特权的情况下在Linux系统上使用,以及一个更快、更强大的后端,这需要对内核打补丁。

使用chroot(1)在类Unix系统上创建沙箱也是可能的,尽管这并不容易或不安全。与chroot相比,Linux ContainersFreeBSD jails是更好的选择。在Linux上的另一种选择是使用像SELinuxAppArmor这样的安全框架,这也是我建议用于生产系统的安全框架。

如果你告诉我们你到底想做什么,我们就能给你更多的帮助。

编辑:

Systrace适用于您的情况,但我认为基于Linux Security Model的东西,如AppArmor或SELinux,是更标准的,因此是首选的替代方案,这取决于您的发行版。

EDIT 2:

chroot(1)在大多数情况下都可用(所有?)类Unix系统,它有相当多的问题:

  • 它可以被打破。如果您要在系统上实际编译或运行不受信任的C程序,则特别容易受到此问题的影响。如果你的学生像我的学生一样,有人会试图越狱,

  • ,你必须创建一个完全独立的文件系统层次结构,包含你的任务所需的一切。chroot中不一定要有编译器,但应该包含运行编译后的程序所需的所有内容。虽然有一些实用程序可以帮助你做到这一点,但它仍然不是微不足道的。
  • 你必须维护chroot。因为它是独立的,所以chroot文件不会随您的发行版一起更新。您必须定期重新创建chroot,或者在其中包含必要的更新工具,这本质上要求它是一个成熟的Linux发行版。您还必须保留系统和用户数据(密码、输入文件e.t.c.)与主机同步的system.
  • chroot()仅保护文件系统。它不能阻止恶意程序打开网络套接字,或者阻止编写糟糕的程序吞噬所有可用的资源。

资源使用问题在所有备选方案中都很常见。Filesystem quotas将阻止程序填满磁盘。适当的ulimit (C中的setrlimit())设置可以防止内存过度使用和任何分叉炸弹,并阻止CPU占用。nice(1)可以降低这些程序的优先级,这样计算机就可以毫无问题地执行任何被认为更重要的任务。

票数 48
EN

Stack Overflow用户

发布于 2011-04-11 19:28:40

我最近写了一个overview of sandboxing techniques in Linux。我认为最简单的方法是使用Linux容器(lxc),如果您不介意forking等,这在这个环境中并不重要。你可以给进程一个只读的根文件系统,一个隔离的环回网络连接,你仍然可以很容易地杀死它并设置内存限制等。

Seccomp会有点困难,因为代码甚至不能分配内存。

Selinux是另一种选择,但我认为它可能比容器更麻烦。

票数 18
EN

Stack Overflow用户

发布于 2017-01-19 07:40:32

Firejail是最全面的工具之一-它支持seccomp,文件系统容器,功能和更多:

https://firejail.wordpress.com/features-3/

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4249063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档