web-dev-qa-db-ja.com

Subversionは、Webブラウザで認証するまでエラー500を返します

以前は、LDAP認証を使用するWindowsサーバーでCollabnet SVN/Apacheコンボを使用していましたが、パフォーマンスはそれほど優れていませんでしたが、以前は完全に機能していました。

Ubuntu 10の新規インストールに切り替え、Apache/SVN/LDAP構成をセットアップすると、LDAPを介したActive Directory認証を使用して、リポジトリにHTTPSアクセスできるようになります。

現在、非常に特殊な問題が発生しています。新しいユーザーがリポジトリにアクセスするたびに、SVNクライアント(ツールによってはいくつかありますが、議論のためにTortoise SVNに固執しましょう)は「エラー500-不明な応答」を報告します。これを回避するには、Webブラウザーを使用してリポジトリにログインし、機能するまで「後方」に移動する必要があります。

例えば:

  1. SVNチェックアウトhttps://svn.example.local/SVN/MyRepo/MyModule/-エラー500(bad
  2. https://svn.example.local/SVN/MyRepo/MyModule/へのWebブラウジング-エラー500(bad
  3. https://svn.example.local/SVN/MyRepo/へのWebブラウジング-エラー500(bad
  4. https://svn.example.local/SVN/へのWebブラウジング-禁止403(正しい
  5. https://svn.example.local/SVN/MyRepo/-OK 200(正しい)へのWebブラウジング
  6. SVNチェックアウトhttps://svn.example.local/SVN/MyRepo/MyModule/-エラー500(bad
  7. https://svn.example.local/SVN/MyRepo/MyModule/-OK 200(正しい)へのWebブラウジング
  8. SVNチェックアウト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"
3
Mark Henderson

私は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回目の試行で、回答がキャッシュされ、成功します。

1
Avery Payne