我已经使用
Systrace到沙箱不受信任的程序交互式和自动模式。它有一个基于
ptrace()的后端,允许它在没有特殊权限的Linux系统上使用,以及一个更快,更强大的后端,需要修补内核。
也可以使用chroot(1)在类Unix系统上创建一个沙盒,虽然这不是那么容易或安全。 Linux Containers和FreeBSD jails是chroot的更好的替代品。在Linux上的另一个替代方案是使用像SELinux或AppArmor这样的安全框架,这是我建议的生产系统。
我们将能够帮助你更多,如果你告诉你,究竟是什么,你想做的。
编辑:
Systrace会为你的情况工作,但我认为基于Linux Security Model的东西,如AppArmor或SELinux是一个更标准的,因此首选,替代,这取决于您的分布。
编辑2:
虽然chroot(1)可用于大多数(所有?)类Unix系统,它有很多问题:
>它可以打破。如果你要在系统上实际编译或运行不受信任的C程序,你特别容易遇到这个问题。如果你的学生是我的,有人会试图打破监狱。
>您必须创建一个完整的独立文件系统层次结构,其中包含任务所需的所有内容。你不必在chroot中有一个编译器,但是应该包括运行编译的程序所需的任何东西。虽然有些实用程序可以帮助这一点,但它仍然不是微不足道。
>你必须维护chroot。因为它是独立的,所以chroot文件不会随着你的发行版一起更新。您必须定期重新创建chroot,或者在其中包含必要的更新工具,这本质上要求它是一个完整的Linux发行版。您还必须保持系统和用户数据(密码,输入文件e.t.c.)与主机系统同步。
> chroot()只保护文件系统。它不能防止恶意程序打开网络套接字或一个不好写的,从吸吮每一个可用的资源。
资源使用问题在所有备选方案中是常见的。 Filesystem quotas将阻止程序填充磁盘。正确的ulimit(C的setrlimit())设置可以防止内存过度使用和任何叉车炸弹,以及停止CPU猪。 nice(1)可以降低这些程序的优先级,以便计算机可以用于任何被认为更重要且没有问题的任务。