0

好的,所以我正在尝试在我的 Ubuntu 服务器上配置和安装 svnserve。到目前为止一切顺利,直到我尝试配置 sasl(以防止纯文本密码)。

所以; 我安装了 svnserve 并使其作为守护进程运行(也将其安装为带有命令的启动脚本svnserve -d -r /var/svn)。

我的存储库位于/var/svn并具有以下配置(可在/var/svn/myrepo/conf/svnserve.conf)(我留下注释)中找到:

[general]
anon-access = none
auth-access = write
realm = my_repo

[sasl]
use-sasl = true
min-encryption = 128
max-encryption = 256

对于 sasl,我在以下位置创建了一个 svn.conf 文件/usr/lib/sasl2/

pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /etc/my_sasldb
mech_list: DIGEST-MD5

我在该文件夹中创建了它,因为该链接上的文章建议:http ://svnbook.red-bean.com/nightly/en/svn.serverconfig.svnserve.html#svn.serverconfig.svnserve.sasl (也因为它存在并在我执行时被列为结果locate sasl)。

之后我执行了这个命令:

saslpasswd2 -c -f /etc/my_sasldb -u my_repo USERNAME

它还两次要求我输入密码,这是我提供的。一切顺利。发出以下命令时:

sasldblistusers2 -f /etc/my_sasldb

据我所知,我得到了正确的结果:

USERNAME@my_repo: userPassword

重新启动了 svnserve,也重新启动了整个服务器,并尝试连接。这是我的 TortoiseSVN 客户端的结果:

Authentication error from server: SASL(-13): user not found: unable to canonify  
user and get auxprops

我根本不知道我做错了什么。在过去的几个小时里,我一直在网上搜索,但除了我可能需要将 svn.conf 文件移动到另一个位置——例如,subversion 本身的安装位置之外,我什么也没找到。which svn结果/usr/bin/svn,因此我将 svn.conf 移至/usr/bin(尽管这对我来说不合适)。

即使重新启动后仍然无法正常工作。

我的想法不多了。还有谁?


编辑

我尝试改变这个(根据互联网上其他一些论坛告诉我的做法):在文件/etc/default/saslauthd中,我改变了

START=no
MECHANISMS="pam"

START=yes
MECHANISMS="sasldb"

(其实我已经改成START=no之前START=yes的了,但是忘记说了)。但仍然没有运气(我确实重新启动了整个服务器)。

4

2 回答 2

1

我查看了 /var/log/messages 并发现

localhost svnserve:无法打开 Berkeley db /etc/sasldb2:没有这样的文件或目录

当我为上述文件创建 sasldb 并获得正确的权限时,它就起作用了。看起来它忽略或不使用 sasl 数据库路径。

还有另一个建议是重新启动解决了问题,但我无法使用该选项。

于 2014-02-27T12:49:24.353 回答
1

看起来 svnserve 使用 SASL 的默认值...

检查 /etc/sasl2/svn.conf 是否可以被 svnserver 进程所有者读取。如果 /etc/sasl2/svn.conf 归用户 root、组 root 和 --rw------ 所有,svnserve 使用默认值。任何日志文件条目都不会警告您。

请参阅https://svn.apache.org/repos/asf/subversion/trunk/notes/sasl.txt的第 4 节:

该文件必须命名为 svn.conf,并且必须可以被 svnserve 进程读取。(我花了 3 天多的时间才同时理解 svnserve-sasl-ldap 和这个陷阱..)

我建议安装 cyrus-sasl2-doc 包,并仔细阅读 Cyrus SASL for System Administrators 部分。

我预计这是由调用的 SASL API 引起的

  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);
  }

如您所见,无法预见通过 svnserve 处理访问失败,只有 Ok 或错误预期......

于 2015-05-08T06:52:31.610 回答