接老大需求,组内需要使用SVN搭建版本控制服务器。以期逐步从MKS转到SVN。于是得此良机接触到一些版本控制的知识。
由于公司的办公系统全部基于Windows域验证,为了与之一致,SVN采用Windows域用户验证,能省去了不少账户管理的麻烦。为了支持Windows域验证,Apache HTTP Server必不可少。据我所知,采用Apache HTTP Server有如下优点:
1. 能借用Apache丰富的验证模块。
2. 支持WebDav
3. 能通过浏览器简单访问版本库。
所需软件需从三处获得,需要注意的是这三个软件都有一定的版本对应关系。如果搭配不当,会遇到一些想不到的麻烦。
1. Apache. [直接下载]
打开Apache HTTP Server的官方下载页面,下载一个2.2.*系列最新版即可。目前最新版本是2.28
2. SVN. [直接下载]
我目前所能获取到的最新版本是1.46。点这里打开Subversion的官方网站,需要注意的是SVN需要与Apache版本相对应,因为Apache是2.2系列,所以你需要选择类似下图的下载链接。
3. mod_auth_sspi [直接下载]
即Windows域验证模块。打开官方下载地址。一般会有两个不同的版本,注意区分2.2和2.0版本。下载2.2版本与Apache搭配。即第二个下载地址。
4. TortoiseSVN [直接下载]
方便好用的Windows下SVN客户端。打开官方网站下载最新版本即可。
1. 首先安装Apache服务器, 我安装后的途径为
D:\Program Files\Apache Software Foundation\Apache2.2
2. 然后解压缩SVN到任意目录,我解压后的目录为
E:\svn-win32-1.4.6
3. 从mod_auth_sspi压缩包里的\bin文件夹里取出mod_auth_sspi.so复制到
D:\Program Files\Apache Software Foundation\Apache2.2\modules
4. 在E:\svn-win32-1.4.6\bin中复制intl3_svn.dll和libdb44.dll至
D:\Program Files\Apache Software Foundation\Apache2.2\bin
5. 在E:\svn-win32-1.4.6\bin中复制mod_authz_svn.so和mod_dav_svn.so至
D:\Program Files\Apache Software Foundation\Apache2.2\modules
6. TortoiseSVN就可以随意安装。安装完毕后在任意目录下创建一个新的文件夹。然后右键此文件夹,在右键菜单选择TortoiseSVN->Creat repository here->FSFS创建一个版本库。例如我新建的版本库目录为
E:/svnroot
软件安装完毕,剩下的就是配置好两个配置文件了。
首先是配置D:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
首先是模块加载部分。我的配置如下,请特别注意对比红色部分,没有的请添加该行。
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule sspi_auth_module modules/mod_auth_sspi.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule headers_module modules/mod_headers.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_module modules/mod_dav.so
LoadModule authz_svn_module modules/mod_authz_svn.so
在httpd.conf文件最后加上 (蓝色部分为注释,可以删除)
#这里设置成”/svn/”访问版本库的网址就是http://localhost/svn/,
#如果设置成”/”访问网址就是http://localhost
<Location /svn/>
DAV svn
#列出根目录下的所有项目
SVNListParentPath on
#版本库目录,请参照修改。
SVNParentPath E:/svnroot
#目录访问权限控制文件,现指向与httpd.conf同目录
AuthzSVNAccessFile conf/access.conf
#认证对话框提示信息。最好使用英文
AuthName “ZyXEL VOIP”
#SSPI表示使用域验证
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
#指定Windows域。ZYCN是我们公司Windows域,请对照修改
SSPIDomain ZYCN
#省略用户id前的域名部分,需要注意的是如果这个选项打开,
#那么access.conf里面的用户id也不能带域名,
#如果这个选项关闭,那么用户id就需要带域名。此外,这个选项影响到Apache的log。
#这里有一个技巧就是如果你不能确定你所处的域,你可以将此选项置为off,
#然后尝试从Web登陆,查看Apache的error.log,可以发现log会自动给用户id加上现处的域,
#这样就可以确定自己所处的域SSPIDomain.
SSPIOmitDomain on
# 是否允许非IE客户端(必须打开)
SSPIOfferBasic On
# 关闭几本验证方式,如果需要多重验证可以打开。
SSPIBasicPreferred Off
# 用户名大小写,由于目录访问权限控制文件AuthzSVNAccessFile,
#也就是access.conf里的用户id用大小写敏感,而在Windows的世界里大小写是一致的。
#所以我们有必要统一大小写规范。当这个选项设置为lower时,
#你必须把access.conf里的用户id也统一设置为小写,否则验证将会失败。
SSPIUsernameCase lower
# 用户必须通过认证,就是要求所有用户必须通过验证才能登陆SVN.
#至于Require group “ZYCN\wx-sw1″组验证问题稍候再谈。
Require valid-user
#Require group “ZYCN\wx-sw1″
</Location>
然后需要配置D:\Program Files\Apache Software Foundation\Apache2.2\conf\access.conf
access.conf默认是不存在的,需要自行创建。下面给出access.conf文件内容
[groups]
admins = w00666, w00777
[/]
@admins = rw
上面的w00768就是用户id, 注意全部小写,并且当SSPIOmitDomain on时用户id前不要加域名. 更精确的目录权限控制你可以参考其他文档。
给出我的两个配置文档吧。SVN配置.zip
另外还有两个令人不爽的问题:
1. mod_auth_sspi 组件好像并不支持Windows Domain Group验证,也就是说:例如w00666, w00777均隶属于软件一部,在Windows域验证里这种分组权限十分常见,但是mod_auth_sspi 并不识别这种分组。在这里可以找到相关的讨论。不知道有没有其他办法可以实现。
2. 由于我们公司域验证都是采用工号,所以在这种验证下用户id都只能显示工号,这样对应起来很不直观,不知道有没有办法能把工号对应的英文名显示出来。(当然Windows域服务器已经有这些信息了,但是不知道如何建立这个映射关系)
PS: 由于第二个原因,老大还是否决了SSPI验证,而采用了Basic验证。。。Faint..白忙活了。。
相关日志


没有评论