我正在开发一个平台,用户可以在其中创建自己的“小部件”,小部件基本上是js片段(将来也会有html和css) 。沙盒由在服务器上运行的用户编写的node.js脚本
问题是,即使用户不在网站上,他们也必须运行,所以基本上我的服务将不得不安排那些用户脚本随时运行。
我想弄清楚哪个是“沙箱”脚本的最佳方式,我首先想到的是在Docker内部自己的进程上运行的想法之一,所以让我们说用户管理以某种方式进入外壳它将是一个虚拟机,并希望他会被锁定在里面。
我不是一个Docker专家,所以我甚至不确定这是否合理,反正会产生另一个问题,即纺织数百个码头运行一个简单的JavaScript代码段。
是否有任何“安全”的方式来做到这一点?也许在空范围上运行脚本,并以某种方式删除对“require”方法的访问?
另一个要求是在脚本超时后终止它。
编辑: - 发现他们在其中的脚本,并运行它创建的脚本在运行容器的图像此相关stackexchange link
你会提出任何我应该真正关注的设置吗? 例如,假设用户从node.js获取shell,我怎么能确定他不会“摆脱docker”和“拥有”我的主机? – kroe
没有已知的安全漏洞,用户可以用最新的内核和最新的docker版本打破容器。只要你保持码头和你的内核更新,任何已知的漏洞都可以迅速修复,因为这对很多人来说都是一个大问题。 –
用户只需上传一个javascript并运行在一个节点进程上。 所以我想我可以以某种方式删除对“系统方法”的访问权限,所以他希望不会碰到文件系统或缓冲区溢出的东西? – kroe