Linux 下 SVN 安装、配置及权限管理教程
本文以 CentOS/RHEL 为例,详细介绍了在 Linux 系统上安装 Subversion 服务器的完整流程,包括使用 yum/apt 安装、创建版本库、配置 svnserve.conf、passwd 和 authz 三个核心文件实现用户与权限管理,以及启动服务、开放防火墙端口和客户端连接测试的方法。
本教程将指导你在 Linux 系统(以 CentOS/RHEL 为例,Ubuntu/Debian 类似)上安装 Subversion (SVN) 服务器,创建版本库,并配置用户权限。
1. 安装 SVN
CentOS / RHEL / Fedora
使用 yum 或 dnf 安装:
bash
sudo yum install -y subversion
# 或者
sudo dnf install -y subversion
Ubuntu / Debian
使用 apt 安装:
bash
sudo apt-get update
sudo apt-get install -y subversion
验证安装
安装完成后,检查版本以确认安装成功:
bash
svnserve --version
2. 创建版本库
创建存储目录
通常将 SVN 版本库存放在 /var/svn 或 /opt/svn 目录下。这里以 /var/svn 为例:
bash
sudo mkdir -p /var/svn
初始化版本库
使用 svnadmin create 命令创建一个名为 myproject 的版本库:
bash
sudo svnadmin create /var/svn/myproject
执行后,/var/svn/myproject 目录下会自动生成以下子目录和文件:
conf/: 配置文件目录(核心配置在此)db/: 版本数据存储目录hooks/: 钩子脚本目录locks/: 锁文件目录format: 版本库格式标识
3. 配置用户与权限
进入版本库的 conf 目录:
bash
cd /var/svn/myproject/conf
你需要修改三个核心文件:svnserve.conf、passwd 和 authz。
3.1 配置主服务文件 (svnserve.conf)
编辑 svnserve.conf:
bash
vim svnserve.conf
找到 [general] 部分,修改或取消注释以下行。**注意:配置项必须顶格写,前面不能有空格,等号两边建议保留空格。**
ini
[general]
# 禁止匿名访问
anon-access = none
# 授权用户拥有读写权限
auth-access = write
# 指定密码文件为当前目录下的 passwd
password-db = passwd
# 指定权限配置文件为当前目录下的 authz
authz-db = authz
# 认证域名称(客户端登录时显示)
realm = MyProject Repo
3.2 设置用户密码 (passwd)
编辑 passwd 文件添加用户:
bash
vim passwd
在 [users] 块中添加用户名和密码,格式为 用户名 = 密码:
ini
[users]
admin = admin123
developer1 = dev123
intern = intern123
3.3 配置详细权限 (authz)
编辑 authz 文件定义用户组和目录权限:
bash
vim authz
**示例配置:**
ini
[groups]
# 定义用户组
admins = admin
developers = developer1
interns = intern
# 根目录权限
[/]
# 管理员组拥有读写权限
@admins = rw
# 其他所有人默认无权限
* =
# 项目主干目录权限
[/trunk]
# 开发组拥有读写权限
@developers = rw
# 实习生只有只读权限
@interns = r
# 特定敏感目录权限
[/trunk/config]
# 只有管理员能修改配置
@admins = rw
# 其他人无权限
* =
**权限说明:**
r: 只读rw: 读写*: 代表所有其他用户@组名: 引用用户组- 重要提示:如果在同一级目录下配置了权限,建议对该层级下的所有子目录都进行显式配置,以避免权限继承导致的访问问题。
4. 启动 SVN 服务
手动启动
使用 svnserve 命令启动服务,-d 表示后台运行,-r 指定版本库的根目录:
bash
sudo svnserve -d -r /var/svn
注意:-r 指定的是版本库的父目录(即 /var/svn),而不是具体的项目目录(/var/svn/myproject)。客户端连接时使用 svn://IP地址/myproject。
检查服务状态
bash
ps -ef | grep svnserve
开放防火墙端口
SVN 默认使用 3690 端口。
**CentOS 7+ (firewalld):**
bash
sudo firewall-cmd --permanent --add-port=3690/tcp
sudo firewall-cmd --reload
**Ubuntu (ufw):**
bash
sudo ufw allow 3690/tcp
5. 客户端连接测试
在本地机器上使用 SVN 客户端(如 TortoiseSVN 或命令行)进行连接。
**命令行测试:**
bash
svn checkout svn://<服务器IP>/myproject --username developer1
输入密码后,如果能成功检出代码,则说明配置成功。
6. 常见问题与维护
修改配置后生效规则
- 修改
passwd和authz文件:立即生效,无需重启服务。 - 修改
svnserve.conf文件:需要重启 SVN 服务才能生效。
重启 SVN 服务
bash
# 查找进程 ID
ps -ef | grep svnserve
# 杀死进程 (假设 PID 为 12345)
kill -9 12345
# 重新启动
svnserve -d -r /var/svn
权限报错排查
如果客户端提示“权限不足”或“认证失败”,请检查:
svnserve.conf中的password-db和authz-db路径是否正确。authz文件中是否对访问的目录进行了显式授权。- 配置文件每行是否顶格写,没有多余空格。
- 防火墙是否放行了 3690 端口。
开机自启(可选)
可以将启动命令加入 /etc/rc.local 或创建 systemd 服务文件以实现开机自启。
**Systemd 服务示例 (/etc/systemd/system/svnserve.service):**
ini
[Unit]
Description=Subversion Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/svnserve -d -r /var/svn
PIDFile=/var/run/svnserve.pid
Restart=on-failure
[Install]
WantedBy=multi-user.target
启用服务:
bash
sudo systemctl daemon-reload
sudo systemctl enable svnserve
sudo systemctl start svnserve