【发布时间】:2012-10-30 18:09:40
【问题描述】:
拥有以下app.rb Ruby 应用程序:
#!/usr/local/Cellar/rbenv/0.3.0/versions/1.9.3-p194/bin/ruby
require 'rubygems'
require 'sinatra'
get '/pwd' do
`pwd`
end
我可以使用以下命令将其作为网络服务器启动:
./Users/doug/code/backdore/app.rbruby /Users/doug/code/backdore/app.rb/usr/local/Cellar/rbenv/0.3.0/versions/1.9.3-p194/bin/ruby /Users/doug/code/backdore/app.rb
然后,使用网络客户端,http://localhost:4567/pwd 上的 GET 可以返回 /Users/doug/code/backdore,这是我启动命令的当前路径。
如果我停止服务器,并再次从Users/doug/code/ 文件夹执行命令,那么服务器返回的路径将是:/Users/doug/code。
我的问题如下,因为我想 chroot 这个网络服务器,我需要在命令前加上如下内容:
sudo chroot /Users/doug/code/backdore /usr/local/Cellar/rbenv/0.3.0/versions/1.9.3-p194/bin/ruby "app.rb"
但是,这不起作用,我收到以下错误消息:
chroot: /usr/local/Cellar/rbenv/0.3.0/versions/1.9.3-p194/bin/ruby: 没有这样的文件或目录
我正在使用 Mac OS X,但我想这在 Ubuntu 上应该类似。我怎么能在“/Users/doug/code/backdore”中chroot这个服务器,以便从服务器上只看到“/”?
编辑
为了在 chroot 中有一个 Ruby 解释器,我刚刚安装了 mruby 并用这个脚本做了一些测试......
$ cat test/script.rb
loop do
puts "hello world"
end
我现在的位置是:
$ pwd
/Users/doug/code/mruby
所以,只是为了测试脚本,
$ bin/mruby test/script.rb
hello world
hello world
hell^C
一切正常。但是,如果我尝试像这样 chroot:
$ chroot /Users/doug/code/mruby bin/mruby test/script.rb
chroot: /Users/doug/code/mruby: Operation not permitted
如果我这样尝试:
$ sudo chroot /Users/doug/code/mruby bin/mruby test/script.rb
Password:
~/code/mruby ‹1.9.3-p194› ‹master*› $
什么也没有发生(它应该是一个无限循环)。
感谢您的帮助。
【问题讨论】:
标签: linux unix ubuntu sinatra chroot