以前は、LDAP認証を使用するWindowsサーバーでCollabnet SVN/Apacheコンボを使用していましたが、パフォーマンスはそれほど優れていませんでしたが、以前は完全に機能していました。
Ubuntu 10の新規インストールに切り替え、Apache/SVN/LDAP構成をセットアップすると、LDAPを介したActive Directory認証を使用して、リポジトリにHTTPSアクセスできるようになります。
現在、非常に特殊な問題が発生しています。新しいユーザーがリポジトリにアクセスするたびに、SVNクライアント(ツールによってはいくつかありますが、議論のためにTortoise SVNに固執しましょう)は「エラー500-不明な応答」を報告します。これを回避するには、Webブラウザーを使用してリポジトリにログインし、機能するまで「後方」に移動する必要があります。
例えば:
https://svn.example.local/SVN/MyRepo/MyModule/
-エラー500(bad)https://svn.example.local/SVN/MyRepo/MyModule/
へのWebブラウジング-エラー500(bad)https://svn.example.local/SVN/MyRepo/
へのWebブラウジング-エラー500(bad)https://svn.example.local/SVN/
へのWebブラウジング-禁止403(正しい)https://svn.example.local/SVN/MyRepo/
-OK 200(正しい)へのWebブラウジングhttps://svn.example.local/SVN/MyRepo/MyModule/
-エラー500(bad)https://svn.example.local/SVN/MyRepo/MyModule/
-OK 200(正しい)へのWebブラウジングhttps://svn.example.local/SVN/MyRepo/MyModule/
--OK 200(正しい)svnparentpath
から必要なモジュールまで、ツリーの上位で認証が必要なようです。
誰かが以前にこのようなものを見たことがありますか? CollabnetのSVNサーバーに戻す前にどこから始めればよいかについてのアイデアはありますか?
更新
Apache2を使用して、httpd.confの/svn
の場所を次に示します。
<Location /svn>
DAV svn
SVNParentPath /var/lib/svn
AuthName "Subversion Repositories"
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL "ldap://dc1.domain.local:389/DC=domain,DC=local?sAMAccountName?sub?(objectClass=*)" NONE
AuthLDAPBindDN "domain\apacheaccount"
AuthLDAPBindPassword superawesomepassword
require valid-user
</Location>
/var/logs/Apache2/error.log
の唯一のエラーは、間違ったパスワードを使用したときの正当な認証エラーです。 access.log
では、エラー500行は次のようになります。
192.168.161.101 - fname.sname [11/May/2010:08:39:08 +1000] "OPTIONS /svn/MyRepo HTTP/1.1" 500 634 "-" "SVN/1.6.6 (r40053) neon/0.28.6"
私はDebianの「Lenny」セットアップを使用しており、Apacheを介してADに直接認証されるLDAPを使用してApache2/SVNを実行し、同じマシンでTracサイトをホストしています。私はそれを突き刺しますが、私はいくつかのより多くの情報が必要です...
SVNアクセスはApacheを介した組み込みモジュールであるため、最初の質問は、これをSVNスタンドアロンプロセスとして実行しているのか、それともApacheを介して実行しているのか(Apacheのように見えますが、確認したいだけです)。 2番目の質問は、Apache2またはApache(1.x)を使用していますか? 3番目の質問は、PAMまたはApacheの組み込みサポートを介してLDAP認証を使用するかどうかです。
参考までに、これはTracの構成の(サニタイズされた)バージョンと、ADを介して認証するLDAP設定です(はい、Tracには独自のアクセス許可システムがあり、私のセットアップではデフォルトで認証済みの読み取り専用になっているため、誰でも利用できますユーザー):
#Rudimentary Apache2 authentication for Active Directory (without group controls)
<Location /trac>
SetHandler mod_python
PythonInterpreter main_interpreter
PythonHandler trac.web.modpython_frontend
PythonOption TracEnvParentDir /srv/trac
PythonDebug on
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
AuthType Basic
AuthName "Trac Projects"
AuthBasicProvider "ldap"
AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=localsite,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN [email protected]
AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess"
authzldapauthoritative On
require valid-user
# require ldap-group "CN=Users,DC=local-site,DC=mycompany,DC=com"
</Location>
さらに重要なのは、その形式の認証をテンプレートとして使用して、SVNアクセスを制御する/etc/Apache2/mods-enabled/dav_svn.conf
の設定を取得できることです。
<Location /svn>
DAV svn
SVNParentPath /srv/svn
SVNAutoversioning on
Order deny,allow
Deny from all
Allow from 10.0.0.0/8
AuthType Basic
AuthName "Subversion Repository"
AuthBasicProvider "ldap"
AuthLDAPURL "ldap://enterprise-dc.mycompany.com:3268/DC=local-site,DC=mycompany,DC=com?sAMAccountName?sub?(objectClass=user)"
AuthLDAPBindDN [email protected]
AuthLDAPBindPassword "supersecretpasswordthatnoonewillguess"
authzldapauthoritative On
require valid-user
</Location>
私たちのデスクトップはプログラムのインストールをかなり厳しく管理しているので、誰かが(a)SVNクライアントをインストールする(b)接続する正確なサーバー名を把握する(c)リポジトリにアクセスして物事を汚す心配はありません、それがセキュリティが非常に低い理由です。ただし、少し調整するだけで、ADグループを適用することでこの配置を再利用でき(最初の例ではコメントアウトされたくだらないことに注意してください)、アクセスをより厳密に制御できるはずです。
これがお役に立てば幸いです。
更新(新しい情報に基づく)
問題は、グローバルカタログに対して認証を行っていないことだと思います。ポート番号を私の例にあるものに変更し、「エンタープライズ」レベルにある、つまり子ドメインのメンバーではないドメインコントローラーを指すようにしてください。したがって、site.enterprise.comの代わりに、新しいポート番号でenterprise.comをポイントします。セットアップでユーザー名のドメイン名を指定する必要がない場合があることに注意してください。認証を拒否する場合は、ドメイン名を指定せずに試してください(私が投稿した例を参照)。また、「メールスタイル」のアカウント名と「ドメインスタイル」のレイアウトを使用します。
私の疑い:グローバルカタログは、ユーザーの検索スペースを「平坦化」します。しかし、子DCで標準のLDAPクエリを実行すると、子ドメインのDCがなくなるまで、最初に「答え」がないため、最初の失敗が発生すると思います。 2回目の試行で、回答がキャッシュされ、成功します。