凌峰创科服务平台

Linux SVN服务器如何配置HTTP访问?

  • 通过 Web 浏览器访问:用户可以直接在浏览器中查看仓库内容。
  • 成熟的权限控制:可以利用 Apache 的 .htaccess 文件和用户认证,实现精细化的访问控制。
  • SSL/TLS 支持:可以轻松配置 HTTPS,确保数据传输安全。
  • 集成性好:可以与现有的 Web 服务和认证系统(如 LDAP)集成。

整体流程概览

  1. 安装必要软件:安装 SVN、Apache 和 SVN 的 Apache 模块。
  2. 创建 SVN 仓库:在服务器上创建一个或多个 SVN 版本控制仓库。
  3. 配置 Apache:编辑 Apache 的配置文件,让它知道如何处理 SVN 请求。
  4. 配置 SVN 认证:创建用于访问 SVN 仓库的用户和密码。
  5. 启动并测试服务:启动 Apache 服务,并从客户端进行连接测试。

详细步骤

我们以一个常见的 Linux 发行版(如 CentOS/RHEL 或 Ubuntu/Debian)为例进行说明。

Linux SVN服务器如何配置HTTP访问?-图1
(图片来源网络,侵删)

第 1 步:安装必要的软件包

对于 CentOS / RHEL / Rocky Linux / AlmaLinux:

# 更新软件包列表
sudo yum update
# 安装 subversion, httpd (Apache), 和 mod_dav_svn 模块
sudo yum install -y subversion httpd mod_dav_svn

对于 Ubuntu / Debian:

# 更新软件包列表
sudo apt update
# 安装 subversion, apache2, 和 libapache2-svn 模块
sudo apt install -y subversion apache2 libapache2-svn

安装完成后,mod_dav_svn 模块会自动在 Apache 中启用。

第 2 步:创建 SVN 仓库

我们约定将 SVN 仓库存放在 /var/svn 目录下。

Linux SVN服务器如何配置HTTP访问?-图2
(图片来源网络,侵删)
# 创建仓库根目录
sudo mkdir -p /var/svn
# 创建一个新的 SVN 仓库,例如名为 'myproject'
# 使用 --fs-type fsfs 表示使用文件系统存储,这是推荐的方式
sudo svnadmin create /var/svn/myproject
# 设置仓库目录的所有权,让 Apache 用户可以读写
# Apache 的默认运行用户在 CentOS 上是 'apache',在 Ubuntu 上是 'www-data'
# 你可以使用 `ps aux | grep httpd` 或 `ps aux | grep apache2` 来确认
sudo chown -R apache:apache /var/svn/myproject  # CentOS/RHEL
# sudo chown -R www-data:www-data /var/svn/myproject # Ubuntu/Debian
# 设置适当的权限
sudo chmod -R 770 /var/svn/myproject

第 3 步:配置 Apache

这是最关键的一步,我们将创建一个专门的 Apache 配置文件来管理 SVN 访问。

创建 Apache 配置文件

# 使用你喜欢的文本编辑器,如 vim 或 nano
sudo vim /etc/httpd/conf.d/svn.conf  # CentOS/RHEL
# sudo vim /etc/apache2/sites-available/svn.conf # Ubuntu/Debian

在配置文件中添加以下内容

这是一个基本配置,允许所有用户读写访问,我们稍后会修改它以增加认证。

Linux SVN服务器如何配置HTTP访问?-图3
(图片来源网络,侵删)
# 在 CentOS/RHEL 上,配置文件通常在 /etc/httpd/conf.d/
# 在 Ubuntu/Debian 上,配置文件通常在 /etc/apache2/sites-available/
# 需要使用 `a2ensite svn.conf` 启用,并创建符号链接到 sites-enabled/
<Location /svn>
    # 设置 SVN 仓库的根目录
    DAV svn
    SVNParentPath /var/svn
    # 认证类型(Basic, Digest 等)
    AuthType Basic
    # 认证领域,会在浏览器弹窗中显示
    AuthName "SVN Repository for MyProject"
    # 指定用户密码文件的位置
    # 注意:这个文件我们稍后会创建
    AuthUserFile /etc/svn-auth-users
    # 只有认证成功的用户才能访问
    Require valid-user
    # (可选)控制访问权限
    # 这行表示允许所有认证用户都有读写权限
    # SVNPathAuthz on
    # <LimitExcept GET PROPFIND OPTIONS REPORT>
    #     Require valid-user
    # </LimitExcept>
</Location>

配置文件解释:

  • <Location /svn>:定义一个 URL 路径 /svn 作为 SVN 服务的入口,用户将通过 http://your_server_ip/svn/myproject 来访问仓库。
  • DAV svn:告诉 Apache 这个位置使用 DAV 协议,并且是 SVN。
  • SVNParentPath /var/svn:指定包含所有 SVN 仓库的父目录,这样你就可以通过 /svn/myproject, /svn/anotherproject 等路径访问多个仓库。
  • AuthType Basic:使用基础的 HTTP 认证。
  • AuthName "...":认证提示信息。
  • AuthUserFile /etc/svn-auth-users:存储用户名和密码的文件路径。
  • Require valid-user:强制要求只有 AuthUserFile 中存在的用户才能访问。

