【问题标题】:Capistrano using sudo even with "set :use_sudo, false"Capistrano 使用 sudo 甚至使用“set :use_sudo, false”
【发布时间】:2012-05-25 21:23:50
【问题描述】:

我不希望对通过 Capistrano 远程执行的任何命令使用 sudo。具体来说,当我运行cap deploy:setup 时,我在第一个mkdir 命令期间被要求输入我的sudo 密码。我在 deploy.rb 文件中添加了set :use_sudo, false,但这并没有什么不同。

我从一个相当完整的 deploy.rb 文件开始,但是一旦我开始遇到问题就将其缩减。这是我的最小版本,它仍然显示 use_sudo 没有受到尊重:

# App Definitions

set :domain, '[server-ip]'
role :app, domain
role :web, domain
role :db, domain, :primary => true

set :user, "my_app"
set :use_sudo, false

task :sudo_test do
  run "#{try_sudo} whoami"
end

运行 cap sudo_test 会提示我输入我的 sudo 密码。我在这里缺少什么(除了我已经拔掉的头发)?

Google 调查结果

https://groups.google.com/forum/?fromgroups#!topic/capistrano/QNYnvW8obrg

一个有类似问题的人的帖子。线程中没有任何结论/解决方案。

【问题讨论】:

  • #{try_sudo} 位是什么?如果你把它拿出来怎么办?
  • 如果 :use_sudo 设置为 false#{try_sudo} 应该 sudoize 命令。我将它包含在 sudo_test 中,因为 capistrano rails 任务也可能使用它,并且很可能是问题的根源。
  • 我们在 deploy.rb 文件中使用 'sudo -i '。
  • 还有这个:sudo 'aptitude install -y rsync'
  • 如上所述,发帖的最初原因是cap deploy:setup 在我不想要的时候尝试使用 sudo。 cap deploy:setup 是预烘焙食谱;我不打算修改它。相反,我需要确定为什么选项 :use_sudo 不起作用。

标签: ruby-on-rails-3 capistrano sudo rvm-capistrano


【解决方案1】:

对于遇到这个问题并且像我这样的傻瓜的其他人。确保你没有引用错误。我有:

set :use_sudo, "false"

当我把它切换到

set :use_sudo, false

大多数事情都按我预期的方式开始了。正如 YWCA Hello 指出的那样,仍有一些命令忽略了 use_sudo 设置。但是,不要忘记正确设置它。

【讨论】:

  • 作为解释(无需阅读 capistrano 代码的相关部分):“false”在 ruby​​ 中是一个真实的值。只有 nil 和 false 是错误的。任何其他值,包括。 0, "", [], 被认为是真的。因此将 :use_sudo 设置为“false”与将 :use_sudo 设置为 true 相同。
【解决方案2】:

显然,无法通过某些 capistrano 任务禁用 sudo 功能。假设是服务器上的非特权用户不应该能够执行某些任务。

有问题的命令是mkdir。我认为,如果父文件夹是他们有权运行的文件夹,那么非特权用户应该能够运行此命令。我还认为该用户实际上可能是特权用户,例如 root。最佳实践?不必要。在某些部署的合理范围内,是的。

这是我原来问题的回复链接:

https://github.com/capistrano/capistrano/issues/211#issuecomment-7667467

【讨论】:

  • :use_sudo, false 使用 mkdir 为我工作(使用 deploy:setup)
猜你喜欢
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多