次の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
次のようなコマンドを使用して、Webサーバーとして起動できます。
./Users/doug/code/backdore/app.rb
ruby /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
次に、Web クライアントを使用して GET を実行すると、コマンドを開始した場所からの現在のパスhttp://localhost:4567/pwd
が返されます。/Users/doug/code/backdore
サーバーを停止し、Users/doug/code/
フォルダーからコマンドを再度実行すると、サーバーから返されるパスは次のようになります/Users/doug/code
。
私の質問は次のとおりです。この Web サーバーを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*› $
何も起こりません (無限ループになるはずです)。
助けてくれてありがとう。