2016-05-17 11 views
0

スマートHTTPを使用して自分のサーバーの1つに自分のGitリポジトリをインストールしようとしています。スマートHTTPとsuexec:Gitリポジトリが見つかりません

suexecのない仮想サーバーで動作しますが、suexecが有効になっている本番サーバーでは動作しません。私はクローンまたはプッシュしようとすると、それは言う:

致命的な:リポジトリ 'http://domain.tld/git/project/' が見つかりません

Apacheの設定は次のようである:私は無効にした場合

<VirtualHost *:80> 
    Options -Indexes +ExecCGI 

    ServerAdmin [email protected] 

    DocumentRoot /var/www/domain.tld 

    ServerName domain.tld 

    Alias /fcgi-bin/ /var/www/domain.tld/fcgi-bin/ 
    SuexecUserGroup domainuser domainuser 

    ########## GIT ########## 

    SetEnv GIT_PROJECT_ROOT /var/www/git/git_domain 
    SetEnv GIT_HTTP_EXPORT_ALL 
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER 
    ScriptAlias /git/ /var/www/git/git_domain/git-http-backend/ 

    Alias /git /var/www/git/git_domain 
    <Directory /usr/lib/git-core> 
     Options +ExecCGI +SymLinksIfOwnerMatch 
     AllowOverride All 
     Require all granted 
    </Directory> 

    <Directory /var/www/git/git_domain> 
     Options -Indexes -SymLinksIfOwnerMatch 
     AllowOverride All 
     Require all granted 
    </Directory> 

    ########## PROJECT DIRS HTPASS ########## 

     <LocationMatch "^/git/project1/.*$"> 
#   DAV on 
      AuthType Basic 
      AuthName "project1" 
      AuthUserFile /var/www/git/gitpass/domain/project1 
      Require valid-user 
     </LocationMatch> 

    ########## /PROJECT DIRS HTPASS ########## 
    ########## /GIT ########## 

ScriptAlias/git/var/www/git/git_domain/git-http-backend/

その場合はDAVで動作するのでクローンできますがプッシュできます。

私はすべてのファイルの所有者とアクセス権を適切な値(domainuser、755)に変更したと思います。suexecはそのログの内容について何も文句を言わない。

誰かが私が何か間違ったことを教えてもらえますか?

ありがとうございます。

答えて

0

これは簡単です:mod_suexecは、ターゲットプログラムを実行する前にすべての環境変数を消去します。したがって、すべてのSetEnvディレクティブは無効です。

残念ながら、私がチェックした最後の時間(同じ問題に直面して)mod_suexecは、環境変数には、「ホワイトリスト」の設定つまみを持っていたので、正しいアプローチはこれです:

  1. スクリプトを作成し、あなたの実際のwrappnig git-http-backend

    あなたは既に1つを持っているようです。

  2. シェルのexport組み込みコマンドを使用して、対応するすべてのSetEnvディレクティブを再フォーマットします。

    SetEnv GIT_PROJECT_ROOT /var/www/git/git_domain 
    

    がスクリプトコードで

    export GIT_PROJECT_ROOT=/var/www/git/git_domain 
    

    をbecames、です。

あなたは「ノーマル」モードとmod_suexecの下で、両方の仕事に同じバーチャルホスト設定ファイルが必要な場合は、と同期でそれらを保つために、次の男を示唆あなたのSetEnvディレクティブのブロックの隣にこの癖についての広範なコメントを入れますラッパースクリプトに置かれているものは何でも。

mod_suexecの詳細については、hereをご覧ください。

+0

これは機能しました。 ! '/ binに/ bashの PATH_INFO = $ SCRIPT_URL GIT_PROJECT_ROOT =の/ var/www /のgitの/ git_domain REMOTE_USER = $ REDIRECT_REMOTE_USER 輸出GIT_HTTP_EXPORT_ALL =真 USR/libに/のgit-コア: ラッパースクリプト私はこれを含んでいました/ git-http-backend' チュートリアルが悲しいので、このように見えるはずです。すべての行を削除した後が、 '!/ binに/ bashの 輸出GIT_PROJECT_ROOT =の/ var/www /のgitの/ git_domain USR/libに/のgit-コア/のgit-HTTP-backend' 、それがとして働いて "エクスポート" GIT_PROJECT_ROOT期待される。 ありがとうございましたkostix! – vdavid

+0

@vdavid、 'REMOTE_USER'と' GIT_HTTP_EXPORT_ALL'変数は、彼らが何をするのかを理解していると便利です。 Webサーバがクライアント認証を実行した場合、前者はWebサーバによってCGIプログラムにエクスポートされ、この場合、変数には認証されたユーザ名が含まれます。後者は、 'git-daemon-export-ok'ファイルを含むリポジトリだけでなく、すべてのリポジトリを「書き出し」とみなすべきだということをGitに伝えます。 – kostix

+0

@vdavid、 'REMOTE_USER'変数は、' gitolite'と一緒にGitホスティングフロントエンドを使用する場合に便利です。この場合、 'gitolite'は独自のSSH pubkeyベースの認証を実行しません。アクセス制御規則を適用するために認証されたユーザの名前を知りたがっています。 – kostix

関連する問題