我正在尝试为execute
不同语言的程序构建服务node
并提供输出。到目前为止,我使用child_process
的spawn
产卵命令。
let p = spawn('python',[sourceFilePath]);
有没有一种方法可以限制对此child_process
系统的访问network
,使其无法访问file system
等?
除了设置子进程的UID / GID(对于您的目标而言可能还不够)之外,Node.js本身不提供任何机制来将子进程限制为仅可用资源的子集。
请注意,将远程代码作为商业模型(即各种* fiddle.org,在线游乐场等)执行起来非常困难,因为保护主机操作系统是一项艰巨的任务。
我将假定您的程序最终将在Linux服务器上运行,因为这是当今可用于Node.js部署的最常见的服务器类型。涵盖所有类型的操作系统的此主题可能太广泛,可能没有帮助。
Node.js根本对这里没有帮助。Node可以产生一个子进程,仅此而已。它不控制任何这些I / O资源。内核可以。我们必须研究Linux内核在这一领域提供的功能。
我找到了一篇非常详细的有关Linux沙箱的文章,我将以此为灵感。如果您有兴趣,我建议您阅读并搜索类似的内容。
Linux内核提供了低级机制来隔离各种系统资源中的进程。尽管我觉得这对于您的用例来说太低级了,但您可能需要检查一下它们。
Firejail是一种工具,可将用于测试目的的流程与其他系统资源隔离开。我从未使用过它,但是看起来它可以用于您的用例。
容器通常利用Linux名称空间来创建一个环境,即使它们允许与主机OS完全隔离,该环境对于在其中运行的进程来说也像完整的操作系统。在容器内运行程序时,可以限制网络访问,文件系统访问,甚至CPU /内存使用。
给定您的用例,我可能会采用容器隔离,因为如今它们周围的社区非常庞大,这增加了您找到正确的支持/文档以实现目标的可能性。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句