`

Windows server 2003 下Appache 和 Subversion 进行双向认证(一)

 
阅读更多

去年转到Subversion下后,确实尝到了Subversion的不少甜头,那个时候开发比较集中,绝大部分开发人员都不进行异地开发,因而一直使用Subversion 自带的svnserve服务器运行版本服务。随着公司业务的发展软件开发人员开发场地的分散,版本问题突显,为了解决这个问题,我不得不停下手头的工作研究下如何配置到外网上去。谁让我编程以外还得处理配置管理问题呢?!!经过一番Google和Baidu,总算搞定。做这记录在这里备忘.

本文阅读者必须已经能够熟悉使用SVN及理解版本库之类配置管理的基本概念,这里不对SVN安装配置这些东西作说明,官方文档已经说的够清楚了.
以下是我所用的资源信息:
    OS                  : Windows Server 2003
    SVN               :   svn-1.4.6-setup.exe
    HTTP Server :   apache_2.2.6-win32-x86-openssl-0.9.8e.msi
   Text Editor      :   gvim72.exe

一. Apache 服务器安装及配置
      到apache官方http://archive.apache.org/dist/httpd/binaries/win32/下载apache服务器 2.2.6(包含openssl)的版本,一定要2.2.6以上的版本,第一次我下的2.0的结果累死也不对,Google了下才发现svn1.4.6和apache 2.0的版本结合不起来……,当然可以不下含用openssl的版本,不过你可能需要到http://www.openssl.org/ 下载openssl并安装,或许要编译,我比较懒,没有去弄,也许你可以试试.

      有Windows操作经验的人都会安装,我安装的路径是默认的C:\Program Files\Apache Software Foundation\Apache2.2,反正随你便.安装成功后,服务器会自动启动,如果没有启动,检查端口80是否已被占用。你也可以在安装目录下的bin文件里找到ApacheMonitor.exe启动服务,再出错,就打开/logs/下的日志看看去Google 一下,我已经够啰嗦的了。

      验证下:浏览器地址栏中输入:http://localhost ,你将会看到 It works!. Apache就算安完啦!

二. 让SVN运行起来

     网上很多说先安装Apache ,再安装svn,SVN会自动配置到Apache里,但是对于我这种SVN已经很好地运行着的情况,我可不愿把它卸载掉再重新装起来,吃饱了撑着!幸好svn官方把这种情况考虑到了,那就照着说明来吧。Let’s Go!
     a) 告诉它要做什么
             Apache并不知道它将做什么样的服务,我们得告诉它应该运行什么.
             找到Subversion的安装目录,我的在C:\Program Files\Subversion\下面,进入bin目录。把下面的
         mod_authz_svn.so, mod_dav_svn.so,libdb44.dll拷贝到Apache安装目录的conf文件夹下面(例如我的
         就是C:\Program Files\Apache Software Foundation\Apache2.2\conf下).
        用文本编辑器(比如Ultraedit 32, Editplus,最好别用写字板和记事本.我最近对Linux下的工具比较感兴
         趣,所以用的是NT下的gvim,根linux下的基本一样,很好用而且免费)打开Apache安装目录下的
        /conf/ httpd.conf.找到
                #LoadModule dav_module modules/mod_dav.so           
                #LoadModule dav_fs_module modules/mod_dav_fs.so   
         两行,去掉前面的注释符#, 然后在这一系列LoadModule的最后面加上
               LoadModule dav_svn_module modules/mod_dav_svn.so    
               LoadModule authz_svn_module modules/mod_authz_svn.so
         不一定非要在最后,便这两行必须在mod_dav.so的后面,但是我建议你放到后面好些。
         这样Apache就会知道在启动时加载svn的模块与身份认证模块了
       b) 我在哪里
               前面只是告诉Apache要做什么,但是仓库在哪里,Apache一点也不知道,因而你还得告诉它你的配
          置库在哪个位置.
               还是在httpd.conf里,到最后一行,加入
                    <Location /svn>                               
                          DAV svn                                     
                          SVNParentPath D:\svnServices  
                    </Location>                                     
            保存,重启服务器.

          作点说明:
                <Location /svn>中的/svn标识了svn服务的根路径.表示你所有项目库服务都基于http://ip:port/svn/
          下的./svn命名随你喜欢
               DAV svn 指示DAV模块,老实说,现在我也不清楚它的具体作用,不用变它
               SVNParentPath , 指示SVN仓库父目录的所在地,相当于svnserve -d -r D:\svnServices 中的  
          -r 参数.

               另外,Subversion与Apache版本不一致时,就是在这里重启不了,害我重查了几次配置文件和说
          明文档。

          验证一下:
               如果你的配置管理库和我采用的管理方式有着一样的结构
                      / svnServices /repse1
                     / svnServices /repse2
               那么你就应该可以通过http://localhost/svn/repse1 看到repse1的源码库目录,那么恭喜你,
          基于http 的 svn服务器已经正确运行了.

        c) 别高兴太早-安全问题
                   随便找台开发机,checkout, edit, commit, update,看下吧,肯定吓一跳,随便哪个人都可以轻
           松浏览,修改代码库,想想把它放在公网上的后果吧!!

                   那么让我们现在开始处理用户身份的问题,其实很简单.
                   进入到Apache安装目录,使用htpasswd.exe 创建密码文件。htpasswd命令格式是:  
                           htpasswd [控制参数] 密码文件 用户名
                    由于是第一个用户,我们使用如下命令: htpasswd –cm uservalidate username1
             回车后会要求输入该用户密码,这条命令意思是创建uservalidate文件 –c 表示
            密码是使用MD5计算散列值 –m 控制,可以写成 –cm,并且加入用户username1.
             如果还需要加入其它用户,则使用命令 htpasswd –m username2加入就可以

                   把生成的密码文件 uservalidate 拷贝到一个目录中,只是为了方便管理,放到哪里都可以。
            我的放在了C:\svnValidate 下面。记住这个目录地址,下面要用到.

                   编写授权策略文件,这个文件同样随便放哪个目录。为了方便管理,我的仍然放在了
              C:\svnValidate 下面,命名为accessValidate,你也可以命一个你喜欢的名字。这个文件的编写和svn
             的授权文件编写方式基本一样。所以不要担心。如可以指定源码仓库
                          [reps1:/branches/calc/bug-142]
                          harry = rw
                          sally = r

                          [reps2:/]
                          sally = rw
                          @ everyone = r #指定组

               还可以指定组
                           [groups]
                           calc-developers = harry, sally, joe
                           paint-developers = frank, sally, jane
                           everyone = @cal-developers, @paint-developers
              
               也可以指定匿名用户:
                           [/]
                           * = r
               熟悉吧,太相似了,配好你自己的吧!详细的可以参考《svn中文手册》的6.4.4.2和6.4.4.3节.

                  然后打开httpd.conf文件,找到前面配置的<Location /svn/>小节,在里面写入配置信息,结果看
              起来像下面的一样:
                        <Location /svn>
                              DAV svn
                              SVNParentPath D:\svnServices

                              AuthzSVNAccessFile C:\svnValidate\svnAccess     # 授权策略文件路径

                             Require valid-user                 # 要求验证客户端身份

                              AuthType Basic #基本认证方式
                             AuthName "xxx公司-源码服务器"      # 密码输入框的提示信息
                             AuthUserFile C:\svnValidate\userValidate # 用户和密码信息文件
                        </Location>

               OK,保存配置,重启服务器.

              验证一下:
                   打开http://localhost/svn/resp1 , 怎么样?要求输入密码了吧,想得到源码?哼哼!
                   权限策略配好了,好好管理你的源码库吧。

                  下一部分写下如何通过SSL进行双向认证,加强我们的源码库的保护。虽然都在提倡开源,
              但……适合下我们的国情嘛!

                没时间写了,待续…….

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics