有没有办法在node.js中限制子进程对我的系统的访问?

vibhor1997a

我正在尝试为execute不同语言的程序构建服务node并提供输出。到目前为止,我使用child_processspawn产卵命令。

let p = spawn('python',[sourceFilePath]);

有没有一种方法可以限制对此child_process系统的访问network使其无法访问file system等?

罗伯特·罗斯曼

除了设置子进程的UID / GID(对于您的目标而言可能还不够)之外,Node.js本身不提供任何机制来将子进程限制为仅可用资源的子集。

请注意,将远程代码作为商业模型(即各种* fiddle.org,在线游乐场等)执行起来非常困难,因为保护主机操作系统是一项艰巨的任务。

我将假定您的程序最终将在Linux服务器上运行,因为这是当今可用于Node.js部署的最常见的服务器类型。涵盖所有类型的操作系统的此主题可能太广泛,可能没有帮助。

你的目标

  • 用用户提供的输入执行程序并将输出返回给用户
  • 限制该程序访问某些或所有I / O资源(文件系统,网络,主机OS信息,内存等)
  • 容忍恶意用户试图破坏/提取信息/破坏您的服务器等。

Node.js根本对这里没有帮助。Node可以产生一个子进程,仅此而已。它不控制任何这些I / O资源。内核可以我们必须研究Linux内核在这一领域提供的功能。

我找到了一篇非常详细的有关Linux沙箱的文章,我将以此为灵感。如果您有兴趣,我建议您阅读并搜索类似的内容。

低级:Linux名称空间

Linux内核提供了低级机制来隔离各种系统资源中的进程。尽管我觉得这对于您的用例来说太低级了,但您可能需要检查一下它们。

火狱

Firejail是一种工具,可将用于测试目的的流程与其他系统资源隔离开。我从未使用过它,但是看起来它可以用于您的用例。

容器(即Docker)

容器通常利用Linux名称空间来创建一个环境,即使它们允许与主机OS完全隔离,该环境对于在其中运行的进程来说也像完整的操作系统。在容器内运行程序时,可以限制网络访问,文件系统访问,甚至CPU /内存使用。

给定您的用例,我可能会采用容器隔离,因为如今它们周围的社区非常庞大,这增加了您找到正确的支持/文档​​以实现目标的可能性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章