使用 Node.JS 创建一个无法访问任何更高级别文件的子进程?

Create a child process which cannot access any files a level above with Node.JS?

我正在尝试开发一个 Node.JS 应用程序,允许用户创建自己的节点应用程序,运行 作为主 Node.JS 应用程序的子进程。我遇到的问题是我不知道如何只允许相应的子进程访问和执行它自己的文件夹中的文件,例如。我不希望子进程能够看到另一个用户的文件。

我认为我可以 运行 在它自己的文件夹中创建一个子进程,并且只允许从随附的文件和主 Node.JS 应用程序(父级)访问该文件夹。

我不知道我怎么能做到这一点,但我认为我可以通过使用 chmod 来做到这一点,但我不知道它是如何工作的,我是不确定我如何才能只允许从父进程和封闭文件访问,而不是从其他任何地方访问?

我附上了我希望数据流如何发生的图表,以防我没有正确解释:

非常感谢!

您在问题中提到了 chmod,所以我假设您使用的是类似 *nix 的操作系统。

您可以使用 chroot jail for this. There's an npm module, chroot,这会有所帮助。这是他们文档中的示例:

Bind a TCP server to a privileged port before dropping privileges.

var net = require('net');
var chroot = require('chroot');

var server = net.createServer();
server.listen(80, function(err) {
  if (err) { throw err; }

  try {
    chroot('/var/empty', 'nobody');
    console.log('changed root to "/var/empty" and user to "nobody"');
  } catch(err) {
    console.error('changing root or user failed', err);
    process.exit(1);
  }
});

第一个参数是应该被子进程视为“root”的位置。