当前位置: 首页 > news >正文

Ubuntu 搭建 SASL+SVN 服务

本文摘自qaq卟言博客。Ubuntu 搭建 SASL+SVN 服务

前言

前天直播写代码完事了后,向我的svn仓库提交完代码后,闲得无聊就看了一下仓库日志

发现有很多非法错误请求,于是直播的时候就把这个日志监控拦截也补充到我之前的监控中了
也就是在 卟言更新日志 页面中的2026-01-04中提到的实现拦截SVN非法请求
做完了这个功能后,于是乎我就去研究了一下官方的文档说明

选择服务器配置 - 《使用 Subversion 进行版本控制》
发现以下的内容


如果您试图为您的团队设置最简单的服务器,使用普通的 svnserve 安装是最简单、最快的途径。
但是请注意,您的存储库数据将通过网络以明文形式传输。
如果您的部署完全在您公司的局域网或 VPN 内,这不成问题。
如果存储库暴露于开放的互联网,您可能需要确保存储库的内容不敏感(例如,它只包含开源代码),
或者您需要付出额外努力来配置 SASL 以加密网络通信。


好家伙根本就没有加密数据内容,好家伙合着我一直都在裸奔😏,当然只是存储库数据,用户密码是不会传输的

参考:

svnserve,自定义服务器 - 《使用 Subversion 进行版本控制》

默认情况下,svnserve 服务器只知道如何发送 CRAM-MD5[61] 身份验证质询。
本质上,服务器向客户端发送少量数据。
客户端使用 MD5 哈希算法对数据和密码的组合创建指纹,然后将指纹作为响应发送。
服务器使用存储的密码执行相同的计算,以验证结果是否相同。实际密码不会在网络上传输。

然后我就按照官方的要求进行配置加密,官方的文档中有两种方法实现
第一种是通过代理比如通过apachenginxweb服务器连接svn,架构为svn+apache+ldap的集成
第二种是通过svn+sasl+ldap的集成
第一种的话checkout地址都需要从svn://改成http(s)://那我全部拉仓库的客户端都要换太麻烦了
毕竟svn客户端在1.5版本后都支持sasl功能了,所以这里直接用第二个方法就够了

SASL

安装SASL

sudo apt install libsasl2-2 libsasl2-modules sasl2-bin

配置sasl

修改配置
sudo nano /etc/default/saslauthd

配置内容

START=yes
MECHANISMS="saslsb"

配置介绍

START: 是否在系统启动时自动启动
yes:启用
no:禁用
MECHANISMS: 认证机制
sasldb:直接用自带的数据库文件(/etc/sasldb2)来存储和验证用户密码
pam:用系统的 PAM(Pluggable Authentication Modules)进行认证,比如系统的用户密码
ldap:使用 LDAP 目录服务验证用户
shadow:直接读取 /etc/shadow 文件验证系统用户(需要 root 权限)
kerberos5:使用 Kerberos 进行认证

重启服务

/etc/init.d/saslauthd restart

创建用户

添加

sudo saslpasswd2 -c -u 卟言SVN版本库 buyan

删除

sudo saslpasswd2 -d -u 卟言SVN版本库 buyan
测试

testsaslauthd -u buyan -p 123456789 -r 卟言SVN版本库

联动svn

创建配置文件
sudo touch /usr/lib/sasl2/svn.conf
编辑配置文件
sudo nano /usr/lib/sasl2/svn.conf

配置内容

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)

设置权限

sudo chown buyan:buyan /etc/sasldb2
sudo chmod 600 /etc/sasldb2

不设置可能会出现这种问题

SVN

配置SVN

安装步骤这里不再啰嗦了,可以查看ubuntu svn版本库搭建

修改配置

sudo nano /media/buyan/1/版本库/conf/svnserve.conf

内容

[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 等机制,可能还需要写入权限)。

重启

killall svnserve

以用户身份运行不要使用sudo或管理员这样子限制对用户文件的读访问权限

svnserve –d –r /media/buyan/1/版本库

测试

额外

其实如果是很多人开发比如公司内部,可以配LDAP来配合SASL
LDAP协议的好处就是你公司的所有员工在所有这些工具里共享同一套用户名和密码,
来人的时候新增一个用户就能自动访问所有系统,走人的时候一键删除就取消了他对所有系统的访问权限
不过我自己一个人的SVN就不搞这些花里胡哨的了,因为就我一个用户

参考

选择服务器配置 - 《使用 Subversion 进行版本控制》

svnserve,自定义服务器 - 《使用 Subversion 进行版本控制》

相关

SVN无法编辑日志信息的解决方法

ubuntu svn版本库搭建

http://www.jsqmd.com/news/1119666/

相关文章:

  • STM32F103C8T6的USB—CDC虚拟端口组件(HAL)
  • 3步搞定批量图片下载:让效率提升10倍的免费工具
  • 特征融合技术提升小目标检测性能:原理、实现与工程实践
  • PM的游戏思维
  • 肩颈僵得像石板?别光瞎揉,堵的不只是肌肉
  • 【YOLOv8多模态融合改进】| TGRS 2025 HFFE分层特征融合编码器 双模态注意力加权 + 跨尺度对齐融合,强化弱小目标多模态特征互补
  • Deepseek-V4与Claude-Opus-4.7编程实战对比:谁更懂中国开发者
  • Claude Sonnet 5 英语写作完全指南:从四六级到SCI论文,一套提示词方法论搞定所有层次
  • 如何用AI游戏助手提升射击游戏操作效率与体验
  • AI开发环境本地化:Codex与DeepSeek的协议转换与代理部署实战
  • 【Java从入门到入土】45:性能调优实战:从理论到实践
  • Spark Java终极指南:高效构建RESTful API的完整教程
  • 普通人也能入场的3个高薪AI岗位,平均月薪超3万!AI时代的机会在这里!
  • Oracle - 索引设计最佳实践,高并发场景下的索引优化
  • 我的渗透测试攻防指南
  • 终极指南:使用Nano框架构建高性能实时游戏服务器
  • 第169章 文明的尺度(“神谕”)
  • Docker 镜像供应链安全:镜像能拉下来,不代表可信
  • 终极指南:如何让AI生成的前端设计不再千篇一律
  • sw-precache安全实践:HTTPS强制要求与Service Worker缓存配置详解
  • AI Agent 面试题 708:如何实现Agent的安全策略的自动化测试?
  • 基于微信小程序的原生开发流程实践——从0到可用
  • 《大模型实战指南》—— 面向软件开发者的系统性入门8
  • 汽车工程中的需求管理:2025年最佳实践
  • SVN简单使用教程
  • 第170章 听证会的逆转(墨子)
  • Windows平台Appium 2.0自动化测试环境搭建与真机连接实战指南
  • 直流电机双闭环控制原理与Simulink仿真实践
  • GPT-4 Turbo与Claude 3技术对比及国产大模型落地实践
  • C#嵌入x86汇编——一个GPIO接口的实现