我工作的公司一直在使用capistrano进行Rails应用程序部署。我们为每个web应用程序创建了应用程序用户(例如foo.app),它们都属于一个没有密码sudo权限的webapp组:
%webapp ALL=(ALL) NOPASSWD: ALL
在capdeploy.rb中,我们设置了一个ssh密钥对,允许capistrano以应用程序用户的身份ssh到服务器并执行所有cap任务。
set :ssh_options, {:username=> foo_app , :keys => File.join(ENV[ HOME ], .ssh , id_rsa_deploy )}
它工作得很好,但让nopasswd sudoer运行我的应用程序进程让我感到有点不舒服,如果应用程序进程受到攻击,攻击者很容易接管整个服务器坚强的
我的问题是,有没有办法让另一个用户运行我的应用程序,最好是在没有sudo权限的情况下?理想情况下,我希望有一个部署用户来执行所有capistrano远程任务:
set :ssh_options, {:username=> deploy , :keys => File.join(ENV[ HOME ], .ssh , id_rsa_deploy )}
但我想让capistrano使用特定于应用程序的用户来运行我的流程,比如独角兽、延迟作业等。
我玩过:admin_runner,:runner变量,但它们并没有像我预期的那样工作。在启动独角兽、延迟作业等进程时,我可以将一些第三方食谱更改为sudo作为foo_app,但要保持它们的更新需要做很多工作。
有什么想法吗?
谢谢