【问题标题】:Chroot command for a Ruby processRuby 进程的 Chroot 命令
【发布时间】: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.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

然后,使用网络客户端,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


    【解决方案1】:

    在 chroot 下运行进程时,该进程使用的所有二进制文件、库和其他文件必须在其新根目录下可用。由于/usr/local/Cellar/Users/doug/code/backdore 下不存在(例如,/Users/doug/code/backdore/usr/local/Cellar!),execchroot 命令运行失败。

    老实说,尝试在 chroot 下运行 Ruby 应用程序会非常痛苦,因为它最终需要大量的库(包括 Ruby 和其他库)。您最好在启动后让进程自行 chroot,因为这样可以绕过大部分库问题。

    【讨论】:

    • 感谢您的回答,@duskwuff。我刚刚添加了另一个带有 chrootable mruby 二进制文件的示例,它与脚本位于同一个父文件夹中。但是,我有同样的错误......
    • chroot 需要 root 访问权限——你永远不能以非 root 身份运行它。在不知道test/script.rb 是什么的情况下,我无法说出第二个脚本的问题所在。
    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2010-10-10
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多