Я пытаюсь аутентифицировать пользователей Subversion против sasl + ldap. Другие вопросы об этой проблеме, похоже, связаны с более ранними версиями 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. Таким образом, похоже, что sasl использует sasldb2, хотя конфигурация для svn и saslauthd настраивает LDAP.
Решение: Я подключил отладчик и прошел аутентификацию. Оказывается, у меня было две проблемы: Разрешения на / var / log / saslauthd:
drwx--x--- 2 root sasl 140 Sep 27 09:44 saslauthd
означает, что пользователь сервера subversion должен быть частью группы sasl.
Второй более сложный: DIGEST-MD5 полагается на пароли в виде простого текста для вычисления хэша на стороне сервера. В моем каталоге LDAP хранятся зашифрованные пароли SSHA, поэтому сервер никогда не сможет сравнить MD5 от клиента с MD5, вычисленным локально. Я предполагаю, что в каталоге может храниться MD5 (имя пользователя: область: пароль), но я не уверен, поддерживается ли это в sasl, и как вы справитесь с этим, если у вас есть несколько областей.
Я действительно не хочу хранить пароли в виде простого текста, поэтому на данный момент решение состоит в том, чтобы использовать только незашифрованную аутентификацию:
# cat /etc/sasl2/svn.conf
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
Не идеальное решение, но, похоже, пока оно работает. Я думаю, что буду применять ssh + svn для внешнего доступа, и, возможно, я потрачу некоторое время на поддержку TLS для svnserve.
(На это ушло бы гораздо меньше времени, если бы было еще несколько вариантов диагностики и лучшая документация.)