Subversion (SVN)与ldap集成

在企业级开发环境中,将 Subversion (SVN)LDAP (如 Active Directory 或 OpenLDAP) 集成,是实现账号统一管理、提高安全性的标准做法。


1. 核心原理

通常情况下,SVN 本身并不直接支持 LDAP。我们通过 Apache HTTP Server (httpd) 作为中间层,利用其 mod_authnz_ldap 模块来完成认证逻辑。


2. 环境准备

确保你的服务器已安装以下组件:

  • Apache HTTP Server (httpdapache2)
  • Subversion 及其 Apache 模块 (mod_dav_svn)
  • LDAP 模块 (mod_ldapmod_authnz_ldap)

3. 关键配置步骤

3.1加载必要模块

在 Apache 的配置文件(如 httpd.conf)中,确保以下模块已启用:

1
2
3
4
5
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so

3.2配置 SVN 虚拟目录与 LDAP

在 Apache 配置中添加以下内容,定义 SVN 仓库路径及认证规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<Location /svn>
DAV svn
SVNParentPath /var/svn/repositories # SVN 仓库根目录

# 启用 LDAP 认证
AuthType Basic
AuthName "SVN 统一认证登录"
AuthBasicProvider ldap

# LDAP 服务器连接配置
AuthLDAPURL "ldap://192.168.1.100:389/dc=example,dc=com?sAMAccountName?sub?(objectClass=user)"

# 用于搜索 LDAP 的管理账号(Bind DN)
AuthLDAPBindDN "cn=admin,dc=example,dc=com"
AuthLDAPBindPassword "admin_password"

# 权限控制
Require valid-user

# 可选:精细化权限控制(Authz)
AuthzSVNAccessFile /var/svn/conf/authz
</Location>

4. 实践中的关键参数说明

参数 说明 示例
AuthLDAPURL LDAP 连接字符串。格式:协议://地址:端口/搜索基准?属性?范围?过滤器 ldap://ad.company.com/ou=users,dc=com?uid?sub
sAMAccountName Windows AD 常用的登录名属性。如果是 OpenLDAP,通常用 uid sAMAccountName
AuthzSVNAccessFile 非常重要。LDAP 只负责“你是谁”(认证),此文件负责“你能看哪个文件夹”(授权)。 /etc/svn/authz