我正在做一个在线python编译器项目。当用户发送python时,服务器将执行它。我想做的是,创建一个带有虚拟文件系统的沙箱,执行该脚本,并且该沙箱应该远离真实服务器的文件系统,但nodejs应该能够控制该沙箱的stdin和stdout。
如何使之成为可能?
Docker是沙盒处理事物的好方法。
你可以运行
docker run --network none python:3
从您的节点.js服务器。查看 docker 运行的其他开关,以插入尽可能多的安全漏洞。
关键是,你从节点.js服务器运行docker命令,并通过stdin传递用户的python代码。
现在,如果你的节点.js服务器在一台机器上,而 sendbox 应该在另一台机器上运行,你告诉 docker 使用DOCKER_HOST
环境变量连接到另一台机器。
Docker容器将软件包装在一个完整的文件系统中,其中包含运行所需的一切:代码,运行时,系统工具,系统库 - 基本上是您可以在服务器上安装的任何内容。这保证了无论它在什么环境中运行,它都将始终以相同的方式运行。
这可能值得一读 https://instabug.com/blog/the-difference-between-virtual-machines-and-containers/