CentOS如何从零开始搭建SVN服务器并配置权限?

在CentOS系统上搭建Subversion(SVN)服务器是企业开发中常见的版本控制需求,SVN作为一个集中式的版本控制系统,能够有效管理代码和文档,追踪每一次修改,本文将详细介绍在CentOS环境下,从安装到配置一个完整可用的SVN服务器的全过程,旨在提供一份清晰、准确、可操作的指南。

CentOS如何从零开始搭建SVN服务器并配置权限?

准备工作

在开始之前,请确保您具备以下条件:

  • 一台已安装CentOS 7或更高版本的服务器。
  • 拥有root权限或sudo权限的用户账户。
  • 服务器已连接到互联网,以便下载安装包。

第一步:安装Subversion

CentOS的官方软件源中包含了Subversion,我们可以直接使用yum(CentOS 7)或dnf(CentOS 8/9)包管理器进行安装。

打开终端,执行以下命令:

# 对于CentOS 7
sudo yum install subversion -y
# 对于CentOS 8/9
sudo dnf install subversion -y

安装完成后,可以通过以下命令验证是否安装成功以及查看其版本号:

svnserve --version

如果屏幕上输出了SVN的版本信息,则表示安装已成功。

第二步:创建SVN仓库

SVN仓库是存储所有版本数据的地方,我们会将所有仓库集中存放在一个统一的目录下,例如/svn

  1. 创建主目录

    sudo mkdir /svn
  2. 创建项目仓库
    假设我们要为名为my_project的项目创建一个仓库。

    sudo svnadmin create /svn/my_project

    执行后,/svn/my_project目录下会生成一系列文件和子目录,包括confdbhookslocks等。conf目录是我们接下来配置的重点。

第三步:配置SVN服务

SVN的配置主要围绕/svn/my_project/conf目录下的三个核心文件展开:svnserve.confpasswdauthz


  1. 此文件控制着SVN服务的整体行为,使用vinano编辑器打开它:

    sudo vi /svn/my_project/conf/svnserve.conf

    修改或取消注释以下几行,使其配置如下:

    CentOS如何从零开始搭建SVN服务器并配置权限?

    [general]
    # 禁止匿名访问,设为none
    anon-access = none
    # 授权用户可读写
    auth-access = write
    # 指定密码文件路径
    password-db = passwd
    # 指定权限控制文件路径
    authz-db = authz
    # 指定认证域,会在客户端提示时显示
    realm = My Project Repository

    注意:每行配置前不能有空格,否则会导致服务启动失败。

  2. 配置passwd(用户密码文件)
    此文件用于存储SVN用户的用户名和密码(明文)。

    sudo vi /svn/my_project/conf/passwd

    [users]标签下添加用户,格式为用户名 = 密码

    [users]
    harry = harrys_secret
    sally = sallys_secret
    admin = admin_strong_password
  3. 配置authz(权限控制文件)
    此文件实现了精细的路径权限管理,可以控制不同用户或用户组对不同目录的访问权限。

    sudo vi /svn/my_project/conf/authz

    配置示例如下:

    [groups]
    # 定义用户组
    dev_team = harry, sally
    admin_team = admin
    # 为根目录设置权限
    [/]
    # admin_team组拥有读写权限
    @admin_team = rw
    # 其他用户无任何权限
    * = 
    # 为trunk目录设置权限
    [my_project:/trunk]
    # dev_team组拥有读写权限
    @dev_team = rw
    • [groups]:用于定义用户组。
    • [repository:/path]:指定要设置权限的仓库路径。[my_project:/]表示my_project仓库的根目录。
    • @group_name = r|w|rw:为用户组设置权限。
    • username = r|w|rw:为单个用户设置权限。
    • 表示未在上面提及的所有用户,后面不跟任何字符表示无权限。

第四步:启动SVN服务

配置完成后,就可以启动SVN服务了,我们使用svnserve命令,并以守护进程模式运行。

# -d 表示以守护进程模式运行
# -r /svn 表示将/svn作为SVN的根目录,客户端访问时无需再写此路径
sudo svnserve -d -r /svn/

启动后,可以使用psnetstat命令检查服务是否正常运行:

ps aux | grep svnserve
# 或
netstat -antlp | grep 3690

SVN的默认监听端口是3690,如果看到相关信息,说明服务已成功启动。

第五步:配置防火墙

为了使客户端能够从网络访问SVN服务器,需要在防火墙中开放3690端口。

# 添加端口
sudo firewall-cmd --permanent --add-port=3690/tcp
# 重新加载防火墙配置
sudo firewall-cmd --reload
# 检查端口是否已开放
sudo firewall-cmd --list-ports

第六步:客户端测试

在另一台机器上(或本机),可以使用SVN客户端(如TortoiseSVN或命令行 svn)进行测试。

使用命令行检出仓库:

svn checkout svn://<你的服务器IP地址>/my_project --username harry

系统会提示输入密码(harrys_secret),成功后,当前目录下会生成一个my_project文件夹,里面就是仓库的内容,您可以尝试在其中添加文件,然后commit到服务器,以验证写入权限。

CentOS如何从零开始搭建SVN服务器并配置权限?

至此,一个功能完备的SVN服务器已在CentOS上配置完成。


相关问答FAQs

我忘记了SVN用户的密码,或者需要为新员工添加账户,应该如何操作?

解答: 这个操作非常简单,您只需要登录到CentOS服务器,找到对应仓库的conf/passwd文件,直接编辑它即可。

  1. 使用 sudo vi /svn/my_project/conf/passwd 命令打开文件。
  2. 如果是修改密码,找到对应的用户名(如 harry = old_password),将其等号后面的密码修改为新密码(如 harry = new_strong_password)。
  3. 如果是添加新用户,只需在[users]标签下新增一行,按照 用户名 = 密码 的格式写入即可,new_user = user_password
    修改保存后,新的密码或账户会立即生效,无需重启SVN服务。

如何确保SVN服务在服务器重启后能够自动运行?

解答: 直接使用 svnserve -d 命令启动的服务在服务器重启后不会自动恢复,为了保证服务的高可用性,最佳实践是为SVN创建一个systemd服务单元。

  1. 创建服务文件
    sudo vi /etc/systemd/system/svnserve.service

  2. 写入以下内容

    [Unit]
    Description=Subversion protocol daemon
    After=network.target
    [Service]
    Type=forking
    User=svn
    Group=svn
    ExecStart=/usr/bin/svnserve -d -r /svn --pid-file=/run/svnserve/svnserve.pid
    PIDFile=/run/svnserve/svnserve.pid
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target

    注意:上述配置中使用了svn用户和组来运行服务,这是一个更安全的做法,您需要先创建此用户 sudo useradd svn 并将仓库目录的所有权转给它 sudo chown -R svn:svn /svn,如果不想创建新用户,也可以直接用root运行,但安全性较低。

  3. 启用并启动服务

    sudo systemctl daemon-reload
    sudo systemctl enable svnserve.service  # 设置开机自启
    sudo systemctl start svnserve.service   # 立即启动服务

    通过以上步骤,SVN服务就被注册为系统服务,并会在每次服务器启动后自动运行,您可以使用 sudo systemctl status svnserve.service 来查看其运行状态。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-08 07:40
下一篇 2025-10-08 07:44

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信