私が働いている会社は、Rails アプリの展開に capistrano を使用しています。各 Web アプリに対して作成されたアプリ ユーザー (例: foo_app) があり、それらはすべて、パスワード sudo 権限のない webapp グループに属しています。
%webapp ALL=(ALL) NOPASSWD: ALL
cap deploy.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')}
しかし、カピストラーノにアプリ固有のユーザーを使用して、ユニコーン、遅延ジョブなどのプロセスを実行させたい.
:admin_runner、:runner変数で遊んでみましたが、期待どおりに動作しません。ユニコーン、遅延ジョブなどのプロセスを開始するときに、サードパーティのレシピを foo_app として sudo に変更できますが、それらを最新の状態に保つには多くの作業が必要です。
何か案は?
ありがとう!