在 CentOS 系统中搭建和管理 Subversion (SVN) 服务器,核心在于对其配置文件的精确控制,这些文件位于 SVN 仓库的 conf 目录下,共同定义了用户访问权限、认证方式和仓库行为,理解并熟练配置这些文件是确保 SVN 服务器安全、高效运行的关键。

核心配置文件概览
当使用 svnadmin create 命令创建一个新的 SVN 仓库后,系统会自动生成一个 conf 文件夹,其中包含三个至关重要的配置文件:svnserve.conf、passwd 和 authz,它们各司其职,协同工作,构成了 SVN 的权限管理体系。
svnserve.conf:主服务配置文件
这是 svnserve 独立服务器模式的主配置文件,用于控制服务器的全局行为,它采用类似 INI 文件的格式,主要包含 [general] 段落的设置。
以下是该文件中几个关键指令的说明:
| 指令 | 可选值 | 说明 |
|---|---|---|
anon-access |
none, read, write |
控制匿名用户的访问权限,出于安全考虑,通常设置为 none。 |
auth-access |
none, read, write |
控制已认证用户的默认访问权限,通常设置为 write。 |
password-db |
文件名(如 passwd) |
指定存储用户名和密码的文件,默认指向同目录下的 passwd 文件。 |
authz-db |
文件名(如 authz) |
指定基于路径的授权规则文件,默认指向同目录下的 authz 文件。 |
realm |
任意字符串 | 定义认证域名称,当客户端连接时,会显示此名称,帮助用户识别他们正在登录的仓库。 |
配置时,只需取消相应指令前的注释符()并设置期望的值即可,一个典型的安全配置片段如下:
[general] anon-access = none auth-access = write password-db = passwd authz-db = authz realm = My Company's Repository
passwd:用户认证文件
此文件负责存储用户的账户名和密码,格式非常简洁,文件内容分为一个 [users] 段落,下面是“用户名 = 密码”的键值对列表。

示例 passwd 文件内容:
[users] harry = harrys_secret sally = sallys_secret dev_team = dev_password
注意: svnserve 默认以明文形式存储密码,在生产环境中,应确保该文件的权限设置得当(chmod 600 passwd),仅允许 SVN 服务进程所有者读取,以防密码泄露。
authz:路径授权文件
authz 文件提供了最灵活、最强大的权限控制能力,可以实现基于仓库、目录甚至文件级别的精细授权,它支持用户组和路径规则的设置。
文件结构通常包含两个部分:[groups] 定义用户组,以及具体的路径权限规则。
示例 authz 文件内容:

[groups] # 定义一个名为 'developers' 的组,包含 harry 和 sally 两个用户 developers = harry, sally # 定义一个名为 'testers' 的组 testers = dev_team # 为根目录设置权限,所有用户默认无权限 [/] * = # 为 'project1' 仓库的 '/trunk' 目录设置权限 [project1:/trunk] @developers = rw # 'developers' 组拥有读写权限 @testers = r # 'testers' 组拥有只读权限 # 为 'project1' 仓库的 '/tags' 目录设置权限 [project1:/tags] @developers = r # 'developers' 组只能读取标签,不能修改
在这个例子中, 表示所有未明确指定权限的用户都没有任何权限。 符号用于引用用户组,通过这种配置,可以轻松实现复杂的团队协作权限模型。
相关问答 (FAQs)
我修改了 passwd 或 authz 文件后,新的权限设置没有生效,这是为什么?
解答: 这通常有两个主要原因,请确保 svnserve.conf 文件中的 password-db 和 authz-db 指令正确指向了你修改的文件,且文件路径无误,也是最常见的原因,你需要重启 svnserve 服务才能使配置更改生效,在 CentOS 上,可以使用如下命令重启服务:systemctl restart svnserve.service 或 service svnserve restart。
如何让 SVN 通过 Apache HTTP 服务器(http:// 或 https://)访问,配置文件有何不同?
解答: 通过 Apache 访问 SVN 需要安装 mod_dav_svn 模块,用户认证和授权不再由 svnserve.conf、passwd 和 authz 文件直接管理,而是集成到 Apache 的配置中,你需要在 Apache 的配置文件(如 httpd.conf 或一个独立的 SVN 配置文件)中使用 <Location> 指令来定义仓库路径,并利用 Apache 的认证模块(如 AuthType Basic、AuthUserFile)和授权模块(如 AuthzSVNAccessFile)来指定密码文件和权限文件,虽然 authz 文件的格式仍然可以复用,但用户密码通常存储在由 htpasswd 命令创建的独立文件中,而不是 SVN 的 passwd 文件,这种方式更灵活,且能与 Web 服务器的其他安全功能(如 SSL/TLS 加密)无缝集成。