Linux 来自服务器的身份验证错误:SASL(-13):未找到用户:无法规范化
好的,我正试图在我的Ubuntu服务器上配置并安装svnserve。到目前为止还不错,直到我尝试配置sasl(以防止纯文本密码)为止 所以,;我安装了svnserve并使其作为守护进程运行(还使用命令Linux 来自服务器的身份验证错误:SASL(-13):未找到用户:无法规范化,linux,svn,ubuntu,tortoisesvn,sasl,Linux,Svn,Ubuntu,Tortoisesvn,Sasl,好的,我正试图在我的Ubuntu服务器上配置并安装svnserve。到目前为止还不错,直到我尝试配置sasl(以防止纯文本密码)为止 所以,;我安装了svnserve并使其作为守护进程运行(还使用命令svnserve-d-r/var/svn将其作为启动脚本安装) 我的存储库位于/var/svn中,具有以下配置(可在/var/svn/myrepo/conf/svnserve.conf中找到)(我省略了注释): 关于sasl,我在/usr/lib/sasl2/中创建了一个svn.conf文件: pw
svnserve-d-r/var/svn
将其作为启动脚本安装)
我的存储库位于/var/svn
中,具有以下配置(可在/var/svn/myrepo/conf/svnserve.conf中找到)
(我省略了注释):
关于sasl,我在/usr/lib/sasl2/
中创建了一个svn.conf文件:
pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /etc/my_sasldb
mech_list: DIGEST-MD5
我在该文件夹中创建了它,正如本文所建议的:(也是因为它存在,并且在我执行locate sasl
时被列为结果)
紧接着我执行了这个命令:
saslpasswd2 -c -f /etc/my_sasldb -u my_repo USERNAME
它还两次要求我输入密码,我提供了密码。一切都很顺利。
发出以下命令时:
sasldblistusers2 -f /etc/my_sasldb
据我所知,我得到了正确的结果:
USERNAME@my_repo: userPassword
重新启动了SVN服务,也重新启动了整个服务器,并尝试连接。
这是我的陆龟客户的结果:
Authentication error from server: SASL(-13): user not found: unable to canonify
user and get auxprops
我根本不知道我做错了什么。在过去的几个小时里,我一直在搜索web,但除了可能需要将svn.conf文件移动到另一个位置(例如subversion本身的安装位置)之外,没有发现任何其他内容哪个svn
导致了/usr/bin/svn
,因此我将svn.conf移到了/usr/bin
(尽管我觉得这样做不对)
即使重新启动,仍然无法工作
我的点子快用完了。还有其他人吗
编辑 我试着改变这个(根据互联网上其他一些论坛告诉我的):在文件
/etc/default/saslauthd
中,我改变了
START=no
MECHANISMS="pam"
到
(实际上我以前已经把
START=no
改为START=yes
,但我忘了提到它)。但是仍然没有成功(我确实重新启动了整个服务器)。我在/var/log/messages中查找并发现
localhost svnserve:无法打开Berkeley db/etc/sasldb2:没有这样的文件或目录
当我为上面的文件创建sasldb并获得正确的权限时,它工作了。看起来它忽略或不使用sasl数据库路径
另一个建议是重新启动解决了问题,但该选项对我不可用。看起来SVN服务使用SASL的默认值 选中/etc/sasl2/svn.conf以使svn服务器进程所有者能够读取。 如果/etc/sasl2/svn.conf由用户root、组root和--rw-----拥有,则svnserve使用默认值。 任何日志文件条目都不会警告您 见第4节: 此文件必须命名为svn.conf,并且必须能够被svnserve进程读取。 (我花了3天多的时间才同时理解svnserve sasl ldap和这个陷阱……) 我建议安装cyrus-sasl2-doc软件包,并仔细阅读cyrus-SASL一节以供系统管理员使用 我认为这是由调用的saslapi引起的
result = sasl_server_new(SVN_RA_SVN_SASL_NAME,
hostname, b->realm,
localaddrport, remoteaddrport,
NULL, SASL_SUCCESS_DATA,
&sasl_ctx);
if (result != SASL_OK)
{
svn_error_t *err = svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
sasl_errstring(result, NULL, NULL));
SVN_ERR(write_failure(conn, pool, &err));
return svn_ra_svn__flush(conn, pool);
}
正如您所看到的,SVN服务无法处理访问故障,只有Ok(正常)或error(错误)…这可能是一个延迟的答案,但这一个为我解决了它。谢谢
START=yes
MECHANISMS="sasldb"
result = sasl_server_new(SVN_RA_SVN_SASL_NAME,
hostname, b->realm,
localaddrport, remoteaddrport,
NULL, SASL_SUCCESS_DATA,
&sasl_ctx);
if (result != SASL_OK)
{
svn_error_t *err = svn_error_create(SVN_ERR_RA_NOT_AUTHORIZED, NULL,
sasl_errstring(result, NULL, NULL));
SVN_ERR(write_failure(conn, pool, &err));
return svn_ra_svn__flush(conn, pool);
}