我已经使用 SASL 身份验证和加密设置了 svnserve,以便加密流量。应该允许匿名访问。我的配置文件conf/svnserve.conf
(删除了注释)如下所示:
[general]
anon-access = read
auth-access = write
realm = realm-of-repo
[sasl]
use-sasl = true
min-encryption = 128
max-encryption = 256
相关的sasl配置文件:
pwcheck_method: auxprop
auxprop_plugin: sasldb
sasldb_path: /path/to/sasldb
mech_list: DIGEST-MD5
当提供用户名和密码时,一切都按预期工作:我可以结帐并进行更改。但是,匿名访问(没有用户名或密码)失败,并显示以下错误消息:
svn: SASL(-1): generic failure: All-whitespace username.
如何使用svnserve
SASL 启用匿名 SVN 读取访问?我不是在寻找 Apache 解决方案。
答案1
强制use-sasl = true
身份验证(告诉 SVN 禁止匿名访问)。
您可以创建具有只读权限的用户并将其用于匿名访问,或者使用 http 进行只读访问并使用 sasl 进行读写访问。
答案2
我最近一直在寻找这方面的信息,想分享一下我的发现。使用 SASL 进行身份验证时可以允许匿名访问,但您应该知道,任何匿名访问都将不是被加密或保护完整性。
您已经anon-access = read
拥有svnserve.conf
,如所需。
接下来,您必须设置min-encryption = 0
,因为匿名访问机制既不支持加密也不支持完整性保护。跳过此步骤会导致在协商身份验证机制时匿名访问不可用。
最后一步是设置您的 SASL 身份验证机制,在svn.conf
(Subversion 的 SASL 配置文件)中。更改以下行:
mech_list: DIGEST-MD5
到
mech_list: DIGEST-MD5 ANONYMOUS
这将使匿名机制可用。重新启动svnserve
,您应该能够在没有身份验证提示的情况下执行签出。如果您使用每个目录的访问控制,您可能需要确认用户$anonymous
已被授予适当的访问权限。
有几件事需要考虑。如上所述,所有匿名访问都将以明文形式进行,如果您在公共网络上处理机密代码,您可能不希望出现这种情况。此外,所有用户都将通过匿名访问执行读取访问(签出等),因此您的日志可能对跟踪没有那么有用。此外,如果您允许匿名写入,所有代码都可能以匿名方式提交,这意味着您不知道谁提交了哪些更改。
正如评论中提到的,一种选择是创建一个名为 anonymous 的实际用户,使用简单的密码(没有密码会失败),并使用每个目录的访问控制来确保只授予读取访问权限,并且只授予您选择的目录的读取访问权限。这允许您保持加密/完整性检查,同时仍提供几乎与真正的匿名访问一样方便的访问。