Sasl + ldapに対してSubversionユーザーを認証しようとしています。この問題に関するその他の質問は、以前のバージョンのSubversionまたはsasldb認証に関連しているようです。
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.1 (jessie)
Release: 8.1
Codename: jessie
svnserve --version
svnserve, version 1.8.10 (r1615264)
Cyrus SASL authentication is available.
saslauthd -v
saslauthd 2.1.26
authentication mechanisms: sasldb getpwent kerberos5 pam rimap shadow ldap
Sasl + LDAP部分は正しく構成されているようです。
testsaslauthd -u user -p password -r realm
0: OK "Success."
間違った資格情報でテストすると、エラーが発生します。
testsaslauthd -u wronguser -p wrongpassword -r wrongrealm
0: NO "authentication failed"
そして、auth.logにエラーが表示されます。
Sep 10 22:23:53 xxx saslauthd[30948]: Entry not found ((&(objectClass=posixAccount)(uid=wronguser))).
Sep 10 22:23:53 xxx saslauthd[30948]: Authentication failed for wronguser/wrongrealm: User not found (-6)
Sep 10 22:23:53 xxx saslauthd[30948]: do_auth : auth failure: [user=wronguser] [service=imap] [realm=wrongrealm] [mech=ldap] [reason=Unknown]
したがって、SASLはLDAPサーバーに正常に接続してデータを取得できると思います。
私はSubversionを次のように構成しました:
/etc/sasl2/svn.conf:
pwcheck_method: saslauthd
mech_list: DIGEST-MD5
svnserveをstrace-e openでチェックすると、/ usr/lib/sasl2などではなく、このファイルが開かれていることがわかります。
Svnクライアントから接続しようとすると、
Sep 10 22:31:38 xxx svnserve: DIGEST-MD5 common mech free
試行ごとにauth.logにありますが、saslauthdからの情報やエラーはありません。
ユーザーアカウントをsasldb2に追加すると、次のようになります。
saslpasswd2 user -u realm
Password: password
Svnクライアントから正しく接続できます。したがって、svnおよびsaslauthdの構成でLDAPが構成されている場合でも、saslはsasldb2を使用しているように見えます。
解決策:デバッガーを接続し、認証を実行しました。 2つの問題があったことが判明しました:/ var/log/saslauthdの権限:
drwx--x--- 2 root sasl 140 Sep 27 09:44 saslauthd
「Subversion」サーバーユーザーはグループsaslの一部である必要があることを意味します。
2つ目は、より複雑です。DIGEST-MD5は、サーバー側でハッシュを計算するためにプレーンテキストのパスワードに依存しています。私のLDAPディレクトリにはSSHA暗号化パスワードが格納されているため、サーバーはクライアントからのMD5をローカルで計算されたMD5と比較できませんでした。ディレクトリにMD5(username:realm:password)を格納できると思いますが、これがsaslでサポートされているかどうか、および複数のレルムがある場合にどのように管理するかはわかりません。
プレーンテキストのパスワードを保存したくないので、今のところ解決策は暗号化されていない認証のみを使用することです。
# cat /etc/sasl2/svn.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
完璧な解決策ではありませんが、今のところうまくいくようです。外部アクセスにssh + svnを適用し、svnserveのTLSサポートに時間を費やすと思います。
(これは、いくつかの診断オプションとより優れたドキュメントがあれば、はるかに時間がかからなかったでしょう。)