让SubVersion使用Windows域用户进行登录验证

Date December 26, 2007

为了方便对单位中用户的统一管理,所以将SubVersion仓库改用Win2000 Server的域用户进行登录验证。

Windows的域即Active Directory符合LDAP规范,使用Apache自带的mod_auth_ldap在Windows上使用Active Directory进行验证时有问题,总会使Apache崩溃,非常令人讨厌。不过有第三方可用的支持Active Directory的LDAP验证模块可用,我采用的是mm_mod_auth_ldap。注意一点,mm_mod_auth_ldap需要Directory SDK for C 5.08的支持。

将下载的Directory SDK for C 5.08中的所有dll同mm_mod_auth_ldap的dll一同复制到Apache的modules目录下,并修改Apache的httpd.conf配置文件。

以下是我对httpd.conf文件添加的部分:

# 加载模块mm_auth_ldap_module模块
LoadModule mm_auth_ldap_module modules/mm_mod_auth_ldap.dll
# 设置对LDAP查询的缓冲参数
LDAP_UseMemoryCache_G On
LDAP_HashTableSize_G 1024
LDAP_CacheTTL_G       5000
LDAP_Persistent_G     On
SupportNestedGroups_G On

# 下面是个例子,只允许指定Windows域中SvnUser组中的用户对/svn进行访问
<location /svn>
# SubVersion的设置
DAV svn
SVNListParentPath on
# svn仓库的父级目录
SVNParentPath D:/SVNStore
AllowOverride None
AuthType Basic
AuthName "Windows2000 Server Domain"
Bind_Tries 3
# Active Directory服务器地址
LDAP_Server 127.0.0.1
LDAP_Protocol_Version 3
# 在此假设你的Active Directory上的域为mydomain.com
Base_DN "Cn=Users,DC=mydomain,DC=com"
# apacheuser和apacheuserpass是域中一个有效的用户(这里用的显示名称)和密码,用于查询
Bind_DN "cn=apacheuser,Cn=Users,DC=mydomain,DC=com"
Bind_Pass "apacheuserpass"
# 如果有问题,请打开下面这个选项进行调试并查看Apache的错误日志寻找问题
#LDAP_Debug On
# 用户登录时使用登录名
UID_Attr "sAMAccountName"
# 限制只允许SvnUser组的用户有权登陆,当然还需要将要授权用户加入SvnUser组
Require filter "(memberOf=CN=SvnUser,CN=Users,DC=mydomain,DC=com)"
</location>

注:这是原来我写过的一篇文章,在日志中发现有朋友通过旧的链接访问,可惜由于博客数据丢失已经无法再访问,所以我从Internet Archive网站找回了这篇文章,希望对需要的朋友们能有所帮助!

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>