- 前言
- 前天直播写代码完事了后,向我的svn仓库提交完代码后,闲得无聊就看了一下仓库日志
1.png
- 发现有很多非法错误请求,于是直播的时候就把这个日志监控拦截也补充到我之前的监控中了
- 也就是在网站更新页面中的2026-01-04中提到的实现拦截SVN非法请求
- 做完了这个功能后,于是乎我就去研究了一下官方的文档说明
- 选择服务器配置 - 《使用 Subversion 进行版本控制》发现以下的内容
- 如果您试图为您的团队设置最简单的服务器,使用普通的 svnserve 安装是最简单、最快的途径。 但是请注意,您的存储库数据将通过网络以明文形式传输。 如果您的部署完全在您公司的局域网或 VPN 内,这不成问题。 如果存储库暴露于开放的互联网,您可能需要确保存储库的内容不敏感(例如,它只包含开源代码), 或者您需要付出额外努力来配置 SASL 以加密网络通信。
- 好家伙根本就没有加密数据内容,好家伙合着我一直都在裸奔😏,当然只是存储库数据,用户密码是不会传输的
- 参考svnserve,自定义服务器 - 《使用 Subversion 进行版本控制》
- 默认情况下,svnserve 服务器只知道如何发送 CRAM-MD5[61] 身份验证质询。 本质上,服务器向客户端发送少量数据。 客户端使用 MD5 哈希算法对数据和密码的组合创建指纹,然后将指纹作为响应发送。 服务器使用存储的密码执行相同的计算,以验证结果是否相同。实际密码不会在网络上传输。
- 然后我就按照官方的要求进行配置加密,官方的文档中有两种方法实现
- 第一种是通过代理比如通过apache或nginx等web服务器连接svn,架构为svn+apache+ldap的集成
- 第二种是通过svn+sasl(+ldap)的集成
- 第一种的话checkout地址都需要从svn://改成http(s)://那我全部拉仓库的客户端都要换太麻烦了
- 毕竟svn客户端在1.5版本后都支持sasl功能了,所以这里直接用第二个方法就够了
- 安装SASL
- 首先安装相关的库
sudo apt install libsasl2-2 libsasl2-modules sasl2-bin- 配置
- 修改配置
sudo nano /etc/default/saslauthd- 配置内容
2.png
START=yes MECHANISMS="saslsb"- 配置介绍
START: 是否在系统启动时自动启动 yes:启用 no:禁用 MECHANISMS: 认证机制 sasldb:直接用自带的数据库文件(/etc/sasldb2)来存储和验证用户密码 pam:用系统的 PAM(Pluggable Authentication Modules)进行认证,比如系统的用户密码 ldap:使用 LDAP 目录服务验证用户 shadow:直接读取 /etc/shadow 文件验证系统用户(需要 root 权限) kerberos5:使用 Kerberos 进行认证- 重启服务
3.png
sudo /etc/init.d/saslauthd restart- 创建用户
4.png
- 添加
sudo saslpasswd2 -c -u 卟言SVN版本库 buyan- 删除
sudo saslpasswd2 -d -u 卟言SVN版本库 buyan- 测试
testsaslauthd -u buyan -p 123456789 -r 卟言SVN版本库5.png
- 出现下面的内容就说明配置正确
0: OK "Success."- 联动svn
- 创建配置文件
sudo touch /usr/lib/sasl2/svn.conf- 编辑配置文件
sudo nano /usr/lib/sasl2/svn.conf- 配置内容
6.png
pwcheck_method: saslauthd mech_list: CRAM-MD5 DIGEST-MD5 PLAIN- 配置说明
pwcheck_method: 指定 SASL 验证密码的方式 auxprop:使用 辅助属性插件(Auxiliary Property Plugin) 获取来用户密码,插件由 auxprop_plugin 指定(比如说 sasldb) saslauthd:直接使用 saslauthd 服务验证(在默认配置中/etc/default/saslauthd修改)。 pwcheck:使用 pwcheck 守护进程(已过时)。 shadow:直接读取系统 /etc/shadow 文件(需 root 权限)。 auxprop_plugin: 指定 auxprop 方式使用的具体插件 sasldb:使用 SASL 自带的数据库文件(通常是 /etc/sasldb2)存储用户密码 sql:使用 SQL 数据库(如 MySQL、PostgreSQL)来获取密码 ldapdb:使用 LDAP 目录服务来获取密码 mech_list: 指定 SASL 服务端支持的 认证机制列表 PLAIN: 明文传输用户名和密码(Base64 编码,本质仍是明文) CRAM-MD5: 基于挑战 - 响应(Challenge-Response)机制,不传输明文密码 DIGEST-MD5: 类似 CRAM-MD5,但更复杂,支持会话安全(Session Security)- 设置权限
7.png
sudo chown buyan:buyan /etc/sasldb2sudo chmod 600 /etc/sasldb2- 不设置可能会出现这种问题
8.png
- 配置SVN
- 安装步骤这里不再啰嗦了,可以查看ubuntu svn版本库搭建这一篇文章
- 修改配置
sudo nano /media/buyan/1/版本库/conf/svnserve.conf- 内容
9.png
[sasl] use-sasl = true min-encryption = 0 max-encryption = 256- 注意
- # password-db = passwd这行保持注释掉的状态,不使用passwd文件
- min-encryption因为sasl已经加密了如果像网上配置125可能会报Could not obtain the list of SASL mechanisms或者乱码
- 这里我忘记截图了
- realm要跟sasl创建用户的仓库一致并且不能有空格
- 参考svnserve,自定义服务器 - 《使用 Subversion 进行版本控制》
- 一些警告:首先,确保saslpasswd2的“realm”参数与您在存储库的svnserve.conf文件中定义的 realm 相匹配; 如果它们不匹配,身份验证将失败。此外,由于 SASL 的缺陷,公共 realm 必须是一个不包含空格的字符串。 最后,如果您决定使用标准的 SASL 密码数据库, 请确保svnserve程序对该文件具有读取权限(如果使用 OTP 等机制,可能还需要写入权限)。
10.png
- 重启
killall svnserve- 以用户身份运行不要使用sudo或管理员这样子限制对用户文件的读访问权限
svnserve –d –r /media/buyan/1/版本库11.png
- 测试
12.png
- 额外
- 其实如果是很多人开发比如公司内部,可以配LDAP来配合SASL
- LDAP协议的好处就是比如说你公司的所有员工在所有这些工具里共享同一套用户名和密码,
- 来人的时候新增一个用户就能自动访问所有系统,走人的时候一键删除就取消了他对所有系统的访问权限
- 不过我自己一个人的SVN就不搞这些花里胡哨的了,因为就我一个用户
- 参考
- 选择服务器配置 - 《使用 Subversion 进行版本控制》
- svnserve,自定义服务器 - 《使用 Subversion 进行版本控制》
- 相关
- SVN无法编辑日志信息的解决方法
- ubuntu svn版本库搭建
【Ubuntu 搭建 SASL+SVN 服务】
完结
回复给❌取消回复