检查并保存配置

确保你的配置没有语法错误。

对于 CentOS/RHEL:

sudo apachectl configtest
# 如果输出 Syntax OK,则表示配置正确

对于 Ubuntu/Debian:

# 如果是首次创建配置文件,需要启用它
sudo a2ensite svn.conf
# 检查语法
sudo apache2ctl configtest

第 4 步:创建 SVN 认证用户

现在我们来创建可以访问 SVN 仓库的用户。

# 使用 htpasswd 命令创建第一个用户 'user1'
# -c 选项表示创建新文件,如果文件已存在则不用 -c
sudo htpasswd -c /etc/svn-auth-users user1
# 系统会提示你输入并确认密码
# New password:
# Re-type new password:
# 添加更多用户(注意:添加第二个及以后的用户时,不要使用 -c 选项)
sudo htpasswd /etc/svn-auth-users user2
sudo htpasswd /etc/svn-auth-users user3

你可以使用 cat /etc/svn-auth-users 查看文件内容,它会是一行一行的加密密码。

第 5 步:启动并启用服务

启动并设置开机自启

对于 CentOS/RHEL:

sudo systemctl start httpd
sudo systemctl enable httpd

对于 Ubuntu/Debian:

sudo systemctl start apache2
sudo systemctl enable apache2

检查服务状态

sudo systemctl status httpd  # CentOS/RHEL
# sudo systemctl status apache2 # Ubuntu/Debian

确保服务状态为 active (running)

第 6 步:防火墙设置

如果服务器开启了防火墙,需要开放 HTTP (80) 和 HTTPS (443) 端口。

对于 CentOS/RHEL / Rocky Linux / AlmaLinux (使用 firewalld):

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

对于 Ubuntu / Debian (使用 ufw):

sudo ufw allow 'Apache Full'
sudo ufw reload

第 7 步:测试连接

你可以从任何一台电脑上进行测试了。

使用浏览器访问 打开浏览器,输入 http://<你的服务器IP地址>/svn/myproject。 你应该会弹出一个认证窗口,输入你之前创建的用户名(如 user1)和密码,认证成功后,你将看到仓库的目录结构。

使用 SVN 客户端访问 如果你安装了 SVN 客户端(如 TortoiseSVN 或 svn 命令行工具),可以检出仓库。

# svn checkout http://<你的服务器IP地址>/svn/myproject [本地目录]
svn checkout http://192.168.1.100/svn/myproject ~/myproject_local

它会提示你输入用户名和密码,成功后,你就在本地得到了一个工作副本。


进阶配置:基于路径的访问控制 (Path-based Authorization)

你不仅可以控制谁能访问,还可以控制谁能访问哪个仓库的哪个目录。

启用 SVNPathAuthz

编辑之前的 Apache 配置文件 /etc/httpd/conf.d/svn.conf,取消注释或添加 SVNPathAuthz on

<Location /svn>
    DAV svn
    SVNParentPath /var/svn
    AuthType Basic
    AuthName "SVN Repository"
    AuthUserFile /etc/svn-auth-users
    SVNPathAuthz on  # <--- 启用基于路径的授权
    Require valid-user
</Location>

创建 authz 文件

这个文件定义了用户和用户组对不同路径的读写权限。

创建一个全局的 authz 文件:

sudo vim /etc/svn-authz

/etc/svn-authz 文件示例:

# [groups] 定义用户组
[groups]
# 定义一个名为 'developers' 的组,包含 user1 和 user2
developers = user1, user2
# 定义一个名为 'admins' 的组,包含 user3
admins = user3
# [/] 表示所有仓库的根目录
# @developers 组的成员对所有仓库有读写权限
[/]
@developers = rw
# [myproject:/] 特指 'myproject' 仓库的根目录
# user3 用户对 'myproject' 仓库有读写权限
[myproject:/]
user3 = rw
# [myproject:/private] 特指 'myproject' 仓库下的 'private' 目录
# 这个目录只有 'admins' 组的成员可以读写
[myproject:/private]
@admins = rw
* = # 其他用户无任何权限

让 Apache 读取 authz 文件

编辑 Apache 配置文件,在 SVNParentPath 后面添加 AuthzSVNAccessFile 指令。

<Location /svn>
    DAV svn
    SVNParentPath /var/svn
    AuthzSVNAccessFile /etc/svn-authz # <--- 指向 authz 文件
    AuthType Basic
    AuthName "SVN Repository"
    AuthUserFile /etc/svn-auth-users
    SVNPathAuthz on
    Require valid-user
</Location>

重启 Apache 服务

sudo systemctl restart httpd # CentOS/RHEL
# sudo systemctl restart apache2 # Ubuntu/Debian

你的 SVN 服务器就配置完成了,并且具有精细的访问控制能力。

分享:
扫描分享到社交APP
上一篇
下一篇