0

ユーザー「foo」に属し、Apacheを介してアクセスされるsvnリポジトリがあり、同じくfooが所有するディレクトリで、post-commitフックからsvnupdateを実行しようとしています。

http://subversion.apache.org/faq.html#website-auto-updateで提案されているように、fooが所有するCラッパーを作成し、suidビットを設定しました。これは、コミット後のスクリプトによって呼び出されます。ユーザーwww-dataによる。

それでも、(空の環境で)ユーザーwww-dataからラッパーを実行すると、実際にはユーザーfooとしてsvn updateが呼び出されますが、不可解なことに、ユーザーwww-dataのパスワードを要求するsvnによってプロンプトが表示されます。

svnupdater.cと呼ばれるラッパーのコードは、公式のよくある質問で提案されているものと同じです(もちろん正しいパスを使用しています)。これは、ユーザーfooによって作成およびコンパイルされます。suidビットを設定した後、/hooks内のls-lが表示されます。

-rwxr-xr-x 1 www-data foo   74 2011-03-28 12:54 post-commit
-rwsr-sr-x 1 foo      foo 7144 2011-03-28 12:16 svnupdater

次に、「su www-data」を実行し、「env-./svnupdater」(shまたはbashから)を実行すると、psauxは正しく次のように表示されます。

foo   20260  3.7  0.8  14008  4492 pts/0    S+   12:18   0:00 svn update /home/foo/foosvn

しかし、それでも私はsvnupdateが私に次のように促しているのを見ることができます:

Authentication realm: <http://xxxxxx> xxxxx
Password for 'www-data':

そしてもちろん、ポストコミットがそれを呼び出すとき、すべてが機能するわけではありません。

この戦略は公式に提案されたものであるため、問題がどこにあるのか本当に理解できないようですが、svn updateはsetuidをバイパスし、実際のユーザーを使用しているようです...

4

1 に答える 1

1

解決策がわかったようです。

--config-dir パラメーターをラッパー内に追加する必要があります (したがって、このようになります)。そうしないと、svn が正しいディレクトリから認証ファイルを読み取らないように見えるためです。

これは Apache faqs に記載されるべきだと思います。

于 2011-03-28T16:14:27.277 に答える