我在 Ubuntu 10.04 上有一个有效的 svnserve 解决方案,用于通过 SASL 授权 svn 用户访问 Active Directory(LDAP,而不是 LDAPDB)。配置文件位于底部。
将服务器升级到 12.04 版本后,此功能不再起作用。我可以通过 SASL 向 LDAP 授权用户
testsaslauthd -u ldap_username -p his_password
=> 0: OK "Success."
但是当我尝试在同一台服务器上的文件夹上“svn update”时,它会三次要求我输入凭据并结束
svn: Authentication error from server: SASL(-4): no mechanism available:
我不知道如何跟踪 svn 和 sasl 之间的通信。
情况:
- Ubuntu 10.04 + subversion 1.6.6 (支持 Cirrus SASL) => 正常运行
- Ubuntu 12.04 + subversion 1.6.17(支持 Cirrus SASL)=> 不起作用(使用相同配置)
文件 /usr/lib/sasl2/svn.conf
pwcheck_method: saslauthd
auxprop_plugin: ldap
mech_list: PLAIN
文件 /usr/lib/sasl2/subversion.conf -> 符号链接到 /usr/lib/sasl2/svn.conf
文件 /opt/svn/repos/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
#password-db = passwd
authz-db = authz
realm = smartsvn
[sasl]
use-sasl = true
min-encryption = 0
max-encryption = 256
有什么想法吗,如何修复或追踪该问题?
答案1
只有在 dist-upgrade 之后,debian squeeze 才会出现上述问题。经过几个小时的配置、重启和重新安装后,我尝试了以下“svn.conf”:
pwcheck_method: saslauthd
#auxprop_plugin: ldap
mech_list: plain login cram-md5 digest-md5
在我看来,“mech_list:plain”就足够了。其他机甲是以前试用时留下的。
这是我的 /etc/saslauthd.conf
ldap_servers: ldap://xxx.xxx.xxx.xxx
ldap_use_sasl:no
ldap_search_base: DC=domain,DC=tdl
ldap_bind_dn: [email protected]
ldap_bind_pw: magic_word:)
ldap_mech: PLAIN
ldap_auth_method: bind
ldap_filter: (sAMAccountName=%U)
log_level: 7
这是我的 /etc/default/saslauthd
START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="ldap"
MECH_OPTIONS=""
THREADS=5
12 月 14 日更新:
今天我在 svnserve 升级(r1615264)后再次遇到了同样的问题:
我必须将以下内容添加到 svn.conf 中:
ldapdb_uri: ldap://myldadphost.tld
不要问我为什么,我只是尝试了一下,因为三四年前这个参数已经(与其他 ldap 参数一起)在 svn.conf 中了...
答案2
(1)在 /etc/sasl2/svn.conf 中,您可以为 saslauthd 设置日志级别,例如:
log_level: 7
在 sasl.h 中我发现:
#define SASL_LOG_NONE 0 /* don't log anything */
#define SASL_LOG_ERR 1 /* log unusual errors (default) */
#define SASL_LOG_FAIL 2 /* log all authentication failures */
#define SASL_LOG_WARN 3 /* log non-fatal warnings */
#define SASL_LOG_NOTE 4 /* more verbose than LOG_WARN */
#define SASL_LOG_DEBUG 5 /* more verbose than LOG_NOTE */
#define SASL_LOG_TRACE 6 /* traces of internal protocols */
#define SASL_LOG_PASS 7 /* traces of internal protocols, including passwords */
看来它记录到 /var/log/auth.log。
我遇到了几乎同样的问题(从 Ubuntu 11.04 迁移到 12.04)并在 auth.log 中出现:
svnserve: could not find auxprop plugin, was searching for 'ldap'
有趣的是,日志中显示的是“svnserve”,而不是 saslauthd。这让我想到...
(2)你可以尝试
ldd /usr/bin/svnserve
对我来说,工作服务器(Ubuntu 11.04)显示:
libldap_r-2.4.so.2 => /usr/lib/libldap_r-2.4.so.2
但故障的服务器(12.04)却没有。
答案3
尝试将配置更改为您的 /usr/lib/sasl2/svn.conf 配置文件(SVN sasl 配置):
auxprop_plugin: ldapdb
mech_list: PLAIN
ldapdb_mech: PLAIN
saslauthd_path: /var/run/saslauthd/mux
ldapdb_uri: <address of your ldap server (ldap://hostname)>