我想知道是否有一种方法可以在Linux的沙箱下运行不受信任的C程序。什么会阻止程序打开文件、网络连接、forking、exec等?
这将是一个小程序,一个家庭作业,上传到服务器并在其上执行单元测试。因此,该程序将是短暂的。
发布于 2010-11-23 03:08:31
我已经使用Systrace以交互和自动模式对不受信任的程序进行沙箱保护。它有一个ptrace()
-based后端,可以在没有特殊特权的情况下在Linux系统上使用,以及一个更快、更强大的后端,这需要对内核打补丁。
使用chroot(1)
在类Unix系统上创建沙箱也是可能的,尽管这并不容易或不安全。与chroot相比,Linux Containers和FreeBSD jails是更好的选择。在Linux上的另一种选择是使用像SELinux或AppArmor这样的安全框架,这也是我建议用于生产系统的安全框架。
如果你告诉我们你到底想做什么,我们就能给你更多的帮助。
编辑:
Systrace适用于您的情况,但我认为基于Linux Security Model的东西,如AppArmor或SELinux,是更标准的,因此是首选的替代方案,这取决于您的发行版。
EDIT 2:
而chroot(1)
在大多数情况下都可用(所有?)类Unix系统,它有相当多的问题:
,
chroot()
仅保护文件系统。它不能阻止恶意程序打开网络套接字,或者阻止编写糟糕的程序吞噬所有可用的资源。资源使用问题在所有备选方案中都很常见。Filesystem quotas将阻止程序填满磁盘。适当的ulimit
(C中的setrlimit()
)设置可以防止内存过度使用和任何分叉炸弹,并阻止CPU占用。nice(1)
可以降低这些程序的优先级,这样计算机就可以毫无问题地执行任何被认为更重要的任务。
发布于 2011-04-11 19:28:40
我最近写了一个overview of sandboxing techniques in Linux。我认为最简单的方法是使用Linux容器(lxc),如果您不介意forking等,这在这个环境中并不重要。你可以给进程一个只读的根文件系统,一个隔离的环回网络连接,你仍然可以很容易地杀死它并设置内存限制等。
Seccomp会有点困难,因为代码甚至不能分配内存。
Selinux是另一种选择,但我认为它可能比容器更麻烦。
发布于 2017-01-19 07:40:32
Firejail是最全面的工具之一-它支持seccomp,文件系统容器,功能和更多:
https://stackoverflow.com/questions/4249063
复制相似问题