在Linux系统上安装和配置SVN(Subversion)服务器是一个常见的需求,适用于代码版本管理、文档协作等场景,以下以CentOS 7为例,详细讲解SVN服务器的安装、配置、权限管理及启动过程,同时补充Ubuntu系统的差异操作,最后附上常见问题解答。

安装SVN服务器
环境准备
确保系统已更新至最新状态,并安装必要的依赖包:
# CentOS系统 sudo yum update -y sudo yum install -y subversion mod_dav_svn # Ubuntu系统 sudo apt update sudo apt install -y subversion libapache2-svn
mod_dav_svn是Apache服务器的模块,用于支持SVN通过HTTP协议访问,若仅使用svnserve协议(独立服务),则无需安装该模块。
创建SVN仓库
SVN仓库需存储在指定目录,通常选择/var/svn:
sudo mkdir -p /var/svn sudo svnadmin create /var/svn/project1
创建后,仓库目录结构如下:

/var/svn/project1/
├── conf/ # 配置文件目录
│ ├── svnserve.conf # 主配置文件
│ ├── passwd # 用户密码文件
│ └── authz # 权限控制文件
├── db/ # 数据库文件
├── hooks/ # 钩子脚本目录
├── locks/ # 锁文件目录
└── format # 仓库版本标识
配置SVN仓库
配置svnserve.conf
编辑/var/svn/project1/conf/svnserve.conf,取消以下行的注释并修改:
[general] anon-access = none # 禁止匿名访问 auth-access = write # 允许认证用户读写 password-db = passwd # 密码文件路径 authz-db = authz # 权限文件路径 realm = My SVN Repository # 仓库认证域
注意:配置文件中的行首不能有空格,且前后需有空格。
配置用户密码
编辑/var/svn/project1/conf/passwd,添加用户及密码:
[users] user1 = password1 user2 = password2
密码为明文存储,生产环境建议结合加密工具(如htpasswd)。

配置权限控制
编辑/var/svn/project1/conf/authz,定义用户和组的权限:
[groups] admin = user1 developers = user1, user2 [/] @admin = rw * = r [/project1/trunk] @developers = rw
[groups]:定义用户组,如admin组包含user1。[/]:仓库根目录权限,admin组有读写权限,其他用户只读。[/project1/trunk]:特定目录权限,developers组可读写。
启动SVN服务
使用svnserve独立服务
# 以后台方式启动,指定仓库目录和端口(默认3690) sudo svnserve -d -r /var/svn --listen-port 3690 # 检查服务状态 sudo netstat -tuln | grep 3690
停止服务可通过sudo killall svnserve或进程PID。
配置Apache支持(可选)
若需通过HTTP访问,需配置Apache:
# 编辑Apache配置文件(如/etc/httpd/conf.d/subversion.conf) sudo vim /etc/httpd/conf.d/subversion.conf
<Location /svn>
DAV svn
SVNParentPath /var/svn
AuthType Basic
AuthName "SVN Repository"
AuthUserFile /var/svn/passwd
Require valid-user
</Location>
创建密码文件并设置权限:
sudo htpasswd -cm /var/svn/passwd user1 sudo chown -R apache:apache /var/svn sudo systemctl restart httpd
访问地址为http://服务器IP/svn/project1。
防火墙与SELinux配置
防火墙设置
# CentOS 7 sudo firewall-cmd --permanent --add-service=svn sudo firewall-cmd --reload # Ubuntu sudo ufw allow 3690/tcp
SELinux配置(CentOS)
# 设置SELinux允许SVN sudo setsebool -P httpd_can_network_connect_db on sudo semanage port -a -t http_port_t -p tcp 3690
客户端连接测试
使用svn co命令测试连接:
# svnserve协议 svn co svn://localhost:3690/project1 # HTTP协议 svn co http://localhost/svn/project1
输入配置的用户名和密码,若成功检出代码则配置正确。
FAQs
Q1: 如何修改SVN仓库的认证域?
A: 编辑仓库目录下的svnserve.conf文件,修改realm参数的值,重启svnserve服务后生效。realm = New_Project_Repo。
Q2: SVN服务启动失败,提示“权限拒绝”怎么办?
A: 检查仓库目录的所有者和权限,确保运行SVN服务的用户(如apache或root)有读写权限,可通过sudo chown -R apache:apache /var/svn修复,同时检查SELinux是否阻止访问(使用ausearch -m avc -ts recent查看日志)。
