Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用每个请求一个沙盒Python(VM)构建web服务_Python_Virtual Machine_Sandbox_Lxc - Fatal编程技术网

如何使用每个请求一个沙盒Python(VM)构建web服务

如何使用每个请求一个沙盒Python(VM)构建web服务,python,virtual-machine,sandbox,lxc,Python,Virtual Machine,Sandbox,Lxc,作为交互式工作的一部分,我想构建一个web服务,它接收Python代码片段,执行它,并向我提供生成的输出图像 为了安全起见,启动的Python实例应该是沙盒和资源控制的,所以我考虑使用LXC容器 这是解决问题的好方法吗?如果是这样的话,每个请求启动一个Python VM的推荐方法是什么?我不确定您是否真的需要设置LXC容器: 还有一个Python沙盒,它利用了Linux内核的特性 另一个选择是使用PyPy,它具有现成的功能 在任何情况下,都不要使用,因为它存在严重的安全风险。Stefan,也许“

作为交互式工作的一部分,我想构建一个web服务,它接收Python代码片段,执行它,并向我提供生成的输出图像

为了安全起见,启动的Python实例应该是沙盒和资源控制的,所以我考虑使用LXC容器


这是解决问题的好方法吗?如果是这样的话,每个请求启动一个Python VM的推荐方法是什么?

我不确定您是否真的需要设置LXC容器:

还有一个Python沙盒,它利用了Linux内核的特性

另一个选择是使用PyPy,它具有现成的功能

在任何情况下,都不要使用,因为它存在严重的安全风险。

Stefan,也许“Docker”可以使用?我得到的印象是,您可以约束运行应用程序的VM——一个示例web服务:

您可以尝试在Digital Ocean上运行该应用程序,如下所示:


[免责声明:我是Continuum公司的工程师,在Wakari工作]

Wakari Enterprise()的目标正是要做到这一点,我们希望将该功能移植到Wakari Cloud()中,这样“发布”的IPython笔记本电脑上就可以有一些旋钮用于变量输入控制,然后可以在沙盒状态下“调用”它们,然后将输出返回给用户

然而,对于现在存在的东西,你应该看看Sage笔记本。几年前,有几个人在Sage笔记本手机服务器上辛勤工作,它可以完全满足您的要求:执行小代码片段。从那以后我就没有跟踪过它,但通过快速搜索,它似乎还活着,而且状况良好:


对于最后一个URL,请查看Graphics->Mandelbrot,您可以看到Sage已经具备了一些强大的UI小部件功能,这些小部件与“单元执行”相关。

我认为docker是实现这一点的方法。这些实例重量非常轻,docker设计为一次生成100个实例(与传统的VMs相比,启动时间只有几秒钟)。配置正确,我相信它还为您提供了一个完整的沙盒环境。那么,尝试对python进行沙箱并不重要:-D

感谢这些指针。你知道PyPy是否能够运行科学工具包,包括numpy、scipy和scikit映像?另外,由于seccomp nurse不支持dlopen,我怀疑它能否运行这些包中大多数使用的Cython扩展。Pypy不支持numpy,请看这里:。对于科学堆栈,我建议使用anaconda()是一个免费的分发版。因此,对于每个请求,您都可以创建一个conda虚拟环境并在那里运行代码。是否可以保证从系统的其余部分对conda虚拟环境进行沙盒处理?另外,它是否允许资源限制(内存、CPU)?据我所知,Docker每次实例化时都会对映像进行更新。因为我可能会发布数千个这样的东西,这可能会有问题。你有什么经验?没有直接的经验,最近人们经常提到docker。Sage cell很有趣,您是否考虑过像flask应用程序这样非常简单的东西?编写flash应用程序不是问题,但将子流程沙盒化是主要的挑战。昨天,有人告诉我,docker能够在执行后丢弃任何更改,将图像恢复到原始状态,因此,也许我会进一步研究该选项。经过更多阅读,我认为这可以通过一个小型web app+docker来完成。我仍然不知道如何启动完美的沙盒Python实例,但我认为Sage细胞会解决我眼前的问题——谢谢!