当前位置: 首页 > 知识库问答 >
问题:

节点。js错误:getaddrinfo Enotfind在chroot jail中发出http请求

戴化
2023-03-14

我正在尝试执行一个节点。js子进程,以防止它访问其目录之外的文件系统

但是,当我这样做时,应用程序无法再通过“请求”模块发出http请求。我提出的任何请求都以“错误:getaddrinfo ENOTFOUND”结尾。

节点中有一个问题已解决。js项目似乎建议您需要替换dns的实现。查找或复制/等/解决。进入监狱(对我来说都不管用):https://github.com/joyent/node/issues/3399

还有一个谷歌群组线程:https://groups.google.com/forum/#!主题/nodejs/Qb_LMLulZS4

这似乎建议您应该“将绑定库及其所有依赖项也放入监狱”我不明白这种说法。

有没有人能正确地使用它来分享他们所做的事情?

共有2个答案

单勇
2023-03-14

我不知道child进程中的chroot。

但是对于使用chroot npm包,我发现如果我使用了dns。lookup()在chroot之前,dns查找即使在chroot之后也能正常工作。

<代码>dns。lookup()将在chroot之前将调用getaddrinfo()所需的库加载到内存中。

拓拔安邦
2023-03-14

也许这并不能回答你的问题,但我想提供我的研究结果。

var ls = require('child_process').spawn('chroot', ['/mnt/chroot/wheezy-chroot', 'node', '/root/simple-server.js']);

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);
});

这个脚本工作正常——simple-server.js听并回答帖子查询,所以我想问:你如何创建你的chroot环境?我已经使用Debian的debootstrap实用程序创建了我的:

cd /mnt/chroot/
dehtml" target="_blank">bootstrap wheezy ./wheezy-chroot http://ftp.us.debian.org/debian
cd wheezy-chroot

然后像往常一样挂载proc、sys和dev:

mount -t proc none proc
mount --rbind /dev dev
mount --rbind /sys sys

此外,我还装载了usr/local以访问节点。我建议“将绑定库及其所有依赖项也放入监狱。”语句意味着挂载您需要的所有东西,例如,在我的情况下,挂载-o bind/usr/local/mnt/chroot/wheezychroot/usr/local。

如果我完全没有回答,我会留下这个链接:https://github.com/magne4000/node-jail--也许你觉得这个软件包有用。

最后一件事:据我所知,chroot在某些情况下不是安全的解决方案(http://en.wikipedia.org/wiki/Chroot#Limitations). 也许你应该看看像FreeBSD监狱甚至LXC这样的机制。

 类似资料:
  • 我试图使用node连接mongodb。js。我偶然发现了一个问题。我正在得到要求(…)。pure不是函数错误。我试图使用这个网站上的确切代码“https://mongodb.github.io/node-mongodb-native/api-generated/collection.html“我的代码如下所示。 请让我知道你的建议。

  • 在Bluemix上使用Node-Red编辑器时,我添加了一个超文本传输协议请求节点。但是,当我点击“部署”时,我看到以下错误: 有没有其他方法可以找出可能出错的地方,并获得更有帮助的错误信息? 以下是我使用的选项: 该URL来自JSONPlaceHolder,这是一个免费的在线REST测试服务。 谢谢你

  • 我已经启动了一个节点。使用express generator的js应用程序,我遇到了一个奇怪的问题,无法通过浏览器查看页面两次,第一次加载正常,第二次加载不正常,因为节点进程以以下错误结束: 包裹json

  • 本文向大家介绍在React.js中发出HTTP请求,包括了在React.js中发出HTTP请求的使用技巧和注意事项,需要的朋友参考一下 在典型的Web应用程序中,客户端通过浏览器发出http请求,而服务器在响应中发送带有数据的html页面。 但是在单页应用程序(SPA)中,我们只有一页,每当客户端向服务器发出http请求时,它通常都会以json / xml格式的数据进行响应。 为了发出http请求

  • 我正在努力学习dialogflow教程。我已经设置了一个节点。js webhook,从Dialogflow调用,在我调用api的webhook代码中。但是,我的节点。js webhook说“错误:getaddrinfo ENOTFOUND”。当我在可视化代码中运行它时,它工作得很好,但当通过DialogFlow调用时,在nodejs webhook中找不到api。从Dialogflow调用它的事实

  • 这是我的模型。 这是我的控制器用户。js: app.post('/Signup/',函数(req, res){{console.log(req.body.username); User.new用户( 这个概念是一旦用户名/密码被接受,一个API密钥将与用户名一起存储。虽然,用户名负载正在被接受,但是当我执行UserApiSchema调用来生成api时,没有生成这样的api。也没有错误。