SVN 1.6的与Apache HTTP Server的集成

Apache HTTP Server安装与SVN集成配置

 

1.1 Apache HTTP Server下载地址

Apache HTTP Server (httpd) 2.2.15 is the best available version

http://httpd.apache.org/download.cgi

Download httpd-2.2.15.tar.gz

1.2 Apache HTTP Server安装

1.2.1 上传解压

svn用户上传安装包httpd-2.2.15.tar.gz/opt/svn/software/Apache目录下。

       [svn@testbed1 Apache]$ tar xvzf httpd-2.2.15.tar.gz

1.2.2 编译配置

$ ./configure --enable-dav --enable-so --prefix=/opt/svn/apache2/

1.2.3 编译

       $ make

1.2.4 安装

       $ make install

1.2.5 配置

接着,通过修改PREFIX/conf/下的配置文件,来配置Apache HTTP服务器。

$ vi PREFIX/conf/httpd.conf

       修改监听端口号 Listen IP:8008

1.2.6 测试

       启动Apache HTTP服务器:

       $ PREFIX/bin/apachectl start

       $ PREFIX/bin/apachectl stop

       现在,可以请求Apache HTTP Server的第一个网页了http://IP:8008/,这个网页位于DocumentRoot目录下,通常是PREFIX/htdocs/

 

1.3 SVNApache HTTP Server结合

      

        通过 HTTP 协议访问版本库是 Subversion 的亮点之一。使用 Http 协议意味着只需要打开浏览器,输入 URL 即可轻松的浏览整个版本库。由于 Subversion 需要版本化的控制,因此标准的 Http 协议不能满足需求。要让 Apache Subversion 协同工作,需要使用 WebDAVWeb 分布式创作和版本控制)。WebDAV HTTP 1.1 的扩展,关于 WebDAV 的规范和工作原理,可以参考 IETF RFC 2518

 

       为了使 Subversion dav 模块通信,需要安装 mod_dav_svn 插件,即mod_dav_svn-1.6.12-1.rhel5.x86_64.rpm组件包,可以在 Subversion 的安装目录中找到。将其拷贝到 Apache 安装目录的 modules 文件夹下。接下来就是配置 Apache httpd.conf 文件,让 Apache 在启动的时候加载上述模块。

 

       root用户进入目录,查找mod_dav_svn插件mod_dav_svn.somod_authz_svn.so

       [root@testbed1 /]# find -name mod_dav_svn.so

       ./usr/lib64/httpd/modules/mod_dav_svn.so

       [root@testbed1 /]# find -name mod_authz_svn.so

       ./usr/lib64/httpd/modules/mod_authz_svn.so

       [root@testbed1 /]# su - svn

       $cp /usr/lib64/httpd/modules/mod_dav_svn.so /opt/svn/apache2/modules/

       $cp /usr/lib64/httpd/modules/mod_authz_svn.so /opt/svn/apache2/modules/

    httpd.conf文件的最后添加如下内容:

LoadModule dav_svn_module     modules/mod_dav_svn.so

LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /repos>

      DAV svn

      SVNPath /opt/svn/svndata/repos

</Location>

     

      Location 标签指出访问的 URL 以及在服务器上的实际位置。配置完毕后重新启动 Apache,打开浏览器,输入 http://IP:Port/repos 将会看到SVN的管理界面。

这表示 Apache dav_svn 模块已经可以正常工作了。用户可以使XX用任何一种 Subversion 的客户端通过 Http 协议访问你的版本库。

如果想要指定多个版本库,可以用多个 Location 标签,也可以使用 SVNParentPath 代替 SVNPath,例如在 /etc/svn 下有多个版本库 repos1repos2 等等,用如下方式指定:

<Location /repos>

  DAV svn

  SVNParentPath /opt/svn/svndata

</Location>

"SVNParentPath /opt/svn/svndata" 表示/opt/svn/svndata下的每个子目录都是一个版本库。可以通过 http://IP:Port/repos/repos1http://IP:Port/repos/repos2 来访问。

现在你的版本库任何人都可以访问,并且有完全的写操作权限。也就是说任何人都可以匿名读取,修改,提交,以及删除版本库中的内容。显然大部分场合这是不符合需求的。那么如何进行权限设置呢,Apache 提供了基本的权限设置。

首先需要创建一个用户文件。Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。具体使用方法如下:

[svn@testbed1 ~]$ mkdir -p /opt/svn/conf

[svn@testbed1 ~]$ vi /opt/svn/conf/password.conf

[svn@testbed1 ~]$ /opt/svn/apache2/bin/htpasswd /opt/svn/conf/password.conf zhaiqi

New password:

Re-type new password:

Adding password for user zhaiqi

如果password.conf文件不存在,可以加上-c选项让htpasswd新建一个,创建好的文件内容是用户名加上密码的 MD5 密文。

 

接下来修改 httpd.conf,在 Location 标签中加入如下内容:

AuthType Basic

AuthName "svn repos"

AuthUserFile /opt/svn/conf/password.conf

Require valid-user

 

重新启动 Apache 打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了,现在只有password.conf文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 "Require valid-user" "Require user user1 user2 " 将只有user1user2可以访问该版本库。

有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit

LimitExcept 标签。例如:

<LimitExcept GET PROPFIND OPTIONS REPORT>

       require valid-user

</LimitExcept>

如上配置将使匿名用户有读取权限,而限制只有password.conf中配置的用户可以使用写操作。如果这还不能满足你的要求,可以使用 Apache mod_authz_svn 模块对每个目录进行认证操作。

mod_authz_svn进行目录访问控制。

首先需要让Apachemod_authz_svn模块加载进来。在Subversion的安装目录中找到mod_auth_svn模块,将其拷贝到Apache安装目录的modules子目录下。修改httpd.conf 文件,找到LoadModule dav_svn_module modules/mod_dav_svn.so,在其后面加上LoadModule authz_svn_module modules/mod_authz_svn.so

现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz 配置如下:

<Location /repos>

  DAV svn

  SVNPath /opt/svn/svndata/repos

  AuthType Basic

  AuthName "svn repos"

  AuthUserFile /opt/svn/conf/password.conf

  AuthzSVNAccessFile /opt/svn/conf/authz.conf

  Satisfy Any

  Require valid-user

</Location>

 

AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定,如:

#两个分组:admingroup,visitorgroup,developers

[groups]

admingroup = zhaiqi,wujinkang

visitorgroup = carlos,marco

developers = jack,michel,rose,user1,user2,user3

#在根目录下指定所有的用户有读权限

[/]

* = r

#追加admingroup组用户有读写权限

@admingroup = rw

#branches/dev目录下指定developers组的用户有读写权限

[/branches/dev]

@developers = rw

#/tags组下给予用户Jack读写权限     

[/tags]

jack = rw

#禁止所有用户访问/private目录

[/private]

* =

#visitorgroup组用户读权限

@visitorgroup = r

 

使用SVNParentPath代替SVNPath来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中Jack将对所有版本库里的/tags目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:

[groups]

project1_admin = user1 user2

project2_admin = jack michel rose

[repos1:/]

* = r

@ project1_admin = rw

[repos2:/]

* = r

@ project2_admin = rw

这样项目1admin组只能对repos1版本库下的文件具有写权限而不能修改版本库repos2,同样项目2admin也不能修改repos1版本库的文件。

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章