2012-03-01 9 views
2

git、gitosis、nginx、およびphp-fpmでCentOS 6サーバーをセットアップしました。git post-receiveフックをnginxとphp-fpm環境で使用する

私たちのセットアップでは、nginxはphp-fpmを使ってPHPスクリプトを実行します。php-fpmは、セキュリティ目的のために特定のユーザーとして実行するようサイトごとに構成されています(nginx:nginxのすべてではありません)。 1つのサイトが侵害された場合、すべてのサイトが侵害される状況。

私たちの環境は素晴らしいですが、gitが関わっているときは、php-fpmが根本的な問題を作り出しています。成功したローカルで次のコマンドを実行している際に

:私のポスト受けるフックが実行され

$ git push origin 

#!/bin/sh 
GIT_WORK_TREE=/var/www/vhosts/example.com/httpdocs git checkout -f 

通常、これはしかし、をhttpdocsフォルダにレポの内容をコピーしますphp-fpmがインストールされていてディレクトリ+ファイルが特定のユーザによって所有されているため、gitosis(または他のroot以外のユーザ)はディレクトリに書き込むことができません。これは、次のエラーによって明らかになります。

remote: error: git checkout-index: unable to create file index.php (Permission denied) 

これは意味があり、それは私が期待するものです。しかし、私はこの特定のケースでこの問題を回避する方法があるのだろうかと思いますか?ポスト受信フックを変更してルートとして実行する方法(現在はgitosisユーザが実行しています)やそれが成功するための他の方法ではありますか?

セットアップに他の問題はありません。gitはうまく動作しますが、nginx/php-fpmは正常に動作しますが、これは回避方法がわかりません。

答えて

2

フックをuser1,user2,user3、またはシステムに必要なもので実行するには、sudoを使用します。限られた範囲であっても、ユーザーがウェブユーザーとしてマスカレードすることができるというセキュリティの影響を考慮する必要があります。

例レシピ

ユーザーgitoriousし、Webユーザー仮定としてpost-receiveフックの実行がuser1は、user2user3等...

/usr/local/sbin/update-user1.shにあなたの現在のポスト受けるフックを移動しますと呼ばれていることを考えると、またはその他の適切な場所に移動し、実行可能であることを確認します。

gitosis localhost = (user1) NOPASSWD: /usr/local/sbin/update-user1.sh 
gitosis localhost = (user2) NOPASSWD: /usr/local/sbin/update-user2.sh 
gitosis localhost = (user3) NOPASSWD: /usr/local/sbin/update-user3.sh 
... etc ... 

をそしてuser1のためのあなたのポスト受けるフックのようなものになる可能性:

/etc/sudoersに、これらの線のようなものを追加し、他のユーザーのために同様に

#!/bin/sh 
sudo -u user1 /usr/local/sbin/update-user1.sh 

未テストですので、実装する前にテストしてください!

+0

この問題は、すべてのウェブサイトのユーザーグループにgitosisを追加する必要があるということです。これは、アクセス許可の観点から、各ユーザーが互いに隔離されている理由を無効にします。私たちが設定したシステムの完全性を損なうことなく、これが不可能ではないと考え始めています。 – Brendan

+0

なぜこのテクニックを使って各ウェブサイトのユーザグループに 'gitosis'を追加しなければならないのでしょうか? 'sudo'はチェックアウトスクリプトを' www-data'(または実際のウェブユーザが何であれ)として実行します。 '/ etc/sudoers'に一致するエントリを持つ別のチェックアウトスクリプトが各ユーザに必要ですが、本当に必要ならばこれをパラメータ化することができます。 – msandiford

+0

ウェブユーザーは一人もいないので、www-dataは適用されません。私たちのサーバーは、厳重なセキュリティを念頭に置いて設定されています。すべてのWebサイトには独自のユーザーがいます。これらのユーザは、どのグループにも所属していないので、それぞれのファイルを変更することはできません。これは、php-fpmでphpを実行する場合(phpはユーザとして実行されるため)重要です。 – Brendan

関連する問題