어쩌면 당신의 질문에 대답하지 않을지도 모르지만, 나는 나의 연구 결과를 제공하고 싶다. 어떻게 당신이 당신의 chroot 환경을 만들려면 어떻게해야합니까 : 그래서 내가 물어보고 싶은 예상대로 간단 server.js 듣고 응답 후 쿼리 -
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);
});
이 스크립트는 제대로 작동? 평소와 같이
cd /mnt/chroot/
debootstrap wheezy ./wheezy-chroot http://ftp.us.debian.org/debian
cd wheezy-chroot
다음 mount
시저, SYS 및 dev에 :
mount -t proc none proc
mount --rbind /dev dev
mount --rbind /sys sys
을하고도 나는 node
에 대한 액세스를 얻을 수 /usr/local/
마운트 나는 데비안에서 debootstrap
유틸리티를 사용하여 내를 만들었습니다. 나는 "바인딩 라이브러리와 모든 의존성을 감옥에 넣으십시오"라고 제안합니다. 성명서는 필요한 물건을 모두 마운트하는 것을 의미합니다. 내 경우에는 mount -o bind /usr/local /mnt/chroot/wheezy-chroot/usr/local
입니다.
내 대답을 완전히 빠뜨린 경우이 링크를 떠나야합니다 : https://github.com/magne4000/node-jail -이 패키지가 유용 할 수도 있습니다.
그리고 마지막으로 : 알고있는 한, chroot
은 (http://en.wikipedia.org/wiki/Chroot#Limitations) 안전한 해결책이 아닙니다. FreeBSD Jail 또는 심지어 LXC와 같은 메커니즘을 살펴 봐야 할 수도 있습니다.
감사합니다. @ zarkone! 혹시 당신이 debootstrap을 어떻게 사용하고 proc/sys/dev에 마운트했는지에 대한 자세한 내용을 (줄 단위로) 줄 수 있습니까? – outside2344
'var request = require ('request'), postRequest = request.post ('http://www.google.com', {form : {key : 'val'}}); process.stdin.pipe (postRequest) .pipe (process.stdout); ' 이 코드는 작동합니다. chroot에서 결과를 얻었습니다. – zarkone
chroot 명령으로 업데이트 된 답변 – zarkone