使用 Rails,尽管 sudo PATH 最小且 gem 不在 /usr/bin 中,如何执行 sudo ./runner

使用 Rails,尽管 sudo PATH 最小且 gem 不在 /usr/bin 中,如何执行 sudo ./runner

我的背景:

  • ruby-enterprise 1.8.7,在 CentOS 5 上
  • ruby 和 gem 安装在 /usr/local/bin 中
  • ./runner: 正确运行
  • sudo./runner

    Rails 需要 RubyGems >= 1.3.2。请安装 RubyGems 并重试:http://rubygems.rubyforge.org

    (因为 sudo 的 PATH 有限制)

  • sudo PATH=$PATH ./runner:运行正确,因为 runner 的 PATH 中再次有 /usr/local/bin

问题:

当 gem 不在 /bin 或 /usr/bin 中时,还有其他替代方法(可能更优雅 - 只需很少的变化)来使用 sudo 启动运行器吗?

我想到过(但不满意)的有:

  • 将 gem 的符号链接放在 /usr/bin 中
  • 修改跑步者?
  • 修改 sudoers?

也许有一种方法可以通过配置文件或命令行参数来运行?

答案1

您应该能够使用该env_file选项sudoers并将路径规范放入它指向的文件中。例如:

sudoers

Cmnd_Alias    RUBY = /path/to/runner
Defaults!RUBY env_file=/path/to/rubypathfile
ALL ALL=(ALL) RUBY

/path/to/rubypathfile

PATH=/usr/local/bin:/usr/bin:/bin

您可能还会发现该env_keep选项很有用。

看一下sudo sudo -V | less,看看它是否告诉你任何有趣的东西。特别是对“path”或“ruby”进行不区分大小写的搜索。

相关内容