web-dev-qa-db-ja.com

ScriptAliasMatchでのユーザー転送の背後にあるメカニズム

私はフォローしています gitoliteをセットアップするためのこのチュートリアル そしてある時点で次のScriptAliasMatchが使用されます:

ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/var/www/bin/gitolite-suexec-wrapper.sh/$1

そして、ターゲットスクリプトはで始まります

USER=$1

したがって、これはユーザー名をApacheからsuexecスクリプトに転送するために使用されていると思います(実際に必要です)。しかし、これがどのように行われるのかわかりません。 ScriptAliasMatchドキュメント は、/$1は、その前の正規表現の最初の一致するグループに置き換えられます。私にとっては、(?x)^ /。*から)$なので、ここではユーザーについては何もありません。

私の根本的な問題は、スクリプトでUSERが空であるため、gitoliteで認証を取得できないことです。基本認証を介してユーザー名をApacheに付与します。

<Location />
   # Crowd auth 
   AuthType Basic
   AuthName "Git repositories"
   ...
   Require valid-user
</Location>

前のScriptAliasMatchのすぐ下で定義されています。

ですから、これがどのように機能するのか、そしてスクリプトでユーザーを取得しないようにメカニズムのどの部分を見逃したのか、本当に疑問に思っています。

1
jolivier

私は次の解決策を見つけました https://stackoverflow.com/questions/3817478/setting-up-git-server-on-windows-with-git-http-backend-exe および https://stackoverflow.com/questions/8021167/git-debian-Apache-and-smart-http これは

SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

apache構成に追加し、実際に認証されたユーザー名を含むスクリプトで$REMOTE_USERを使用します。チュートリアルのサンプルがどのように機能するのか、本当に不思議に思っています。

1
jolivier