SVN用户多了之后管理会变得越来越繁琐,由于我有Windows域环境,于是考虑让SVN使用域用户认证。
当然SVN本身是没办法支持域认证的,我们要依赖Apache,Apache上众多模块可以满足我们的需求,本例中我们使用的均是官方提供的模块。
先下载需要的软件
Apache:在http://apache.freelamp.com//httpd/binaries/win32/ 下面有最新版本,这里我下载的是httpd-2.2.17-win32-x86-openssl-0.9.8o.msi
SVN服务端有很多,有兴趣的可以去http://subversion.apache.org/packages.html 找自己喜欢的,我下载的是http://sourceforge.net/projects/win32svn/上的Setup-Subversion-1.6.13.msi
好了,经过N个下一步以后,重启使svn的path目录生效,接下来我们开始配置
首先确定一下SVN主目录,如D:SVN,我们所有SVN库都放到这个文件夹下
然后先创建一个库用于配置测试

cd d:\svn
svnadmin create test

接下来拷贝SVN的模块文件(mod_authz_svn.so和mod_dav_svn.so在Subversionbin目录下)到Apache的modules文件夹下
修改Apache的conf/http.conf文件
增加模块,找到

#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so

修改为

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

增加svn和域认证的配置,这里我们使用svn为主目录做配置,不单独配置库的目录

 DAV svn
 # SVNPath c:/subversion/repositories/repo1
 SVNParentPath d:/svn
 SVNListparentPath on
 Order allow,deny
 Allow from all
 AuthType Basic
 AuthBasicProvider ldap
 AuthzLDAPAuthoritative off
 AuthName "SVN Server"
 AuthzSVNAccessFile d:/svn/svn.authz
 AuthLDAPURL "ldap://dc.local/DC=dc,DC=local?sAMAccountName?sub?(objectClass=*)"
 AuthLDAPBindDN "CN=apache_bind,CN=users,DC=example,DC=com"
 AuthLDAPBindPassword "password"
 #AuthLDAPFollowReferrals off
 AuthLDAPGroupAttributeIsDN on
 AuthLDAPGroupAttribute member
 #SSLRequireSSL
 #require ldap-group CN=svnusers,CN=Users,DC=example,DC=com
 require valid-user

根据自己实际情况在进行修改,然后再创建d:/svn/svn.authz文件,这里为了测试方便,所有域用户都可以读写,生产应用的话根据自己需要设置权限即可

 [/]
 * = rw