私はフォローしています 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のすぐ下で定義されています。
ですから、これがどのように機能するのか、そしてスクリプトでユーザーを取得しないようにメカニズムのどの部分を見逃したのか、本当に疑問に思っています。
私は次の解決策を見つけました 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
を使用します。チュートリアルのサンプルがどのように機能するのか、本当に不思議に思っています。