我想知道是否存在在Linux下的沙箱下运行不受信任的C程序的方法.什么会阻止程序打开文件,网络连接,分叉,执行等?
它将是一个小程序,一个家庭作业,它被上传到服务器并在其上执行单元测试.所以该计划将是短暂的.
我想创建一个Web应用程序,允许用户上传一些C代码,并查看其执行结果(代码将在服务器上编译).用户不受信任,这显然具有一些巨大的安全隐患.
所以我需要为应用程序创建一些沙盒.在最基本的层面上,我想限制对某些指定目录的文件系统访问.我无法直接使用chroot jails,因为Web应用程序不是以特权用户身份运行.我想一个suid可执行文件设置jail将是一个选项.
上传的程序相当小,因此它们应该快速执行(最多几秒钟).因此,我可以在预设超时后终止进程,但是如何确保它不会产生新进程?或者,如果我不能,那么杀死整个pgid是一种可靠的方法吗?
除了"根本不做"之外,最好的方法是什么?:)我错过了哪些其他明显的安全问题?
FWIW,Web应用程序将用Python编写.
我正在尝试运行从未知来源的C代码编译的程序.我想确保程序不会损害我的系统.例如,system("rm -rf /")除非彻底检查代码,否则程序可能在源代码中有类似的内容,这是不可检测的.
我想到了以下两种方式
两者都不是非常优雅的解决方案,我不能自动化它们.而且,如果是1,它可能会损害VM.
任何帮助,将不胜感激.
我想在我们称之为"沙盒"的程序中运行该程序.
我有一个Web服务,用户上传在服务器上运行的python脚本.这些脚本处理在服务器上的文件,我希望他们能够看到仅在服务器的文件系统中某一层级(最好:关于这一点我复制我要处理的文件和脚本的临时文件夹).
服务器最终将是基于Linux的服务器,但如果在Windows上也可以使用解决方案,那么知道如何解决这个问题会很好.
我的目的是创建一个限制访问FS文件夹的用户 - 最终只包含脚本和文件的文件夹 - 并使用该用户启动python解释器.
有人可以给我一个更好的选择吗?因为只依靠这个让我觉得不安全,我想要一个真正的沙盒或虚拟FS功能,我可以安全地运行不受信任的代码.