2

私が働いている会社は、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 に変更できますが、それらを最新の状態に保つには多くの作業が必要です。

何か案は?

ありがとう!

4

1 に答える 1

2

まず、nopasswd ルールを少し制限することを検討してください。デプロイの詳細はわかりませんが、通常、デプロイ専用のユーザーを作成し、デプロイ中にエスカレートする必要があるコマンドに対してのみnopasswd ルールを与えます。これは通常、サービス再起動コマンドのみであり、おそらく特定のコマンドになります。 chown コマンドも同様です。よりインタラクティブなヘルプが必要な場合は、#capistrano米国太平洋の昼間に飛び乗ってください.

参照が必要な場合の制限された nopasswd ルールの例:

webapp ALL=(root) NOPASSWD:/usr/sbin/sv restart myservice

結果のルールセット:

webapp@host:~$ sudo -ll
User torrancew may run the following commands on this host:

Sudoers entry:
    RunAsUsers: root
    Commands:
        NOPASSWD: /usr/bin/sv restart myservice

-トーランスウ

于 2012-05-28T03:32:25.413 に答える